Оценка остается неизменной при настройке гиперпараметров - PullRequest
0 голосов
/ 13 марта 2020

Моя модель -

    model = Sequential()
    model.add(Dense(128, activation='relu', input_dim=n_input_1))
    model.add(Dense(64, activation='relu'))
    #model.add(Dense(32, activation='relu'))
    #model.add(Dense(16, activation='relu'))
    model.add(Dense(1))
    model.compile(optimizer='adam', loss='mse',metrics=['mse'])

Сейчас я занимаюсь настройкой гиперпараметров, но она подходит для всех возможных результатов -

Best: -61101.514139 using {'batch_size': 10, 'epochs': 2}
-61101.514139 (25108.783936) with: {'batch_size': 10, 'epochs': 2}
-61101.514139 (25108.783936) with: {'batch_size': 10, 'epochs': 4}
-61101.514139 (25108.783936) with: {'batch_size': 10, 'epochs': 5}
-61101.514139 (25108.783936) with: {'batch_size': 10, 'epochs': 10}
-61101.514139 (25108.783936) with: {'batch_size': 10, 'epochs': 15}
-61101.514139 (25108.783936) with: {'batch_size': 20, 'epochs': 2}
-61101.514139 (25108.783936) with: {'batch_size': 20, 'epochs': 4}
-61101.514139 (25108.783936) with: {'batch_size': 20, 'epochs': 5}
-61101.514139 (25108.783936) with: {'batch_size': 20, 'epochs': 10}
-61101.514139 (25108.783936) with: {'batch_size': 20, 'epochs': 15}
-61101.514139 (25108.783936) with: {'batch_size': 30, 'epochs': 2}
-61101.514139 (25108.783936) with: {'batch_size': 30, 'epochs': 4}
-61101.514139 (25108.783936) with: {'batch_size': 30, 'epochs': 5}
-61101.514139 (25108.783936) with: {'batch_size': 30, 'epochs': 10}
-61101.514139 (25108.783936) with: {'batch_size': 30, 'epochs': 15}

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

Я делаю прогнозирование временных рядов с использованием MLP. Я использовал 'neg_mean_absolute_error как функцию оценки в gridsearchCV.

edit- это то, что я запускаю-

from sklearn.model_selection import GridSearchCV
# fix random seed for reproducibility
seed = 7
np.random.seed(seed)

# define the grid search parameters
model = KerasClassifier(build_fn=create_model, verbose=1)
batch_size = [10,20,2000]
epochs = [2,4,5,10, 25]
param_grid = dict(batch_size=batch_size, epochs=epochs)
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1, cv=3,scoring='neg_mean_squared_error')
grid_result = grid.fit(scaled_train,scaled_train_y)
# summarize results
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
means = grid_result.cv_results_['mean_test_score']
stds = grid_result.cv_results_['std_test_score']
params = grid_result.cv_results_['params']
for mean, stdev, param in zip(means, stds, params):
    print("%f (%f) with: %r" % (mean, stdev, param))

1 Ответ

1 голос
/ 14 марта 2020

Похоже, вы не указали достаточный диапазон для того, чтобы переменная увидела разницу. Для нейронной сети существует множество гиперпараметров для настройки, поэтому я дам краткое объяснение какой-то переменной и что она может делать.

1) размер пакета , скажем, у нас есть 1 миллион пример для нашей машины, и мы хотим, чтобы наша модель видела все наборы данных, не выбрасывая какой-то пример, поэтому мы увеличиваем размер партии, чтобы мы обновляли наш вес один раз, увидев номер выборки размера партии. Следовательно, увеличить это означает, что мы теряем эффективность данных (см. Много примеров обновления один раз), но получаем разнообразие выборки.

2) эпоха , означает, что когда наша модель обучается со всеми данными, мы считаем как 1 эпоха Поэтому, если мы увеличим размер пакета, мы будем обновлять наш весовой коэффициент пару раз для каждой эпохи.

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

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

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

...