В этом посте я хотел бы поэкспериментировать с моделью TensorFlow / Keras на облачной платформе neptune.ai и посмотреть, как мы можем отслеживать наши эксперименты.

Neptune.ai предлагает установку как в облаке, так и на месте, здесь в этом посте я буду работать в первую очередь с отдельными учетными записями в облаке.

Настройка Jupyterlab

Затем я хотел бы подключить свой локальный Jupyterlab к Neptune, что позволит мне проводить эксперименты локально и отслеживать прогресс в облаке Neptune.

Во-первых, вам необходимо установить плагин Neptune, который вы можете найти на торговой площадке jupyterlab, обязательно установите npm / nodejs в своей среде, прежде чем включать его.

Если плагин включен, вам необходимо настроить токен API, который вы можете скопировать из своей облачной учетной записи neptune в разделе учетной записи. Если он включен, вы увидите параметры на панели инструментов jupterlab.

Создать эксперимент

Установка

Установка с помощью pip довольно проста.

pip install neptune-client neptune-tensorflow-keras tensorflow

После установки всех библиотек запустите приведенную ниже модель TensorFlow на своем ноутбуке, заменив ее именем проекта Neptune и токеном API.

import tensorflow as tf
import neptune.new as neptune
from neptune.new.integrations.tensorflow_keras import NeptuneCallback
run = neptune.init(
    project="<neptune_project_name>",
    api_token="api_tocken",
)  # your credentials
params = {"lr": 0.005, "momentum": 0.4, "epochs": 30, "batch_size": 128}
run["parameters"] = params
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential(
    [
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(256, activation=tf.keras.activations.relu),
        tf.keras.layers.Dropout(0.5),
        tf.keras.layers.Dense(10, activation=tf.keras.activations.softmax),
    ]
)
optimizer = tf.keras.optimizers.SGD(
    learning_rate=params["lr"],
    momentum=params["momentum"],
)
model.compile(
    optimizer=optimizer, loss="sparse_categorical_crossentropy", metrics=["accuracy"]
)
neptune_cbk = NeptuneCallback(run=run, base_namespace="training")
model.fit(
    x_train,
    y_train,
    epochs=params["epochs"],
    batch_size=params["batch_size"],
    callbacks=[neptune_cbk],
)
eval_metrics = model.evaluate(x_test, y_test, verbose=0)
for j, metric in enumerate(eval_metrics):
    run["eval/{}".format(model.metrics_names[j])] = metric
run.stop()

После успешного запуска вы обнаружите, что в облаке Neptune создается новая строка запуска эксперимента, которая будет отслеживать производительность и другие матрицы вашей модели.

Отслеживание экспериментов

В первом прогоне, за 10 эпох и размер пакета 64, точность достигла около 94%.

График зависимости точности / потерь от размера партии

График точности / потерь в зависимости от эпох

Во втором прогоне, за 20 эпох и размер пакета 64, точность повысилась примерно до 95%.

В третьем прогоне, через 30 эпох и размер пакета 128, точность начала падать на тестовом наборе, поскольку она все еще улучшается на обучающем наборе, который движется в направлении переобучения.

Нептун также отслеживает использование ЦП и памяти во время тренировки, что довольно круто. В нашем эксперименте мы использовали около 20% ЦП и 11 ГБ памяти.

в метаданных eval вы можете найти метрики acc / loss в наборе eval. Все метаданные, которые развиваются в ходе эксперимента, можно отслеживать на вкладке метаданных.

в метаданных eval вы можете найти метрики acc / loss в наборе eval

в обучающих метаданных вы можете найти метрики Acc / loss на обучающем наборе.

при интеграции исходного кода вы можете отслеживать снимки ваших записных книжек.

в параметрах вы можете отслеживать все гиперпараметры с течением времени

мониторинг предоставит вам матрицы для использования оборудования.

Пока что Neptune предоставляет очень желаемые матрицы для отслеживания производительности модели. В следующем посте мы обсудим реестр моделей с Neptune. Быть в курсе!