使用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
相关产品推荐
相关产品推荐

