You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow v2多输出模型自定义训练中compiled_loss正则化损失参数使用疑问

关于compiled_loss与正则化损失的疑问解答

嘿,很高兴看到你已经根据建议调整了模型结构,关于你问的compiled_loss是否需要手动传入regularization_losses参数的问题,答案很明确:你完全不需要手动设置这个参数,compiled_loss会自动计算并包含模型中所有层的正则化损失。

具体原因如下:

  • 当你在模型的各个可训练层(比如conv1、action_fc等)上设置kernel_regularizer=tf.keras.regularizers.L2(...)时,这些正则化规则会和层绑定。在训练模式下(也就是你代码里的self.model(x, training=True)),每个层会自动计算对应的正则化损失,并将其添加到模型的losses属性中。
  • model.compiled_loss方法的默认行为就是:先计算你在model.compile()中定义的主损失(你的动作损失和MSE损失),然后自动收集模型losses属性里的所有正则化损失,将两者相加得到最终的总损失,用于后续的梯度计算。

结合你的代码验证

你可以在自定义train方法里加一行代码,验证正则化损失是否被自动收集:

@tf.function
def train(self, x, y):
    with tf.GradientTape() as tape:
        predictions = self.model(x, training=True) # Forward pass
        # 打印模型当前的正则化损失列表
        print("正则化损失项:", self.model.losses)
        loss = self.model.compiled_loss(y, predictions)
    gradients = tape.gradient(loss, self.model.trainable_variables)
    self.model.optimizer.apply_gradients( zip(gradients, self.model.trainable_variables))
    result = {"loss": loss}
    return result

运行训练时,你会看到self.model.losses里包含了所有层的L2正则化损失值,而compiled_loss返回的loss已经是主损失加上这些正则化损失的总和。

额外提示

如果你手动给compiled_loss传入regularization_losses参数,反而会覆盖它自动收集的行为,所以完全没必要这么做。你的当前代码流程是正确的,正则化损失已经被纳入训练的损失计算中了。


内容的提问来源于stack exchange,提问作者Mr.Wang from Next Door

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:54:09