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

TensorFlow中model.compile设置Huber损失delta参数触发TypeError怎么办?

如何在Keras中为Huber损失设置自定义delta参数?

你遇到的错误是因为直接调用huber(delta=0.1)时,函数会立刻尝试计算损失,但此时缺少训练时才会传入的y_true和y_pred参数,因此触发TypeError。下面是两种正确的设置方式:

方法一:使用Huber损失类(推荐)

keras.losses.huber本质是Huber类的快捷调用,当需要自定义参数时,直接实例化Huber类即可:

import numpy as np
import tensorflow as tf
from tensorflow import keras

# 创建数据集
x = np.random.rand(10, 1)
y = 2 * x + np.random.randn(10, 1) * 0.1

# 定义模型
model = keras.Sequential([
    keras.layers.Dense(1, input_shape=[1])
])

# 编译模型(使用Huber类实例化并设置delta)
model.compile(loss=keras.losses.Huber(delta=0.1), optimizer='adam')

# 训练模型
model.fit(x, y, epochs=5)

方法二:用Lambda函数包装损失函数

如果你偏好使用函数形式,可以用Lambda函数封装,确保huber函数在训练时能接收到y_true和y_pred参数:

model.compile(loss=lambda y_true, y_pred: keras.losses.huber(y_true, y_pred, delta=0.1), optimizer='adam')

补充说明

  • loss="huber":Keras会自动实例化一个使用默认参数(delta=1.0)的Huber损失对象。
  • loss=huber:直接传递损失函数本身,Keras会在训练时自动传入y_true和y_pred参数。
  • 而huber(delta=0.1)是直接执行了损失计算,但此时没有传入必须的y_true和y_pred,因此报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:48:10