Настройка гиперпараметров - это процесс выбора наилучшего набора гиперпараметров для модели машинного обучения с целью оптимизации ее производительности. Гиперпараметры - это значения, которые не могут быть получены из данных, а задаются пользователем перед обучением модели. Примерами гиперпараметров являются скорость обучения, размер партии, количество скрытых слоев и количество нейронов в каждом скрытом слое.
Оптимизация гиперпараметров очень важна, поскольку она может значительно улучшить производительность модели машинного обучения. Однако это может быть трудоемким и вычислительно затратным процессом.
В этом руководстве мы используем язык 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
В этом примере мы определяем модель с тремя слоями, включая два скрытых слоя с заданным пользователем количеством нейронов и слой отсева для регуляризации.
Далее мы выполним настройку гиперпараметров с помощью функции RandomizedSearchCV от scikit-learn.
# 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. Настраивая гиперпараметры, мы можем значительно улучшить производительность модели машинного обучения. Я надеюсь, что это руководство было полезным для понимания того, как оптимизировать производительность модели с помощью настройки гиперпараметров.
20.08.2023 18:21
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".
20.08.2023 17:46
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
19.08.2023 18:39
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.
19.08.2023 17:22
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!
18.08.2023 20:33
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.
14.08.2023 14:49
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.