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

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

В этом руководстве мы будем использовать Python, чтобы продемонстрировать, как выполнять настройку гиперпараметров с помощью библиотеки Keras.

Настройка гиперпараметров в Python с помощью Keras

Импорт библиотек

Мы начнем с импорта необходимых библиотек, включая Keras для построения модели и scikit-learn для настройки гиперпараметров.

import numpy as np
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.utils import to_categorical
from keras.optimizers import Adam
from sklearn.model_selection import RandomizedSearchCV

Загрузить данные

Далее мы загрузим набор данных MNIST для обучения и тестирования модели.

# Load data
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# Normalize data
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
# Flatten data
x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))
x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))
# One-hot encode labels
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

В этом примере мы загружаем набор данных MNIST, нормализуем и выравниваем данные. Мы также выполняем горячее кодирование меток.

Построить модель

Далее мы будем строить модель.

# Define model
def build_model(learning_rate=0.01, dropout_rate=0.0, neurons=64):

model = Sequential()
    model.add(Dense(neurons, activation='relu', input_shape=(784,)))
    model.add(Dropout(dropout_rate))
    model.add(Dense(neurons, activation='relu'))
    model.add(Dropout(dropout_rate))
    model.add(Dense(10, activation='softmax'))
    optimizer = Adam(lr=learning_rate)
    model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
    return model

В этом примере мы определяем модель с тремя слоями, включая два скрытых слоя с заданным пользователем количеством нейронов и выпадающий слой для регуляризации.

Выполните настройку гиперпараметров

Далее мы выполним настройку гиперпараметров, используя функцию scikit-learn RandomizedSearchCV.

# Define hyperparameters
params = {
    'learning_rate': [0.01, 0.001, 0.0001],
    'dropout_rate': [0.0, 0.1, 0.2],
    'neurons': [32, 64, 128],
    'batch_size': [32, 64, 128]
}

# Create model
model = build_model()
# Perform hyperparameter tuning
random_search = RandomizedSearchCV(model, param_distributions=params, cv=3)
random_search.fit(x_train, y_train)
# Print best hyperparameters
print(random_search.best_params_)

В этом примере мы определяем словарь гиперпараметров и их значения для настройки. Затем мы создаем модель и выполняем настройку гиперпараметров, используя RandomizedSearchCV с 3-кратной перекрестной проверкой. Наконец, мы печатаем лучшие гиперпараметры, найденные в процессе настройки.

Оценить модель

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

# Build final model with best hyperparameters
best_learning_rate = random_search.best_params_['learning_rate']
best_dropout_rate = random_search.best_params_['dropout_rate']
best_neurons = random_search.best_params_['neurons']
model = build_model(learning_rate=best_learning_rate, dropout_rate=best_dropout_rate, neurons=best_neurons)

# Train model
model.fit(x_train, y_train, batch_size=128, epochs=10, validation_data=(x_test, y_test))
# Evaluate model on testing data
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

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

В этом руководстве мы рассмотрели основы настройки гиперпараметров и способы ее выполнения с помощью Python с Keras и scikit-learn. Настраивая гиперпараметры, мы можем значительно повысить производительность модели машинного обучения. Я надеюсь, что вы нашли это руководство полезным для понимания того, как оптимизировать производительность модели с помощью настройки гиперпараметров.