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
Спасибо, что зашли так далеко 😄