Jump to content
Compvision.ru
Sign in to follow this  
mrgloom

Гадаем по loss

Recommended Posts

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

 

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

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

 

Share this post


Link to post
Share on other sites

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

 

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

870e89a58706418e8414684244754848.png

Share this post


Link to post
Share on other sites

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

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

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

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

 

Share this post


Link to post
Share on other sites

Я делаю в 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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×