Keras Tuner – Automatic Hyperparameter Optimization for Neural Networks | Neural Networks in Python

Posted by


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. Надеюсь, что данное руководство было полезным и поможет вам в вашей работе с нейронными сетями.

0 0 votes
Article Rating
34 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@AndreySozykin
1 month ago

Обновил ноутбук в Colab для TensorFflow 2.x и установку keras tuner из пакета, а не исходников. Работающий ноутбук – https://colab.research.google.com/drive/1m_8puwuGg9C7LWChv4YvZEmAlocGC7nG .
В KerasTuner немного изменился API, поэтому код в ноутбуке отличается от кода в видео.

@KisaMissa_4
1 month ago

Золото! Спасибо огромное за лекцию!

@VadosRussia
1 month ago

Можешь создать конетн для казино на нейросети анализ коэффициентов игры краш любой

@ДмитроВолодимировичПрочухан
1 month ago

Добрий день ! Скажите, пожалуйста, когда получаются такие гиперпаметры послк работы 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

@texadmin4749
1 month ago

Агонь

@PavelShvetsov
1 month ago

за один вечер на 1.75 скорости узнал больше, чем если бы читал серию статей. очень круто. спасибо.

@mariagorovik7447
1 month ago

Спасибо большое за лекцию! Аналогов в интернете не нашла)

Подскажите пожалуйста как посмотреть гиперпараметры полученных моделей (функцию активации, оптимизатор)

@maksimsakharov9250
1 month ago

Коротко и ясно. Спасибо

@СергейТаболин-у2м
1 month ago

У меня 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 ! Как так? И это ещё не все "недоразумения". Как написать разработчикам?

@ceslavas9770
1 month ago

Лайк однозначно. Андрей, огромное спасибо за ваши труды!!!

@EvgeniyMihaylichenko
1 month ago

Однозначно лайк! Благодарю. Единственный вопрос. Как сделать вывод таким же красивым как у вас?

@ЮрийЛогунов-ь8б
1 month ago

Андрей, как сделать тензор данных керас из файла csv?

@paveltarnopovich2574
1 month ago

Добрый день! После прописывания цикла (число скрытых слоев), появляется ошибка, которая ругает за вызов метода get_best_models. В чем ошибка, подскажите пожалуйста)

@dmytroberezhnyi717
1 month ago

Здравствуйте! Эта лекция была потрясающяя! Спасибо вам за ваши труды!

@АзатЗакиров-у8и
1 month ago

здравствуйте! а что если мода меняется, и меняется фасон одежды и появляются новые типы… можно ли дообучать модель на таких изменениях? а не обучать снова…

@stephanie5100
1 month ago

Спасибо, что записываете подобные лекции. Я так счастлива от того, что слушаю как писать нейросети и понимаю, что происходит; у нас в университете намного хуже рассказывают.

@iKostanCom
1 month ago

Hi. It is a great video tutorial. However, I think that you could continue further and show some more tuning examples. Thanks.

@ИванПетров-и5э
1 month ago

Здравствуйте, Андрей! Если сделать keras tuner для GRU и LSTM, будут какие-то изменения в коде или всё также? Спасибо!

@ВалентинаДворжак-ф6к
1 month ago

Спасибо большое, очень доступно объясняете. У меня в пространстве 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'

@infomed100
1 month ago

День добрый.
На этапе – "Подбор гиперпараметров" выдает ошибку:

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

Что с этим можно сделать?
Спасибо!