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

如何解决TensorFlow中两个BinaryCrossentropy损失相加报类型错误的问题

报错原因

你当前的代码仅实例化了BinaryCrossentropy损失类的对象,没有实际执行损失计算得到数值张量,两个类对象不支持加法运算,因此触发类型错误。
TensorFlow的损失类使用逻辑分为两步:

  • 第一步:实例化损失类对象,传入reduction、from_logits等全局配置参数
  • 第二步:调用已实例化的损失对象,传入真实标签和预测值,得到可参与运算的张量格式损失值
正确实现方案

方案1:复用损失类实例(推荐,适合同一配置的损失多次调用的场景)

# 实例化损失函数对象,配置可全局复用
bce_loss = tf.losses.BinaryCrossentropy()
# 调用对象计算得到损失张量
real_loss = bce_loss(tf.ones_like(train_images[0]), train_images[0])
fake_loss = bce_loss(tf.zeros_like(train_images[0]), train_images[0])
# 张量支持直接算术运算
total_loss = real_loss + fake_loss

如果需要保留每个样本的独立损失值,不需要全局平均,实例化时添加参数reduction='none'即可。

方案2:直接使用函数式接口

也可以直接调用TensorFlow提供的损失函数接口,省略实例化步骤:

real_loss = tf.losses.binary_crossentropy(tf.ones_like(train_images[0]), train_images[0])
fake_loss = tf.losses.binary_crossentropy(tf.zeros_like(train_images[0]), train_images[0])
total_loss = real_loss + fake_loss

内容的提问来源于stack exchange,提问作者Ali N777

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:15:01