EarlyStopping技术

EarlyStopping是这样一种技术,可以使神经网络的训练过程在多次迭代没有明显更新的情况下提前结束,并获得当前训练条件下精度最高(或损失最小)的训练模型。

Keras中已经集成了EarlyStopping函数,本质上是callbacks的一个类,在使用EarlyStopping之前需要导入该函数:

from keras.callbacks import EarlyStopping

EarlyStopping的一般格式如下:

EarlyStops = EarlyStopping(monitor='loss', min_delta=0.001, patience=5, verbose=1, mode='min')

其中,monitor是指可监测的值,主要是‘acc’, ‘val_acc’, ‘loss’, ‘val_loss’。如果希望以精度作为监测指标,需要在model.compile中添加metrics=[‘accuracy’]:

model.compile(loss='mae', optimizer='adam', metrics=['accuracy'])

相应地,EarlyStopping的格式变成:

EarlyStops = EarlyStopping(monitor='acc', min_delta=0.001, patience=5, verbose=1, mode='max')

如果有验证集的话,还可以使用‘val_acc’, ‘val_loss’作为监测指标。
min_delta,最小变化幅度,只有超过这个值才算作改进。这个值可以凭经验设置,一般设置的值越大,可能训练过程就会结束得越早。
patience, 允许在多少epochs中没有改进,也是个经验参数。
mode, ‘auto’, ‘max’, ‘min’中三选一。对于‘loss’肯定是‘min’,对于’acc’肯定是’max’,不确定的情况下选’auto’。

在这里对verbose参数作一下说明,verbose不仅EarlyStopping里有,在model.fit里也会遇到。verbose主要有三个参数,verbose=0 #不在标准输出流输出日志信息,verbose=1 #输出进度条记录,verbose=2 #每个epoch输出一行记录。默认为1。

为了顺利地完成计算,我们需要对model.fit作相应调整。
带验证集的情形:

model.fit(x_train, y_train, validation_data(x_test, y_test), epochs=100, batch_size=50, callbacks=[EarlyStops], verbose=1)

不带验证集的情形:

model.fit(x_train, y_train, epochs=100, batch_size=50, callbacks=[EarlyStops], verbose=1)

需要注意的是,与ModelCheckpoint不同,EarlyStopping 中无法指定保存文件,需要额外添加model.saver进行模型的持久化:

model.save('/home/test/documents/filename.hdf5')
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值