本章总览

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

 

模型验证:model.evaluate()这个函数封装的比较low,建议大家自己写,虽然我现在先不会,但是思路是这样的。
模型预测:model.predict()虽然也是封装好的,但是我们一样可以自己写。

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

 

回调函数
回调函数就是keras在模型训练时,需要调用多个函数。调用会根据这些函数进行保存,或者学习力的衰减。
ModelCheckpoint:定期保存模型,第二个epoch没有第一个好,就不保存第二个epoch,直接在第一个基础上进行第三个epoch。
EarlyStopping:当培训不再改善验证指标时,停止培训。
Tensorboard:后期介绍
CSVLogger:将结果(损失和指标)写在csv数字上面。

keras版本模型训练,这里用全连接层的函数模型

1.1构建模型(单输入单输出的模型)
tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

 

提供许多内置的优化器,损失和指标 通常,不必从头开始创建自己的损失,指标或优化函数,因为所需的可能已经是Keras API的一部分:

优化器:

SGD() (有或没有动量)
RMSprop()
Adam()
损失:

MeanSquaredError()
KLDivergence()
CosineSimilarity()
指标:

AUC()
Precision()
Recall()

另外,如果想用上述的默认设置,那么在很多情况下,可以通过字符串标识符指定优化器,损失和指标:

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

 

1.2进行模型训练
通过将数据切成大小为”batch_size“的”批“来训练模型,并针对给定数量的epoch重复遍历整个数据集。

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

自动划分验证集

在前面的例子中,我们使用validation_data参数将Numpy数组的元组传递(x_val, y_val)给模型,以在每个时期结束时评估验证损失和验证指标。

还有一个选择:参数validation_split允许您自动保留部分训练数据以供验证。参数值代表要保留用于验证的数据的一部分,因此应将其设置为大于0且小于1的数字。例如,validation_split=0.2表示“使用20%的数据进行验证”,而validation_split=0.6表示“使用60%的数据用于验证”。

验证的计算方法是在进行任何改组之前,对fit调用接收到的数组进行最后x%的采样。

注意,只能validation_split在使用Numpy数据进行训练时使用。

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 1.3模型测试

使用测试函数model.evaluate()进行验证,返回test loss和metrics。
model.predict 用来预测。

 

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

一定要重视官方文档,学习如何使用函数。
案例一讲述的函数使用的过程

案例2、使用样本加权和类别加权
除了输入数据和目标数据外,还可以在使用时将样本权重或类权重传递给模型fit:

从Numpy数据进行训练时:通过sample_weight和class_weight参数。 从数据集训练时:通过使数据集返回一个元组(input_batch, target_batch, sample_weight_batch)。 “样本权重”数组是一个数字数组,用于指定批次中每个样本在计算总损失时应具有的权重。它通常用于不平衡的分类问题中(这种想法是为很少见的班级赋予更多的权重)。当所使用的权重为1和0时,该数组可用作损失函数的掩码(完全丢弃某些样本对总损失的贡献)。

“类别权重”字典是同一概念的一个更具体的实例:它将类别索引映射到应该用于属于该类别的样本的样本权重。例如,如果在数据中类“ 0”的表示量比类“ 1”的表示量少两倍,则可以使用class_weight={0: 1., 1: 0.5}。

这是一个Numpy示例,其中我们使用类权重或样本权重来更加重视第5类的正确分类。

构建模型

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

模型训练

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

样本加权

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

类别加权和样本加权在实际训练中是非常重要的一部分内容。

使用回调函数

 

Keras中的回调是在训练期间(在某个时期开始时,在批处理结束时,在某个时期结束时等)在不同时间点调用的对象,这些对象可用于实现以下行为:

在训练过程中的不同时间点进行验证(除了内置的按时间段验证)

定期或在超过特定精度阈值时对模型进行检查

当训练似乎停滞不前时,更改模型的学习率

当训练似乎停滞不前时,对顶层进行微调

在训练结束或超出特定性能阈值时发送电子邮件或即时消息通知 等等。 回调可以作为列表传递给model.fit:

早停函数EarlyStopping
monitor: 被监测的数据。
min_delta: 在被监测的数据中被认为是提升的最小变化, 例如,小于 min_delta 的绝对变化会被认为没有提升。
patience: 没有进步的训练轮数,在这之后训练就会被停止。
verbose: 详细信息模式。
mode: {auto, min, max} 其中之一。 在 min 模式中, 当被监测的数据停止下降,训练就会停止;在 max 模式中,当被监测的数据停止上升,训练就会停止;在 auto 模式中,方向会自动从被监测的数据的名字中判断出来。

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

许多内置的回调可用
ModelCheckpoint:定期保存模型。
EarlyStopping:当培训不再改善验证指标时,停止培训。
TensorBoard:定期编写可在TensorBoard中可视化的模型日志(更多详细信息,请参见“可视化”部分)。
CSVLogger:将损失和指标数据流式传输到CSV文件。 等等

checkpoint模型
在相对较大的数据集上训练模型时,至关重要的是要定期保存模型的checkpoint。

最简单的方法是使用ModelCheckpoint回调:
一定要学会使用help()这个函数,他比直接去tensorflow官网查函数还好使。

 

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

使用回调实现动态学习率调整(非常重要)
由于优化程序无法访问验证指标,因此无法使用这些计划对象来实现动态学习率计划(例如,当验证损失不再改善时降低学习率)。

但是,回调确实可以访问所有指标,包括验证指标!因此,可以通过使用回调来修改优化程序上的当前学习率,从而实现此模式。实际上,它是作为ReduceLROnPlateau回调内置的。

ReduceLROnPlateau参数

monitor: 被监测的指标。
factor: 学习速率被降低的因数。新的学习速率 = 学习速率 * 因数
patience: 没有进步的训练轮数,在这之后训练速率会被降低。
verbose: 整数。0:安静,1:更新信息。
mode: {auto, min, max} 其中之一。如果是 min 模式,学习速率会被降低如果被监测的数据已经停止下降; 在 max 模式,学习塑料会被降低如果被监测的数据已经停止上升; 在 auto 模式,方向会被从被监测的数据中自动推断出来。
min_delta: 衡量新的最佳阈值,仅关注重大变化。
cooldown: 在学习速率被降低之后,重新恢复正常操作之前等待的训练轮数量。
min_lr: 学习速率的下边界。

 

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

4.0案例四,将数据传递到多输入多输出模型
第一个模型给出了单输入输出的案例,是一个具有单个输入(shape的张量(32,))和单个输出(shape的预测张量(10,))的模型。
以下模型具有形状的图像输入(32, 32, 3)(即(height, width, channels))和形状的时间序列输入(None, 10)(即(timesteps, features))。我们的模型将具有根据这些输入的组合计算出的两个输出:“得分”(形状(1,))和五类(形状(5,))的概率分布。

 

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

可以绘制这个模型,以便可以清楚地看到我们在这里做什么(请注意,图中显示的形状是批处理形状,而不是按样本的形状)

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

4.1损失函数
在编译时,通过将损失函数作为列表传递,我们可以为不同的输出指定不同的损失。

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

如果我们仅将单个损失函数传递给模型,则将相同的损失函数应用于每个输出,这在此处不合适。
4.2指标函数

 

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

由于我们为输出层命名,因为我们还可以通过dict指定每个输出的损失和指标:

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

如果有两个以上的输出,建议使用显式名称和字典。

可以使用以下参数对不同的特定于输出的损失赋予不同的权重(例如,在我们的示例中,我们可能希望通过将某类损失函数赋予更高的权重)loss_weight:

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

还可以选择不为某些输出计算损失,如果这些输出仅用于预测而不是训练:

 

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

4.3完整运行

 

tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 tensorflow2.0学习记录-模型训练(keras版本模型训练)-各种回调函数的介绍

 

 

————————————————
版权声明:本文为CSDN博主「batmanchen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/batmanchen/article/details/106503627