Краткий обзор TensorFlow

Написанный на языке С++ командой Google в 2015 году TensorFlow является одним из самым популярных фреймворков Deep Learning. Сегодня пойдет речь об интерфейсе, который предоставляет TensorFlow для Python: разница между Tensorflow 1 и TensorFlow 2, встроенный фреймворке Keras, построение моделей и визуализация с TensorBoard.

TensorFlow 1 и TensorFlow 2

Прежде всего проведем границу между версиями TensorFlow 1.x и TensorFlow 2.x. У них есть разительные отличия. Как уже было сказано в прошлой статье, фреймворк оперирует статическими вычислительными графами, а это значит, что они выполняются только в момент компиляции. Рассмотрим тривиальный пример: сумму двух скаляров (чисел). В TensorFlow 1 результатом этой суммы окажется не число, а операция, которую нужно выполнить в будущем:

>>> a = tf.constant(3.0)
>>> b = tf.constant(4.0)
>>> total = a + b
Tensor("add:0", shape=(), dtype=float32)

Для того чтобы получить результат вычисления, необходимо инициализировать tf.Session:

>>> sess = tf.Session()
>>> sess.run(total)
7.0

Подобные действия могут отвлекать от самого процесса построения моделей машинного обучения и к тому же приносить неудобства при отладке. Поэтому TensorFlow 2 лишен этих лишних действий с Session и placeholders – теперь можно производить вычисления на лету благодаря режиму Eager, который включен по умолчанию:

>>> a = tf.constant(3.0)
>>> b = tf.constant(4.0)
>>> total = a + b
<tf.Tensor: shape=(), dtype=float32, numpy=7.0>
>>> tf.executing_eagerly()
True

Такой режим позволяет следить за отладкой, но есть у него недостаток – вычисления производятся медленнее. Поэтому если вы строите модель и экспериментируете с ней, то лучше оставить режим Eager. А если требуется модель в production-качестве, то его лучше отключить. Для повышения производительности режима Eager разработчики рекомендуют использовать декоратор tf.function:

@tf.function
def dense_layer(x, w, b):
    return add(tf.matmul(x, w), b)

dense_layer(tf.ones([3, 2]), tf.ones([2, 2]), tf.ones([2]))

Кроме того, TensorFlow 2 интегрировала слои, функции активации, функции потерь, метрики в модуль tf.keras, поэтому само построение модели должно осуществляться через этот модуль. В первой версии создавать слои можно было несколькими способами, включая через фреймворк Keras.

Модуль Keras в TensorFlow 2

Фреймворк глубокого обучения Keras перекочевал в TensoFlow 2, и теперь его функционал хранится в модуле tf.keras. Данный модуль содержит инструменты для построения модели, такие как:

  • Слои (layers), включая полносвязный (Dense), сверточный (Conv1D), рекуррентный (RNN, LSTM). Всего насчитывается 105 слоев.
  • Функции активации (activations), включая Softmax, ReLU, Sigmoid. Некоторые же функции активации, например, PReLU, доступны в виде слоев. Всего их 15.
  • Функции потерь (losses), включая Binary Crossentropy, MAE, MSE. Всего их 25.
  • Метрики(metrics), например, MAE, MSE, Cosine Similarity. Всего 43 в виде классов и 25 в виде функций.
  • Оптимизаторы (optimizers), включая SGD, Adam, Adagrad. Всего их 9.
  • Обратные вызовы (callbacks), включая RemoteMonitor для передачи событий на сервер, History для отслеживания истории событий модели, EarlyStopping для остановки модели в случае отсутствии улучшений, TensorBoardдля активации режима визуализации. Всего их 14.

Построение моделей

Есть два пути создания моделей в TensorFlow. Первый подразумевает последовательное наслоение блоков, как в конструкторе. В этом случае вы доверяете встроенным реализациям алгоритмов прямого и обратного проходов. Ниже на Python создается нейронная сеть (neural network) с полносвязными слоями, которая иллюстрирует блочный вид построения.

model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(shape_0, shape_1)),
    tf.keras.layers.Dense(256, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

Продвинутые ML-специалисты могут воспользоваться вторым вариантом, создавая модель со своими слоями, функциями активациями и т.д. Этот вид построения подразумевает субклассирование. Пример ниже иллюстрирует, как в Python можно построить сверточную нейронную сеть (convolutional neural network).

class MyModel(tf.keras.Model):
  def __init__(self):
    super(MyModel, self).__init__()
    self.conv1 = Conv2D(64, 3, activation='relu')
    self.flatten = Flatten()
    self.d1 = Dense(128, activation='relu')
    self.d2 = Dense(10, activation='softmax')

  def call(self, x):
    x = self.conv1(x)
    x = self.flatten(x)
    x = self.d1(x)
    return self.d2(x)
model = MyModel()

with tf.GradientTape() as tape:
  logits = model(images)
  loss_value = loss(logits, labels)
grads = tape.gradient(loss_value, model.trainable_variables)
optimizer.apply_gradients(zip(grads, model.trainable_variables))

Вариант с субклассированием открывает поле для экспериментов, но придется изучить API-интерфейс, который предоставляет tf.keras.

Визуализация с TensorBoard

TensorFlow имеет собственный инструмент для визуализации — TensorBoard. С помощью TensorBoard можно

  • следить за процессом изменения точности (accuracy) и потерь (loss) в реальном времени;
  • визуализировать граф модели со слоями и операциями;
  • показать параметры модели (веса, смешения) или другие тензоры, которые меняются со временем;
  • вывести картинки, видео или аудио.
  • и многое другое [1].

Вывести TensorBoard можно на локальном компьютере в localhost, либо в блокнотах Jupyter или Colab. Рисунок ниже иллюстрируют интерфейс TensorBoard.

Отображение показателей точности и потерь в TensorBorad TensorFlow
Интерфейс TensorBoard

 

В следующей статье проведем краткий обзор PyTorch. А как применять фреймворк TensorFlow для построения моделей машинного обучения в реальных задачах Data Science, вы сможете узнать на наших курсах по Python в лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве.

Источники
  1. https://www.tensorflow.org/tensorboard/

Добавить комментарий

Поиск по сайту