mrgloom 242 Жалоба Опубликовано May 18, 2017 Предлагаю в этой теме по графику loss и val_loss делать те или иные предположения. Например почему к концу графика разброс val_loss становится больше? https://habrastorage.org/web/7af/80e/22c/7af80e22c81447099cf43ea80f9b6ace.png Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано May 18, 2017 Т.е. скорее даже вопрос как сделать val_loss более гладким - просто больше batch_size и меньше learning rate? Например вот график, где я использую early stopping и хотя тенденция к уменьшению val_loss есть, но из-за 'крита' (примерно на эпохе 50) обучение останавливается. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 18, 2017 Вообще можно тупо скользящим средним сглаживать. У меня были случаи, что ошибка уменьшалась отскоками, падает, горб, снова падает, но уже ниже, опять горб, и так далее. И тут уже сглаживание не поможет. Причем интервалы между горбами одинаковые, и горбы эти не низенькие, а такие что вполне можно кнопку "стоп" нажать, так и делал, пока не передержал по недосмотру. Уменьшение шага только меняло период. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано May 19, 2017 Я делаю в keras через callback'и Цитата early_stopping_callback = EarlyStopping(monitor='val_loss', patience=epochs_to_wait_for_improve) checkpoint_callback = ModelCheckpoint(model_name+'.h5', monitor='val_loss', verbose=1, save_best_only=True, mode='min') history = model.fit_generator(datagen.flow(X_train, y_train, batch_size=batch_size), steps_per_epoch=len(X_train) / batch_size, validation_data=(X_test, y_test), epochs=n_epochs, callbacks=[early_stopping_callback, checkpoint_callback]) #Plot will be only for n_epochs, where loss will be averaged for steps_per_epoch batches fig = plt.figure() plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('model loss') plt.ylabel('loss') plt.xlabel('epoch') plt.legend(['loss', 'val_loss'], loc='upper left') fig.savefig(model_name+'_graph.png', dpi=fig.dpi) Точки на графике это уже усредненное по батчам, т.е. среднее на эпоху. Попробовал просто увеличить кол-во эпох которые ждать и скорее всего это уже overfit, опять же из-за 'критов'. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано May 23, 2017 Что может означать такой график? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 23, 2017 Наверное точка крутится вокруг минимума, медленно к нему приближаясь. А может датасет не перемешан нормально. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах