为什么即使损失有所改善,我的学习率也会下降?

时间:2020-06-18 10:38:56

标签: python tensorflow keras supervised-learning adam

我正在Google Colab TPU上按以下方法训练Keras模型-

using System;
using MySql.Data.MySqlClient;

namespace feedback_app_backend.Disposables
{
    public class CustomQuestionnaireDB : IDisposable
    {
        MySqlConnection conn = new MySqlConnection("server=localhost;user id=user;password=mypass;database=mydb");
        public MySqlConnection Connection { get; }
        public CustomQuestionnaireDB()
        {
            Connection = new MySqlConnection(conn.ConnectionString);
        }

        public void Dispose() => Connection.Dispose();
    }
}

在培训期间,即使损失随着当前学习率值的增加而改善,我的学习率也会降低0.5倍。您可以在下面的代码段中看到,学习率从0.0020降低到0.0010到0.0005。

adam = Adam(lr=0.002)
model.compile(loss='mse', metrics=[PSNRLoss, SSIMLoss], optimizer=adam)  

checkpoint = ModelCheckpoint("model_{epoch:02d}.hdf5", monitor='loss', verbose=1, save_best_only=True,
                              mode='min')
reduce_lr = ReduceLROnPlateau(monitor='loss', factor=0.5,
                          patience=5, min_lr=0.00002)
csv_logger = CSVLogger('history.log')

callbacks_list = [checkpoint,reduce_lr,csv_logger]

model.fit(traindb, batch_size=1024,
            callbacks=callbacks_list,shuffle=True,epochs=100, verbose=2, validation_data = validdb)

谢谢您的期待:)请指出我要去哪里了?我是否应该监视其他合适的值。

1 个答案:

答案 0 :(得分:1)

CPropertySheet对象具有一个名为ReduceLROnPlateau的参数,该参数是用于测量新最优值的阈值。 min_delta的默认值为min_delta。因此,尽管您的日志输出表明损失有所改善,但如果损失小于0.0001,则可以避免这种损失。因此,在min_delta个时期之后,学习率降低了。