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

使用tf.keras自定义损失函数遇类型不匹配错误,求技术支持

问题解决

错误原因

你遇到的TypeError核心是标签数据(y_true)为int64类型,模型输出(y_pred)为float32类型,两者类型不匹配;同时自定义损失函数中使用了numpy的操作(np.abs、np.mean),这在Keras/TensorFlow的计算图模式下会引发运行问题。

修改后的代码

import tensorflow as tf

def custom_loss(y_true, y_pred):
    # 将y_true转换为与y_pred一致的float32类型
    y_true = tf.cast(y_true, tf.float32)
    d = y_pred - y_true
    d = tf.abs(d)
    mean_ = tf.reduce_mean(d)
    return mean_

关键修改点

  • 统一数据类型:用tf.cast把int64的y_true转为float32,和y_pred类型对齐,解决减法操作的类型不匹配问题。
  • 替换张量不兼容操作:Keras损失函数需要处理TensorFlow张量,tf.abs和tf.reduce_mean是计算图兼容的API,避免numpy操作打破计算图导致的错误。

额外建议

如果你的标签数据本身应该是浮点型,可以在加载数据集时直接将y_true转换为float32,这样损失函数中就不需要额外的类型转换步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:05:33