15.Keras回调函数(Callbacks)应用

Keras中回调函数应用点击回调函数使用
相关代码点这里

先导入callbacks

#导入callbacks模块
import keras.callbacks as callb

1.EarlyStopping

(1)作用:当被监测的数量不再提升,则停止训练。

(2)相关参数:
在这里插入图片描述
(3)用法:

#EarlyStopping
earlystop = callb.EarlyStopping(min_delta=0.0005,patience=2,verbose=1)

表示每训练 p a t i e n c e = 2 patience=2 patience=2轮就观察检测数据的变化,若监测数据变化绝对值小于 m i n d e l t a = 0.0005 min_delta=0.0005 mindelta=0.0005,则停止训练
在这里插入图片描述


2.ReduceLROnPlateau

(1)作用:当标准评估停止提升时,降低学习速率。
当学习停止时,模型总是会受益于降低 2-10 倍的学习速率。 这个回调函数监测一个数据并且当这个数据在一定「有耐心」的训练轮之后还没有进步, 那么学习速率就会被降低。

(2)相关参数:
在这里插入图片描述
(3)用法:

#ReduceLROnPlateau
reduceLR = callb.ReduceLROnPlateau(min_delta=0.001,patience=2,verbose=1)

表示每训练 p a t i e n c e = 2 patience=2 patience=2轮就观察检测数据的变化,若监测数据变化绝对值小于 m i n d e l t a = 0.001 min_delta=0.001 mindelta=0.001,则降低学习率。里面的值是为了方便观察瞎给的,最好还是按照官方的来
在这里插入图片描述


3.LambdaCallback

代码

(1)作用:在训练进行中创建简单,自定义的回调函数。
(2)相关参数:
在这里插入图片描述
(3)用法:

#定义每轮操作
def epoch_end_operation():
    #测试模型
    loss,acc = model.evaluate(x_test,y_test,verbose=0)
    print('本轮测试后结果:')

    print('loss:',loss,'accuracy:',acc)
    print('######')
    print()
#定义训练结束后的操作    
def train_end_operation():
    print('GAME OVER!')

#自定义回调函数
#每轮结束后的回调函数
epoch_print_callback = callb.LambdaCallback(
    #定义在每轮结束是操作
    on_epoch_end =lambda epoch,
    #执行操作
    logs: epoch_end_operation()
)
#训练结束后的回调函数
train_end_callback = callb.LambdaCallback(
    on_train_end=lambda 
    logs: train_end_operation()
)

#需要执行的回调函数列表
callback_list = [epoch_print_callback,train_end_callback]

#训练模型
model.fit(x_train,y_train,validation_split=0.3,batch_size=60,epochs=3,callbacks=callback_list,verbose=1)

在这里插入图片描述
(4)注意:一个有逗号,一个没有!
在这里插入图片描述

4.自定义回调函数

(1)作用:
在这里插入图片描述
(2)用法:

#定义每轮结束操作
def epoch_end_operation(epoch):
    #测试模型
    loss,acc = model.evaluate(x_test,y_test,verbose=0)
    print('第%s轮测试后结果:' % epoch)

    print('loss:%.4f' % loss)
    print('############')
    print()
#定义训练结束操作    
def train_end_operation():
    print('GAME OVER!')

#自定义回调函数
class CaculateLoss(callb.Callback):
    def on_epoch_end(self, epoch, logs={}):
        epoch_end_operation(epoch)
        
class TrainEnd(callb.Callback):
    def on_train_end(self,logs={}):
        train_end_operation()
            
caculate_loss = CaculateLoss()
train_end = TrainEnd()

#需要执行的回调函数列表
callback_list = [earlystop,reduceLR,caculate_loss,train_end]

#训练模型
model.fit(x_train,y_train,validation_split=0.3,batch_size=60,epochs=20,callbacks=callback_list,verbose=0)

5.for循环的应用

除了用回调函数来指定训练过程中的操作,我们还可以用for循环来执行。
比如以下代码:

model.fit(x_train,y_trainbatch_size=60,epochs=200,verbose=0)

我们可以改成:

for i in range(10):
	model.fit(x_train,y_trainbatch_size=60,epochs=20,verbose=0)
	loss,acc = model.evaluate(x_test,y_test,verbose=0)
    print('第%s轮测试后结果:' % epoch*(i+1))
    print('############')

这样就可以每20轮打印下测试结果。
因此我们可以通过for来控制固定轮数后的各种操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值