在搭建完网络以后,就需要配置模型训练的函数,比如损失函数、误差方向传播优化算法等。Tensorflow 2.* 中compile编译函数便集成了此项功能,比如对于一个分类问题,常见的形式如下:
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
文章目录
tf.keras.Model.compile()
optimizer 优化器
基于训练数据和损失函数来更新网络的机制,常用的有Adam, RMSprop、SGD等
loss 损失函数
网络衡量在训练数据上的性能,即网络如何朝着正确的方向前进。
BinaryCrossentropy, CategoricalCrossentropy,KLDivergence等
metrics 监控指标
训练和测试过程中需要监控的指标。常用的有AUC、Accuracy、BinaryAccuracy、BinaryCrossentropy, CategoricalCrossentropy, KLDivergence、Precision等等
loss和metrics关系
- loss和metrics都是用来评价训练过程中模型的预测性能;
- optimizer是根据loss值进行反向误差方向传播,计算更新网络权值;
- metrics不参与网络的训练过程,只作为一个监控指标,方便直观显示模型的预测,选择范围相比loss更多;
比如在分类问题中,交叉熵是模型训练的loss,但是我们难以直观通过交叉熵的数值进行判断,需要一个更为直观的质保,因此选择精度作为metrics
loss_weights
对于一个多输出的网络模型,如果需要定义每个输出对应的loss函数在训练过程中所占的比例就需要设置loss_weights。例如,对于如下的一个三输出的网络模型,每类输出对应不同的损失函数,就会导致严重的损伤函数间的不平衡,即在网络训练过程中网络会倾向于损失函数值最大的输出,而对其他两路输出的优化效果表现不足。因此需要每个损失值对最终损失的贡献分配不同大小的重要性(权值)
age_prediction = layers.Dense(1, name='age'

本文介绍了Tensorflow 2.*中用于网络训练配置的关键函数tf.keras.Model.compile(),包括optimizer(优化器)、loss(损失函数)、metrics(监控指标)和loss_weights(损失权重)。optimizer常选Adam、RMSprop、SGD等,loss涉及BinaryCrossentropy、CategoricalCrossentropy等,metrics涵盖AUC、Accuracy等。loss_weights在多输出模型中用于平衡不同输出的损失贡献,可以使用字典或列表方式分配权重。
最低0.47元/天 解锁文章
6万+





