我遇到了一段 tensorflow 2.0 的代码片段,用于计算损失。总损失由两部分组成:1)正则化损失,2)预测损失。我的问题是为什么model.losses正则化损失?model这是一个实例tf.keras.Model。我对 tensorflow 官方 API 文档有点困惑。tf.keras.Model,它说
与此层相关的损失。
访问此属性时会创建变量正则化张量,因此它非常安全:在 a 下访问损失
tf.GradientTape会将梯度传播回相应的变量。
为什么我们可以通过访问losses属性来获得正则化损失?另外,什么是渴望安全?如果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