Работали ли вы с TensorFlow?

«Работали ли вы с TensorFlow?» — вопрос из категории Нейронные сети и Deep Learning, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, активно использую TensorFlow 2.x и его высокоуровневый API Keras для построения и обучения нейронных сетей.

1. Энд-ту-энд пайплайн:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

# a) Загрузка и аугментация данных (tf.data API для эффективности)
dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train))
dataset = dataset.shuffle(buffer_size=1024).batch(64).prefetch(tf.data.AUTOTUNE)

# b) Построение модели (Functional API для сложных архитектур)
inputs = keras.Input(shape=(28, 28, 1))
x = layers.Conv2D(32, 3, activation='relu')(inputs)
x = layers.MaxPooling2D()(x)
x = layers.Flatten()(x)
outputs = layers.Dense(10, activation='softmax')(x)
model = keras.Model(inputs=inputs, outputs=outputs)

# c) Компиляция с кастомными метриками и callback'ами
model.compile(
    optimizer=keras.optimizers.Adam(learning_rate=1e-3),
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy', keras.metrics.Precision()]
)

# d) Обучение с callbacks
callbacks = [
    keras.callbacks.EarlyStopping(patience=5),
    keras.callbacks.ModelCheckpoint('best_model.keras'),
    keras.callbacks.TensorBoard(log_dir='./logs')
]
model.fit(dataset, epochs=50, callbacks=callbacks, validation_data=(X_val, y_val))

2. Продвинутые сценарии:

  • Кастомные слои и потери: Реализовывал свои функции потерь (например, для задачи детекции) и слои, наследуясь от keras.Layer.
  • Смешанная точность (Mixed Precision): Использовал для ускорения обучения на GPU с тензорами в float16.
  • Распределенное обучение: Опыт работы со стратегией MirroredStrategy для обучения на нескольких GPU одной машины.
  • Экспорт и serving: Конвертировал модели в SavedModel формат для развертывания через TensorFlow Serving или TFLite (для мобильных устройств).

Сравнение с PyTorch: Для быстрого прототипирования и исследований в академическом стиле PyTorch может быть удобнее. Однако для промышленного пайплайна, особенно когда важны готовые инструменты для деплоя (TF Serving, TFX) и поддержка продакшн-инфраструктуры (Google Cloud AI Platform, TensorFlow Enterprise), выбор часто падает на TensorFlow.