Keras自写CallBacks回调函数

回调函数(CallBacks)是一组在训练的特定阶段被调用的函数集,你可以使用回调函数来观察训练过程中网络内部的状态和统计信息。通过传递回调函数列表到模型的.fit()中,即可在给定的训练阶段调用该函数集中的函数。

我们可以通过继承keras.callbacks.Callback编写自己的回调函数,回调函数通过类成员self.model访问访问,该成员是模型的一个引用
回调函数的参数:
on_epoch_begin: 在每个epoch开始时调用
on_epoch_end: 在每个epoch结束时调用
on_batch_begin: 在每个batch开始时调用
on_batch_end: 在每个batch结束时调用
on_train_begin: 在训练开始时调用
on_train_end: 在训练结束时调用

具体使用:
本次我们要实现的是,在训练的时候,每次迭代完成之后,print 训练名称,训练进度以及当前的损失函数。

from keras.callbacks import Callback

class LossHistory(Callback):
    def __init__(self, epochs, name):
        self.epochs = epochs
        self.name = name

    def on_train_begin(self, logs={}):
        self.losses = []
        print('starttrain')

    def on_epoch_end(self, epoch, logs={}):
        self.losses.append(logs.get('loss'))
        #这个地方要加1
        process = float(epoch+1)/float(self.epochs) *100
        print( self.name + "的训练进度为" + str(process)  + "loss:" + str(logs.get('loss')))

    def on_train_end(self, logs={}):
        print("endtrain")
        print(self.losses[len(self.losses)-1])

然后在模型的fit中,指定callbacks使用该类即可

def trainModel(trainX,trainY,config,modelname):
    '''
    trainX,trainY: 训练LSTM模型所需要的数据
    config:  配置文件
    modelname: 训练模型名称 更新实时进度用
    '''
    model = Sequential()
    model.add(LSTM(
        80,
        input_shape=(trainX.shape[1], trainX.shape[2]),
        return_sequences=True))
    model.add(Dropout(config.dropout))

    model.add(LSTM(
        80,
        return_sequences=False))
    model.add(Dropout(config.dropout))

    model.add(Dense(
        trainY.shape[1]))
    model.add(Activation("relu"))

    model.compile(loss='mse', optimizer='adam')
    history = LossHistory(50 , modelname)
    
    model.fit(trainX, trainY, epochs=50, batch_size=64 ,verbose = 2,callbacks=[history])
    return model

显示结果
在这里插入图片描述
在这里插入图片描述

参考: 回调函数Callbacks - Keras中文文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值