keras中文文档_Keras model.fit()参数详解+Keras回调函数+Earlystopping

仅作学习记录~

  1. Keras model.fit()参数详解
示例:
callbacks_list = [EarlyStopping(monitor='val_loss', patience=3)] #用early stopping 来防止过拟合
history = model.fit(train_images, train_labels, 
                    epochs=20, 
                    batch_size=200,
                    validation_data=(test_images, test_labels),
                    shuffle=True,
                    callbacks=callbacks_list)   #回调函数列表

官方文档:Model training APIs

参考:Keras model.fit()参数详解

2.回调函数

在每个training/epoch/batch结束时,如果我们想执行某些任务,例如模型缓存、输出日志、计算当前的acurracy等等,Keras中的callback就派上用场了。

Callbacks(回调函数)是一组用于在模型训练期间指定阶段被调用的函数。可以通过回调函数查看在模型训练过程中的模型内部信息和统计数据。

可以通过传递一个回调函数的list给model.fit()函数,然后相关的回调函数就可以在指定的阶段被调用了。

c45e81c78c104e6e1218b034d84c463e.png

虽然我们称之为回调“函数”,但事实上Keras的回调函数是一个类,回调函数只是习惯性称呼

Available callbacks

  • Base Callback class
  • ModelCheckpoint
  • TensorBoard
  • EarlyStopping
  • LearningRateScheduler
  • ReduceLROnPlateau
  • RemoteMonitor
  • LambdaCallback
  • TerminateOnNaN
  • CSVLogger
  • ProgbarLogger

import keras
 
# 定义callback类
class MyCallback(keras.callbacks.Callback):
    def on_train_begin(self, logs={}):
        self.losses = []
        return

    def on_batch_end(self, batch, logs={}): # batch 为index, logs为当前batch的日志acc, loss...
        self.losses.append(logs.get('loss')) 
        return

# 定义模型model
...
...

# 调用callback
cb = MyCallback()

# 训练模型
model.fit(x_train, y_train, batch_size=32, epochs=10, callbacks=[cb])

# 查看callback内容
cb.losses

如上述例子,我们可以继承keras.callbacks.Callback来定义自己的callback,只需重写如下的6个方法即可

  • on_train_begin
  • on_train_end
  • on_epoch_begin
  • on_epoch_end
  • on_batch_begin
  • on_batch_end

可在这6个方法中定义自己想要的属性,通过self.model可以访问模型本身,self.params可以访问训练参数。


链接:https://www.jianshu.com/p/eb4e76e239df

参考:

官方文档:Keras documentation: Callbacks API

回调函数Callbacks - Keras中文文档

Keras笔记(六):回调函数Callbacks_冷月无声的博客-CSDN博客_keras.callbacks.callback

3.EarlyStopping

为了获得性能良好的神经网络,网络定型过程中需要进行许多关于所用设置(超参数)的决策。超参数之一是定型周期(epoch)的数量:亦即应当完整遍历数据集多少次(一次为一个epoch)?如果epoch数量太少,网络有可能发生欠拟合(即对于定型数据的学习不够充分);如果epoch数量太多,则有可能发生过拟合(即网络对定型数据中的“噪声”而非信号拟合)。

早停法旨在解决epoch数量需要手动设置的问题。它也可以被视为一种能够避免网络发生过拟合的正则化方法(与L1/L2权重衰减和丢弃法类似)。

目的还是解决过拟合!

参考:早停!? earlystopping for keras