zih*_*hao 7 python keras tensorflow eager-execution tensorflow2.0
我遇到了tensorflow 2.0的一段代码,用于计算损失。总损失由两部分组成:1)正则化损失,2)预测损失。我的问题是为什么model.losses正则化损失?model这是 的一个实例tf.keras.Model。我对 tensorflow 官方 API 文档有点困惑。tf.keras.Model,它说
与此层相关的损失。
访问此属性时会创建变量正则化张量,因此它非常安全:访问 a 下的损失
tf.GradientTape会将梯度传播回相应的变量。
为什么我们可以通过访问losses财产获得正则化损失?另外,什么是eager safe?如果losses属性返回正则化损失,为什么它被命名losses而不是regularization_loss?
with tf.GradientTape() as tape:
outputs = model(images, training=True)
regularization_loss = tf.reduce_sum(model.losses)
pred_loss = ...
total_loss = pred_loss + regularization_loss
Run Code Online (Sandbox Code Playgroud)
我们在访问losses属性时会遇到正则化损失,因为这些损失是在模型定义期间创建的。由于该模型是 Keras 模型,因此您已使用 Keras 层构建了它。每个 Keras 层(Dense、Conv3D 等)都可以进行正则化,这是层本身的属性。
该模型是层的有序集合,包含属性内的所有层损失losses。
Eager safe 意味着您可以losses在 eager 训练期间使用模型的属性,确保梯度仅传播到正确的层。例如,如果仅在模型的第二层添加 l2 正则化,则第二层的变量仅受该损失项的影响(和更新)。
losses之所以命名为 ,是regularization_losses因为不仅限于正则化损失;当您编译模型时,非正则化损失会添加到该属性中
| 归档时间: |
|
| 查看次数: |
2919 次 |
| 最近记录: |