Tensorflow 2.* 网络训练(一) compile(optimizer, loss, metrics, loss_weights)

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

在搭建完网络以后,就需要配置模型训练的函数,比如损失函数、误差方向传播优化算法等。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关系

  1. loss和metrics都是用来评价训练过程中模型的预测性能;
  2. optimizer是根据loss值进行反向误差方向传播,计算更新网络权值;
  3. metrics不参与网络的训练过程,只作为一个监控指标,方便直观显示模型的预测,选择范围相比loss更多;
  4. 比如在分类问题中,交叉熵是模型训练的loss,但是我们难以直观通过交叉熵的数值进行判断,需要一个更为直观的质保,因此选择精度作为metrics

loss_weights

对于一个多输出的网络模型,如果需要定义每个输出对应的loss函数在训练过程中所占的比例就需要设置loss_weights。例如,对于如下的一个三输出的网络模型,每类输出对应不同的损失函数,就会导致严重的损伤函数间的不平衡,即在网络训练过程中网络会倾向于损失函数值最大的输出,而对其他两路输出的优化效果表现不足。因此需要每个损失值对最终损失的贡献分配不同大小的重要性(权值)

age_prediction = layers.Dense(1, name='age'
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值