Настройка гиперпараметров — это процесс выбора наилучшего набора гиперпараметров для модели машинного обучения для оптимизации ее производительности. Гиперпараметры — это значения, которые нельзя узнать из данных, но которые устанавливаются пользователем перед обучением модели. Примеры гиперпараметров включают скорость обучения, размер пакета, количество скрытых слоев и количество нейронов в каждом скрытом слое.
Оптимизация гиперпараметров важна, поскольку она может значительно повысить производительность модели машинного обучения. Однако это может быть трудоемким и вычислительно затратным процессом.
В этом руководстве мы будем использовать 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. Настраивая гиперпараметры, мы можем значительно повысить производительность модели машинного обучения. Я надеюсь, что вы нашли это руководство полезным для понимания того, как оптимизировать производительность модели с помощью настройки гиперпараметров.