TensorBoard
TensorBoard – плагин, позволяющий отслеживать основные потери
Модели (Model), визуализировать Графы (Graph), контролировать различные времязависимые векторы.
Мы сконцентрируемся на метаданных процесса, поскольку это позволит Вам использовать ключевые концепции более эффективно. Вы наверняка заметили, что код фреймворка TensorFlow зачастую выглядит минималистично, и это вызывает вопросы вроде «А как кастомизировать
нейронную сеть под себя?».
Мы загружаем датасет, тренируем модель, настраиваем логгинг, и на этой стадии мы взглянем, что же у нашей модели под капотом. Загрузим расширение с помощью директивы «percent sign load extension»:
%load_ext tensorboard
Импортируем TensorFlow под псевдонимом tf, а также библиотеку datetime
для автоматизации нейминга логов:
import tensorflow as tf
import datetime
Очистим предыдущие логи в специальной директории, если таковые имеются:
!rm -rf ./logs/
Используем модифицированный датасет Национального института стандартов и разделим загруженный датасет на тренировочную и валидационную части с помощью множественного присваивания.
mnist = tf.keras.datasets.mnist
# Разделим загруженный датасет на тренировочную и валидационную части
# с помощью множественного присваивания
(x_train, y_train),(x_test, y_test) = mnist.load_data()
# Нормализуем данные, разделив значения на 255. Поскольку мы используем
# изображения, то описываются они как последовательность пикселей
# в цветовой модели RGB. Каждый пиксель описывается в три числа от 0 до 255,
# потому мы и делим их все на 255, чтобы привести к диапазону от 0 до 1.
# С таким форматом данных нейронная сеть и будет работать.
x_train, x_test = x_train / 255.0, x_test / 255.0
# Определим функцию–создателя модели
def create_model():
# Используем последовательную модель API Keras. Она подходит для
# простого стека слоев, где на входе и выходе по одному тензору.
return tf.keras.models.Sequential([
# Сделаем слои плоскими. Поскольку мы делим датасет на партии (batches)
# и не указываем разрешение канала, то Flatten() добавляет его и тем
# самым упорядочивает обучение. Размер изображений – 28 на 28.
tf.keras.layers.Flatten(input_shape=(28, 28)),
# Добавим полносвязный слой размерностью 512
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dropout(0.2),
# Добавим второй полносвязный слой и используем метод активации softmax.
# Типов одежды у нас 10. Нейросеть будет работать как фильтр, принимая
# изображения размером 28 на 28 и делая преположения, к какой из 10
# категорий относится то или иное изображение.
tf.keras.layers.Dense(10, activation='softmax')
])
Создадим модель и скомпилируем ее, используя метод оптимизации Adam.
Введем метрику точности, чтобы визуализировать ход обучения, зададим директорию для хранения логов – мини-отчетов обучения. С помощью метода now() мы зашьем в название каждого лога временной штамп.
model = create_model()
# Скомпилируем модель, используя метод оптимизации Adam
model.compile(optimizer='adam',
# и уменьшая потери с помощью встроенного алгоритма
# кросс-энтропии, на котором мы не будем останавливаться
# подробно.
loss='sparse_categorical_crossentropy',
# Введем метрику точности, чтобы визуализировать ход обучения
metrics=['accuracy'])
# Зададим директорию для хранения логов – мини-отчетов обучения.
# Используем метод now() библиотеки datetime, чтобы именовать каждый файл
# лога временным штампом – год, месяц, день, час, минута, секунда.
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
# Процесс генерации логов будет идти параллельно обучению, потому мы используем
# коллбэки.
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
# Начнем тренировку в с использованием учебных данных в 5 эпох с последующей
# валидацией и коллбэком создания логов.
model.fit(x=x_train,
y=y_train,
epochs=5,
validation_data=(x_test, y_test),
callbacks=[tensorboard_callback])
Раздел «Скаляры» показывает изменение параметров потери и точности:

Раздел «Графы» отображают процесс обработки данных наподобие UML-диаграммы, только синтаксис видоизменен:

В разделе «Распределения» можно увидеть, как тензор
распределяется по времени и смещение графа.

Теперь вы знаете, как создать полносвязную нейронную сеть, где каждый узел слоя связан с окружающими его узлами, и вступили на путь тонкой настройки процесса Машинного обучения (ML).
Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.
Фото: @luciandachman