Перейти к содержимому
Compvision.ru
mrgloom

Гадаем по loss

Recommended Posts

Предлагаю в этой теме по графику loss и val_loss делать те или иные предположения.

 

Например почему к концу графика разброс val_loss становится больше?

https://habrastorage.org/web/7af/80e/22c/7af80e22c81447099cf43ea80f9b6ace.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Т.е. скорее даже вопрос как сделать val_loss более гладким - просто больше batch_size и меньше learning rate?

 

Например вот график, где я использую early stopping и хотя тенденция к уменьшению val_loss есть, но из-за 'крита' (примерно на эпохе 50) обучение останавливается.

870e89a58706418e8414684244754848.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообще можно тупо скользящим средним сглаживать.

У меня были случаи, что ошибка уменьшалась отскоками, падает, горб, снова падает, но уже ниже, опять горб, и так далее.

И тут уже сглаживание не поможет.  

Причем интервалы между горбами одинаковые, и горбы эти не низенькие, а такие что вполне можно кнопку "стоп" нажать, так и делал, пока не передержал по недосмотру. Уменьшение шага только меняло период.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я делаю в 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, опять же из-за 'критов'.

 

c1a618d6ff9b4c0d86de22930f02c979.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Наверное точка крутится вокруг минимума, медленно к нему приближаясь. А может датасет не перемешан нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×