Keras Tuner (автоматическая оптимизация гиперпараметров) – это библиотека, которая позволяет автоматически оптимизировать гиперпараметры нейронной сети на языке Python с использованием фреймворка Keras. Гиперпараметры являются настройками модели, которые не меняются в процессе обучения и важно подобрать их оптимальные значения для достижения лучшей производительности модели.
В данном руководстве мы рассмотрим, как использовать Keras Tuner для оптимизации гиперпараметров нейронной сети. Прежде всего, убедитесь, что у вас установлен TensorFlow и Keras. Также установите Keras Tuner с помощью следующей команды:
pip install keras-tuner
Теперь давайте начнем с создания модели нейронной сети, которую мы будем оптимизировать. В качестве примера, давайте создадим простую полносвязную нейронную сеть для классификации изображений с использованием датасета mnist:
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
def build_model(hp):
model = keras.Sequential()
model.add(layers.Flatten(input_shape=(28, 28)))
# Оптимизация гиперпараметров
hp_units = hp.Int('units', min_value=32, max_value=512, step=32)
model.add(layers.Dense(units=hp_units, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
# Оптимизация скорости обучения
hp_learning_rate = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])
model.compile(optimizer=keras.optimizers.Adam(learning_rate=hp_learning_rate),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
return model
В этом примере мы определяем функцию build_model
, которая создает простую нейронную сеть с одним скрытым слоем и оптимизирует два гиперпараметра: количество нейронов в скрытом слое и скорость обучения. Гиперпараметры определяются с помощью объекта hp
, созданного в функции build_model
.
Теперь давайте настроим объект Hyperband
для оптимизации гиперпараметров с помощью Keras Tuner:
from kerastuner.tuners import Hyperband
tuner = Hyperband(
build_model,
objective='accuracy',
max_epochs=10,
directory='my_dir',
project_name='mnist'
)
tuner.search_space_summary()
Здесь мы создаем объект Hyperband
tuner с указанием функции build_model
в качестве аргумента, определяем максимальное количество эпох, директорию для сохранения результатов оптимизации и имя проекта. Метод search_space_summary
выводит в консоль информацию о пространстве поиска.
Теперь запустим оптимизацию гиперпараметров нейронной сети:
tuner.search(x_train, y_train, epochs=10, validation_data=(x_val, y_val))
Здесь мы запускаем поиск гиперпараметров на обучающем наборе данных x_train
с использованием оценочного набора данных x_val
. Метод search
выполняет процесс оптимизации гиперпараметров в течение указанного количества эпох.
После завершения поиска вы можете получить лучшие гиперпараметры и модель с помощью метода get_best_models
:
best_model = tuner.get_best_models(num_models=1)[0]
best_hyperparameters = tuner.get_best_hyperparameters(num_trials=1)[0]
print(best_hyperparameters.values)
Этот код выводит наилучшие гиперпараметры модели и сохраняет лучшую модель в переменной best_model
.
Теперь вы можете использовать полученную модель для классификации изображений или любой другой задачи машинного обучения. Keras Tuner помогает значительно ускорить процесс оптимизации гиперпараметров нейронной сети и повысить качество модели.
В данном руководстве мы рассмотрели основные шаги по использованию Keras Tuner для автоматической оптимизации гиперпараметров нейронной сети на языке Python с использованием фреймворка Keras. Надеюсь, что данное руководство было полезным и поможет вам в вашей работе с нейронными сетями.
Обновил ноутбук в Colab для TensorFflow 2.x и установку keras tuner из пакета, а не исходников. Работающий ноутбук – https://colab.research.google.com/drive/1m_8puwuGg9C7LWChv4YvZEmAlocGC7nG .
В KerasTuner немного изменился API, поэтому код в ноутбуке отличается от кода в видео.
Золото! Спасибо огромное за лекцию!
Можешь создать конетн для казино на нейросети анализ коэффициентов игры краш любой
Добрий день ! Скажите, пожалуйста, когда получаются такие гиперпаметры послк работы Keras Tuner , что такое score , tuner/bracket, tuner/round: ?
start_neurons: 32
net_depth: 5
dropout: False
bn_after_act: True
activation: mish
tuner/epochs: 15
tuner/initial_epoch: 0
tuner/bracket: 0
tuner/round: 0
Score: 0.9533569884300232
Настривал сеть U-NET
Signature:
unet(
input_size=(512, 512, 1),
start_neurons=64,
net_depth=4,
output_classes=1,
dropout=False,
bn_after_act=False,
activation='mish',
pretrained_weights=None,
)
Вот такая ф-ия єто делала
def model_builder(hp):
"""
Build model for hyperparameters tuning
hp: HyperParameters class instance
"""
# defining a set of hyperparametrs for tuning and a range of values for each
start_neurons = hp.Int(name = 'start_neurons', min_value = 16, max_value = 128, step = 16)
net_depth = hp.Int(name = 'net_depth', min_value = 2, max_value = 6)
dropout = hp.Boolean(name = 'dropout', default = False)
bn_after_act = hp.Boolean(name = 'bn_after_act', default = False)
activation = hp.Choice(name = 'activation', values = ['mish', 'elu', 'lrelu'], ordered = False)
input_size = (544,544,3)
target_labels = [str(i) for i in range(21)]
# building a model
model = u(input_size = input_size,
start_neurons = start_neurons,
net_depth = net_depth,
output_classes = len(target_labels),
dropout = dropout,
bn_after_act = bn_after_act,
activation = activation)
# model compilation
model.compile(optimizer = Adam(lr = 1e-3),
loss = weighted_cross_entropy,
metrics = [f1, precision, recall, iou])
return model
Агонь
за один вечер на 1.75 скорости узнал больше, чем если бы читал серию статей. очень круто. спасибо.
Спасибо большое за лекцию! Аналогов в интернете не нашла)
Подскажите пожалуйста как посмотреть гиперпараметры полученных моделей (функцию активации, оптимизатор)
Коротко и ясно. Спасибо
У меня tuner.results_summary выдаёт сущую несуразицу. Пример:
hidden_lr: 3
hd_lr_1: 56
hd_lr_2: 16
hd_lr_3: 31
hd_lr_4: 16
hd_lr_5: 10
hd_lr_6: 6
…
Само же пишет, что скрвтых слоёв 3, и тут же рисует 6 ! Как так? И это ещё не все "недоразумения". Как написать разработчикам?
Лайк однозначно. Андрей, огромное спасибо за ваши труды!!!
Однозначно лайк! Благодарю. Единственный вопрос. Как сделать вывод таким же красивым как у вас?
Андрей, как сделать тензор данных керас из файла csv?
Добрый день! После прописывания цикла (число скрытых слоев), появляется ошибка, которая ругает за вызов метода get_best_models. В чем ошибка, подскажите пожалуйста)
Здравствуйте! Эта лекция была потрясающяя! Спасибо вам за ваши труды!
здравствуйте! а что если мода меняется, и меняется фасон одежды и появляются новые типы… можно ли дообучать модель на таких изменениях? а не обучать снова…
Спасибо, что записываете подобные лекции. Я так счастлива от того, что слушаю как писать нейросети и понимаю, что происходит; у нас в университете намного хуже рассказывают.
Hi. It is a great video tutorial. However, I think that you could continue further and show some more tuning examples. Thanks.
Здравствуйте, Андрей! Если сделать keras tuner для GRU и LSTM, будут какие-то изменения в коде или всё также? Спасибо!
Спасибо большое, очень доступно объясняете. У меня в пространстве 4 гиперпараметров получились такие результаты: |-activation: relu
|-optimizer: adam|-units_hidden: 576|-units_input: 512 accuracy: 0.8894
Единственное выдает ошибку при попытке создания цикла по смене количества промежуточных слоев : for i in range(hp.Range('num_layers', 2,5)): AttributeError: 'HyperParameters' object has no attribute 'Range'
День добрый.
На этапе – "Подбор гиперпараметров" выдает ошибку:
Train on 48000 samples, validate on 12000 samples
Epoch 1/20
256/48000 […………………………] – ETA: 1:07WARNING:tensorflow:Can save best model only with val_accuracy available, skipping.
—————————————————————————
InvalidArgumentError Traceback (most recent call last)
<ipython-input-23-28bf7c3e6880> in <module>()
3 batch_size=256, # Размер мини-выборки
4 epochs=20, # Количество эпох обучения
—-> 5 validation_split=0.2, # Часть данных, которая будет использоваться для проверки
6 )
13 frames
/usr/local/lib/python3.6/dist-packages/six.py in raise_from(value, from_value)
InvalidArgumentError: logits and labels must be broadcastable: logits_size=[256,10] labels_size=[2560,10]
[[node loss/dense_2_loss/softmax_cross_entropy_with_logits (defined at /usr/local/lib/python3.6/dist-packages/kerastuner/engine/multi_execution_tuner.py:96) ]] [Op:__inference_distributed_function_3592]
Function call stack:
distributed_function
Что с этим можно сделать?
Спасибо!