TensorFlow
TensorFlow — это созданный Google фреймворк машинного обучения с открытым исходным кодом для обучения и развёртывания моделей на серверах, в браузерах и на телефонах; высокоуровневый API в нём предоставляет Keras.
TensorFlow — это фреймворк с открытым исходным кодом для машинного обучения (ML), выпущенный Google в ноябре 2015 года по лицензии Apache 2.0. Команда Google Brain разработала его для внутренних исследований и продуктов. Программы для глубокого обучения и других численных вычислений представляют вычисления как операции над тензорами — многомерными массивами чисел. TensorFlow автоматически вычисляет их производные, компилирует их в оптимизированные графы и запускает на CPU, GPU и TPU. Экосистема охватывает весь процесс MLOps — от обучения до развёртывания модели: Keras для определения моделей, TensorBoard для отслеживания экспериментов, TensorFlow Serving для обслуживания моделей в production, TensorFlow.js для браузеров и LiteRT, ранее TensorFlow Lite, для телефонов и встроенных устройств с периферийным ИИ. В марте 2026 года, с выходом TensorFlow 2.21, Google заявил, что дальнейшая работа над TensorFlow будет сосредоточена на безопасности и исправлении ошибок, обновлении зависимостей и вкладах сообщества, а для новых проектов в области генеративного ИИ рекомендовал Keras 3, JAX или PyTorch.
Как работает TensorFlow#
В TensorFlow 1.x сначала нужно было создать статический вычислительный граф, а затем выполнить его в сессии. В TensorFlow 2.0, выпущенном в 2019 году, режим eager execution стал стандартным: операции выполняются сразу, как обычный код Python, а графы сохранились как способ оптимизации. Функция с декоратором tf.function один раз трассируется для каждой сигнатуры входных данных в граф, который TensorFlow может оптимизировать, скомпилировать компилятором XLA и сохранить в формате SavedModel для развёртывания без Python. tf.GradientTape записывает операции прямого прохода, чтобы TensorFlow мог вычислить градиенты для обратного распространения ошибки и градиентного спуска. Этот код выполняет обе задачи:
import tensorflow as tf
w = tf.Variable([[1.0], [-2.0]])
x = tf.constant([[3.0, 4.0]])
@tf.function # trace the Python function into a TensorFlow graph on the first call
def loss_fn(x):
print("Tracing") # Python code runs only while tracing, not on every call
return tf.reduce_sum((x @ w) ** 2)
# Record operations on a tape to compute the gradient of the loss with respect to w
with tf.GradientTape() as tape:
loss = loss_fn(x)
gradient = tape.gradient(loss, w)
loss_fn(x) # same input shape and dtype: reuses the traced graph without printing
print(f"loss {loss.numpy()}, gradient {gradient.numpy().ravel()}")Сначала он один раз выводит Tracing, а затем — loss 25.0, gradient [-30. -40.]: при втором вызове выполняется кэшированный граф без запуска тела функции Python, а градиент (3w₁ + 4w₂)² в точке w = (1, -2) равен 2 × (-5) × (3, 4). Для распределённого обучения стратегии tf.distribute реплицируют модель на нескольких GPU, срезах TPU или машинах.
Экосистема TensorFlow#
- Keras: высокоуровневый API для определения слоёв и моделей, а также их обучения с помощью
fit. Начиная с TensorFlow 2.16, при установке TensorFlow устанавливается Keras 3, который также работает с JAX и PyTorch. - TensorBoard: панель мониторинга кривых потерь, метрик, гистограмм и графов моделей во время обучения. Она также считывает журналы других фреймворков, в том числе запусков обучения Ultralytics YOLO, а TensorFlow 2.21 больше не устанавливает её как зависимость.
- TensorFlow Serving: система обслуживания, которая загружает SavedModel и отвечает на запросы предсказаний через gRPC или REST, поддерживая версионирование для горячей замены моделей.
- TFX: конвейерный фреймворк для машинного обучения в production, который связывает проверку данных, обучение, оценку и передачу одобренной модели в систему обслуживания.
- TensorFlow.js: запускает и обучает модели в браузере и Node.js, поэтому инференс может выполняться на устройстве пользователя без отправки данных на сервер.
- LiteRT: среда выполнения Google на устройстве для Android, iOS, встроенного Linux и микроконтроллеров; в сентябре 2024 года она получила новое имя вместо TensorFlow Lite. Она запускает модели
.tflite, преобразованные из TensorFlow, PyTorch или JAX, с ускорением на мобильных GPU и NPU.
TensorFlow, PyTorch и JAX#
- PyTorch и TensorFlow: PyTorch изначально строился вокруг eager execution, а
torch.compileдобавляет компиляцию графов. Это фреймворк по умолчанию для большинства новых исследовательских проектов и моделей с открытыми весами, тогда как сильная сторона TensorFlow — зрелый стек развёртывания для серверов, браузеров и мобильных устройств. - JAX: библиотека Google в стиле NumPy с компонуемыми преобразованиями:
gradдля вычисления производных,jitдля компиляции XLA иvmapдля векторизации. Google обучает модели Gemini с помощью JAX. - Keras: высокоуровневый API, а не отдельный вычислительный движок. Код Keras 3 работает с TensorFlow, JAX или PyTorch, поэтому определение модели не привязывает проект к одному фреймворку.
Преобразование моделей для сред выполнения TensorFlow#
Модели, обученные в других фреймворках, можно использовать с инструментами развёртывания TensorFlow с помощью конвертеров: onnx2tf перестраивает граф ONNX как TensorFlow SavedModel, jax2tf оборачивает функции JAX в функции TensorFlow, а LiteRT Torch Converter от Google напрямую создаёт модели LiteRT из PyTorch. Модели Ultralytics YOLO написаны на PyTorch, а их режим экспорта использует эти способы для YOLO26: format="saved_model" экспортирует ONNX и преобразует его с помощью onnx2tf в SavedModel для TensorFlow Serving, format="edgetpu" компилирует модель INT8 для Coral Edge TPU, а format="litert" использует LiteRT Torch, поэтому TensorFlow устанавливать не нужно. Этот код выполняет экспорт SavedModel:
from ultralytics import YOLO
# Load the smallest YOLO26 detection model
model = YOLO("yolo26n.pt")
# Convert through ONNX to a TensorFlow SavedModel directory
path = model.export(format="saved_model")
print(f"SavedModel: {path}")При экспорте создаётся папка yolo26n_saved_model, которую tf.saved_model.load загружает в Python, а сама Ultralytics YOLO может запускать её с помощью YOLO("yolo26n_saved_model").










