Python и AutoKeras

AutoML - интересная область в индустрии машинного обучения, обещающая более быстрые циклы генерации моделей. В последнее время я работал над проектом глубокого обучения с Tensroflow и Keras. Из чистого любопытства и для того, чтобы постоянно учиться, я решил попробовать автоматизированное глубокое обучение, в частности AutoKeras.

Мотивация написания этой статьи связана с небольшим количеством ресурсов по теме. Вначале я искал только информацию, в которой я нашел очень небольшое количество пошаговых руководств, и ни одно из них не является актуальным. С учетом сказанного, в рамках данной статьи рассматривается базовый вариант использования AutoKeras и макет файловой структуры. В него входит репозиторий GitHub: D. Полезны некоторые предварительные знания о Tensorflow и Keras.

Настройка

Справедливое предупреждение: я пытался использовать последнюю версию всех пакетов, однако на момент написания этой статьи у меня были проблемы совместимости с Tensorflow == 2.3.1 и AutoKeras == 1.0.10 - › переход на AutoKeras == 1.0.8 решил проблемы.

Установка

Первое, что необходимо сделать, это установить виртуальную среду Python в каталоге, в котором вы собираетесь работать над проектом. Python имеет очень простую команду для виртуальных сред, версия python будет такой же, как версия, установленная в каталоге PATH:

python -m venv DL_Env
DL_Env\Scripts\activate.bat # Windows activate
source DL_Env/bin/activate # Linux activate

После активации виртуальной среды следующим шагом будет установка необходимых пакетов. Нам нужны только Tensorflow == 2.3.1 и AutoKeras == 1.0.8, они также доступны в репозитории GitHub в файле requirements.txt.

pip install Tensorflow==2.3.1
pip install AutoKeras=1.0.8
pip install git+https://github.com/keras-team/[email protected]

Файловая структура

После установки всех соответствующих пакетов мы можем перейти к другому очень важному шагу, а именно к файловой структуре. Автоматическое машинное обучение будет генерировать множество моделей и много информации для моделей в зависимости от определения пользователя в скриптах. Очень важно иметь хорошую структуру файловой структуры, которая была бы интуитивно понятной и простой для понимания. Лично я не нашел никакой информации о том, какая структура лучше, поэтому здесь я поделюсь самодельной структурой, которая выполнит свою работу и доказала свою эффективность на личном опыте.

+-- Project_Folder
|   +-- DL_Env
|   +-- Datasets
|   +-- Logs
|   +-- Models
|   +-- Projects
|   +-- Datasets
|   +-- Tensorboard
|   +-- main.py

AutoKeras

Весь процесс будет заключен в один скрипт - ›main.py. Сначала мы должны выполнить импорт и загрузку набора данных. Проблема, которую мы решаем, переходит к классификатору структурированных данных, и набор данных для этой задачи будет титаническим набором данных. Набор гигантских наборов данных был выбран специально, поскольку он широко известен в сообществе специалистов по науке о данных и, таким образом, предлагает своего рода ориентир того, как AutoKeras будет с ним справляться.

import tensorflow as tf
import autokeras as ak
import kerastuner
​
TRAIN_DATA_URL = "https://storage.googleapis.com/tf-datasets/titanic/train.csv"
TEST_DATA_URL = "https://storage.googleapis.com/tf-datasets/titanic/eval.csv"
​
train_file_path = tf.keras.utils.get_file("train.csv", TRAIN_DATA_URL)
test_file_path = tf.keras.utils.get_file("eval.csv", TEST_DATA_URL)
​
tensorboard_callback_train = tf.keras.callbacks.TensorBoard(log_dir='Tensorboard//logs_autokeras_f1_score_10%')
tensorboard_callback_test = tf.keras.callbacks.TensorBoard(log_dir='Tensorboard//logs_autokeras_f1_score_10%')
​
Early_Stopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=101)

Следующим шагом является вызов типа классификатора, который мы хотим использовать в AutoKeras. Поскольку мы имеем дело со структурированными данными и сталкиваемся с проблемой классификации, мы должны использовать объект классификатора структурированных данных, предоставляемый AutoKeras.

# Initialize the structured data classifier.
clf = ak.StructuredDataClassifier(
    project_name = "Projects/First_Run",
    objective=kerastuner.Objective('accuracy', direction='max'),
    metrics=["accuracy"],
    overwrite=True,
    max_trials=1001)

Итак, давайте рассмотрим каждый параметр. Параметр имени проекта создаст папку в ранее созданном подкаталоге «Projects». В папке будут находиться все испытания, то есть модели, созданные в процессе. Overwrite True означает, что папка должна быть очищена от всех проб и новых запусков, которые будут сохранены. В объективном параметре мы можем определить, какой метрике должен отдавать приоритет AutoKeras, и должен ли AutoKeras максимизировать или минимизировать эту метрику во время нейронного архитектурного поиска. Вы можете добавлять собственные метрики, такие как F1, F0.5, AUC и т. Д. Те же самые метрики можно поместить в параметр «метрики», который будет сообщаться во время обучения и во время оценки. Наконец, параметр max_trials сообщает AutoKeras, сколько моделей или испытаний различных комбинаций гиперпараметров необходимо сгенерировать.

Поскольку мы определили классификатор и его параметры, мы можем начать процесс:

clf.fit(
    train_file_path # or  train_x and train_y
    epochs=151,
    verbose=2,
    callbacks=[tensorboard_callback_train, Early_Stopping],
    batch_size=1001
    )

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

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

clf_best_model = clf.export_model()
clf_best_model.save("Models/First_Run", save_format="tf")
print(accuracy=clf.evaluate(test_file_path, "survived"))

Если вы откроете другой скрипт, вы можете загрузить модель и использовать ее для прогнозирования без импорта AutoKeras:

from tensorflow.keras.models import load_model
​
Custom_Objects = ak.CUSTOM_OBJECTS
​
# If you have custom metrics add each metric accordingly
# Custom_Objects["f1_score"] = f1_score
​
loaded_model = load_model("Models/First_Run", custom_objects=Custom_Objects)
​
print(loaded_model.evaluate(test_file_path, "survived"))

Вывод

На этом мы завершаем простую проблему AutoML, решаемую с помощью AutoKeras. Обязательно запустите сценарий следующим образом, чтобы сохранить файл журнала:

python main.py > Logs/First_Run.txt

Спасибо, что зашли так далеко 😄

GitHub: https://github.com/ervin007/Autokeras_And_Python