Итак, у меня есть простая проблема регрессии, которую я пытаюсь решить с помощью нейронной сети Keras. Модель довольно проста, но работает относительно хорошо иногда . Пример проблемы: я запускаю код создания и обучения модели в первый раз, и все работает нормально. Затем я перезапускаю все это, и внезапно потери проверки становятся одинаковыми в каждую эпоху и не становятся ниже. (также в подобных случаях обычная потеря слишком велика). Если я запусту ее снова после этого, все будет нормально и снова.
Кажется, проблема возникает только при использовании оптимизатора Adam. С оптимизатором Adadelta я еще не сталкивался с этой проблемой.
Это не постоянная проблема, которая затрудняет отладку.
Я предполагаю, что это либо какая-то случайная инициализация переменной в модели, либо неправильная функция активации вывода.
Я пытался поиграть с настройками в оптимизаторе Адама, такими как скорость обучения, затухание и т. Д. Также я играл с размером партии во время тренировки, но, похоже, ничто не решает эту проблему на 100%.
Вот простой код, который я использую для создания и обучения модели.
model = tf.keras.Sequential([
layers.Dense(80, input_dim=X.shape[1], kernel_initializer='normal', activation='relu'),
layers.Dense(80, kernel_initializer='normal', activation='relu'),
layers.Dense(1, kernel_initializer='normal', activation='relu')
])
opt = optimizers.Adam(lr=0.001)
model.compile(optimizer=opt, loss=['mean_absolute_error'], metrics=[rmse])
history = model.fit(X, y, epochs=50, batch_size=20, validation_data=[X_test, y_test], shuffle=True)
А вот небольшая выборка данных, которые я использую для обучения модели (извините за плохое форматирование):
vendor_id passenger_count pickup_longitude pickup_latitude dropoff_longitude dropoff_latitude distance_haversine distance_dummy_manhattan direction pickup_cluster dropoff_cluster Month DayofMonth Hour dayofweek
2 1 -74.003440 40.743584 -73.98218 40.737580 1.911775 2.458974 110.433360 55 25 1 29 0 4
2 3 -74.002650 40.733400 -73.96405 40.773510 5.519362 7.712331 36.076637 22 5 5 5 14 3
1 1 -73.980380 40.732445 -73.97107 40.754932 2.620580 3.284788 17.408050 88 24 3 8 7 1
Итак, в настоящее время я иногда получаю следующий вывод. Тем не менее, я ожидаю, что результат обучения модели всегда будет примерно таким, а не просто иногда ..
Epoch 1/50
72816/72816 [==============================] - 17s 240us/sample - loss: 274.6910 - rmse: 370.7113 - val_loss: 248.2299 - val_rmse: 351.9400
Epoch 2/50
72816/72816 [==============================] - 17s 227us/sample - loss: 241.0651 - rmse: 334.2888 - val_loss: 235.2585 - val_rmse: 327.8128
Epoch 3/50
72816/72816 [==============================] - 15s 204us/sample - loss: 232.9749 - rmse: 321.4998 - val_loss: 230.2952 - val_rmse: 319.8226
Иногда вывод, который я получаю, выглядит так:
Epoch 1/50
72816/72816 [==============================] - 16s 220us/sample - loss: 759.9131 - rmse: 894.2183 - val_loss: 759.6450 - val_rmse: 895.1505
Epoch 2/50
72816/72816 [==============================] - 15s 206us/sample - loss: 759.9131 - rmse: 894.3421 - val_loss: 759.6450 - val_rmse: 894.2359
Epoch 3/50
72816/72816 [==============================] - 14s 195us/sample - loss: 759.9131 - rmse: 894.6163 - val_loss: 759.6450 - val_rmse: 894.1488
Есть ли какое-то объяснение этому, или я здесь делаю что-то ужасно неправильное? Спасибо.