В современном мире найти решение проблемы легко, но найти оптимальное решение сложнее.
То же самое относится и к области науки о данных: существует множество алгоритмов для выполнения задачи, но поиск правильного алгоритма с правильным набором параметров, который подходит вашим данным, является основной проблемой, с которой сталкивается каждый специалист по данным.
Это требует большого количества экспериментов с различными алгоритмами, тонкой настройки параметров модели, мониторинга потерь при обучении и проверке, анализа матриц путаницы и многого другого. Управление этими многочисленными экспериментальными данными может показаться трудным, но использование neptune.ai может помочь упростить этот процесс, эффективно решая все эти задачи с помощью всего лишь нескольких строк кода.
Знакомство с neptune.ai
Neptune — это компонент стека, предназначенный для упрощения и улучшения управления экспериментами по машинному обучению. Независимо от того, являетесь ли вы специалистом по данным, исследователем или разработчиком, Neptune дает вам возможность легко отслеживать, визуализировать и оптимизировать ваши эксперименты в одном централизованном центре. Благодаря интуитивно понятному интерфейсу и мощным функциям Neptune меняет ваш подход к экспериментам и совместной работе, делая сложные задачи простыми и достижимыми.
Руководство по быстрой установке Neptune на Python
Настроить проект и подключить ваши скрипты к Neptune очень просто. Давайте позаботимся об этом быстро.
Шаг 1. Зарегистрируйтесь и создайте проект.
- Зайдите в приложение Нептун,
- Зарегистрируйте аккаунт, если вы еще этого не сделали,
- Нажмите кнопку «Новый проект» слева,
- Дайте ему имя,
- Решите, хотите ли вы, чтобы это было общедоступным или частным,
- Сделанный.
Шаг 2. Получите токен API. Вам понадобится токен API Neptune (ваш личный ключ) для подключения сценариев, которые вы запускаете с помощью Neptune.
- Нажмите на свой логотип пользователя в правой части экрана,
- Нажмите «Получить свой токен API»,
- Скопируйте свой токен API,
- Вставьте его в переменную среды, файл конфигурации или непосредственно в свой скрипт.
Шаг 3. Установите клиентскую библиотеку Neptune:
Поскольку я использую Python, я буду использовать клиент Python, но вы также можете использовать Neptune с языком R.
pip install neptune
Шаг 4: Инициализация Нептуна
Теперь, когда у вас все настроено, вы можете приступить к мониторингу!
Сначала подключите свой скрипт к Нептуну, добавив в начало скрипта следующее:
import neptune run = neptune.init_run( project="workspace/project-name", api_token="your-api-token", )
При выполнении приведенного выше кода создается прогон Neptune, который представляет собой пространство имен внутри проекта, где вы можете регистрировать метаданные построения модели. Регистрировать любую метрику так же просто, как назначить переменную.
запустить[“WHAT_YOU_WANT_TO_LOG”] = ITS_VALUE
Существует множество полей, которые мы можем зарегистрировать, чтобы определить эффективность каждого эксперимента и выбрать лучшую модель, которую мы увидим ниже.
Для более глубокого понимания ознакомьтесь с подробной документацией Neptune.
Использование Нептуна в коде
Теперь, когда вы настроили Нептун, пришло время приступить к созданию нашей первоначальной модели.
Я создам модель, которая сможет распознавать цифры на изображениях, используя набор данных MNIST. Наша главная цель — показать, как Нептун может быть невероятно полезен при разработке модели искусственного интеллекта.
Импортируйте всю необходимую библиотеку:
#Importing Libraries import neptune import numpy as np from numpy import mean from numpy import std from tensorflow.keras.datasets import mnist from tensorflow.keras.callbacks import Callback from sklearn.model_selection import train_test_split, KFold from sklearn.metrics import confusion_matrix from tensorflow.keras.utils import to_categorical from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dense, Flatten from tensorflow.keras.optimizers import SGD import matplotlib.pyplot as plt import itertools
Настройка запуска Нептуна и запись гиперпараметров, потерь и точности для каждой эпохи:
В приведенном ниже коде вы заметите, насколько легко любое значение можно зарегистрировать в Neptune с помощью всего лишь одной строки кода. Чтобы фиксировать показатели точности и потерь для каждой эпохи, мы создали собственный класс обратного вызова, который извлекает необходимую информацию в конце каждой эпохи.
# Creating a neptune run to log all the metrics and experiment parameter run = neptune.init_run( project="gajanand.chowdhary/mnist-classification", api_token="#your-api-token", ) # Hyperparameters to be used in the current experiment params = {"batch_size":32,'epochs':10,'learning_rate':0.01} run['parameters'] = params # Custom Callback to log the metrics in neptune for each epoch in training class CustomNeptuneCallback(Callback): def __init__(self, run): super().__init__() self.run = run def on_epoch_end(self, epoch, logs=None): self.run['accuracy'].append( logs['accuracy']) self.run['loss'].append( logs['loss']) self.run['val_loss'].append( logs['val_loss']) self.run['val_accuracy'].append( logs['val_accuracy'])
Подготовка набора данных MNIST:
Мы воспользуемся полезным служебным модулем keras, чтобы получить набор данных и подготовить его для непосредственного использования с нашей моделью.
# load train and test dataset def load_dataset(): # load dataset (trainX, trainY), (testX, testY) = mnist.load_data() # reshape dataset to have a single channel trainX = trainX.reshape((trainX.shape[0], 28, 28, 1)) testX = testX.reshape((testX.shape[0], 28, 28, 1)) print(type(trainX)) # one hot encode target values trainY = to_categorical(trainY) testY = to_categorical(testY) return trainX, trainY, testX, testY # scale pixels def prep_pixels(train, test): # convert from integers to floats train_norm = train.astype('float32') test_norm = test.astype('float32') # normalize to range 0–1 train_norm = train_norm / 255.0 test_norm = test_norm / 255.0 # return normalized images return train_norm, test_norm
Подготовка и оценка модели:
Чтобы построить модель, которая сможет идентифицировать цифру по изображению, мы создадим базовую архитектуру CNN. Эта архитектура будет иметь входной уровень, за которым следуют уровень максимального пула и плотный уровень.
Затем мы обучим модель, используя различные комбинации параметров, и рассчитаем окончательную точность модели на тестовых данных.
# define cnn model def define_model(): model = Sequential() model.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', input_shape=(28, 28, 1))) model.add(MaxPooling2D((2, 2))) model.add(Flatten()) model.add(Dense(100, activation='relu', kernel_initializer='he_uniform')) model.add(Dense(10, activation='softmax')) # compile model opt = SGD(learning_rate=params['learning_rate'], momentum=0.9) model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy']) return model # evaluate a model using k-fold cross-validation def evaluate_model(dataX, dataY, n_folds=2): scores, histories = list(), list() np_callback = CustomNeptuneCallback(run) model = define_model() # select rows for train and test trainX, testX, trainY, testY = train_test_split(dataX, dataY, test_size=0.2, random_state=42) # fit model history = model.fit(trainX, trainY, epochs=params['epochs'], batch_size=params['batch_size'], validation_data=(testX, testY), verbose=0, callbacks = [np_callback]) # evaluate model _, acc = model.evaluate(testX, testY, verbose=0) print('> %.3f' % (acc * 100.0)) return model, history
Собираем все функции вместе:
Все необходимые функции написаны, теперь будем вызывать каждую функцию по порядку и получать матрицу путаницы для эксперимента. Мы можем не только регистрировать параметры и метрики, но также загружать изображения, текст, сценарии и файлы блокнотов в Нептун, чтобы отслеживать каждый эксперимент.
def run_test_harness(): # load dataset trainX, trainY, testX, testY = load_dataset() # prepare pixel data trainX, testX = prep_pixels(trainX, testX) # evaluate model model, histories = evaluate_model(trainX, trainY) predicted_labels = np.argmax(model.predict(testX), axis=-1) true_labels = np.argmax(testY, axis=-1) # Create the confusion matrix cm = confusion_matrix(true_labels, predicted_labels) plot_confusion_matrix(cm, "mnist-cm", [0,1,2,3,4,5,6,7,8,9]) run["test/conf_matrix"].upload("confusion-matrix.png") def myprint(s): with open('modelsummary.txt','a') as f: print(s, file=f) model.summary(print_fn=myprint) run["model/model_summary"].upload("modelsummary.txt") run_test_harness()
Вот как мы можем построить модель с помощью neptune.ai, провести множество экспериментов, эффективно управлять всеми параметрами, показателями производительности каждого эксперимента и решить, какая модель лучше всего подходит для конкретного варианта использования.
Изучение панели управления Нептуна
Теперь давайте совершим экскурсию по панели управления Neptune, чтобы наконец увидеть, как выглядят наши различные эксперименты, и сравнить их друг с другом.
Начните с панели мониторинга (рис. 1) со списком всех запусков в рамках созданного проекта. Мы можем получить все подробности запуска на вкладке «Детали запуска» или сравнить наши различные эксперименты, используя вкладку «Сравнить запуски».
Рисунок 1. Панель мониторинга: список запусков с уникальным идентификатором
Мы можем выбрать столько прогонов/экспериментов, сколько нам нужно, и сравнить зарегистрированные показатели точности и потерь, матрицу ошибок, параметры, используемые в эксперименте, а также спланировать другие эксперименты на основе приведенного ниже анализа.
Рисунок 2. Сравнение точности и потерь
С помощью приведенного выше сравнения различных прогонов мы можем сделать вывод, что прогон «MNIS-2» показал лучшие результаты с данным набором параметров.
Рисунок 3. Результат матрицы неточностей для экспериментов
Рисунок 4. Сравнение гиперпараметров экспериментов.
Благодаря всем бесконечным функциям Neptune он также предоставляет возможность сохранять сценарии, наборы данных и файлы весов моделей, чтобы любой эксперимент можно было воспроизвести в кратчайшие сроки.
Рисунок 5. Исходный код: полный сценарий
Рисунок 6. Сводная информация о модели
Финальное подведение итогов
В заключение, использование Neptune в качестве инструмента для отслеживания экспериментов при построении моделей машинного и глубокого обучения может значительно улучшить ваш рабочий процесс, предоставляя вам оптимизированный подход к экспериментам, мониторингу и совместной работе.
Благодаря комплексным возможностям, предлагаемым Neptune, вы получаете возможность эффективно управлять экспериментами, отслеживать показатели и визуализировать результаты — и все это на централизованной платформе. Это позволяет ученым, работающим с данными, больше сосредоточиться на творческих аспектах разработки моделей и меньше на сложностях отслеживания экспериментов.