最小的例子是
import numpy as np
import tensorflow as tf
from tensorflow import keras
from keras.losses import huber
# create dataset
x = np.random.rand(10, 1)
y = 2 * x + np.random.randn(10, 1) * 0.1
# define model
model = keras.Sequential([
keras.layers.Dense(1, input_shape=[1])
])
# compile model
# model.compile(loss=huber, optimizer='adam') # works
# model.compile(loss='huber', optimizer='adam') # works
model.compile(loss=huber(delta=0.1), optimizer='adam')
# training
model.fit(x, y, epochs=5)
当我在 model.compile() 中使用 huber loss 时,这两种方法都有效。
from keras.losses import huber
model.compile(loss="huber", optimizer=optimizer='adam')
or
model.compile(loss=huber, optimizer=optimizer='adam')
但是如果我想添加delta,就会出现TypeError。 添加 delta 的正确方法是什么? 谢谢您的提前。
---> 18 model.compile(loss=huber(delta=delta), optimizer='adam')
File ~/anaconda3/envs/py38/lib/python3.8/site-packages/tensorflow/python/util/traceback_utils.py:153, in filter_traceback.<locals>.error_handler(*args, **kwargs)
151 except Exception as e:
...
-> 1170 result = api_dispatcher.Dispatch(args, kwargs)
1171 if result is not NotImplemented:
1172 return result
TypeError: Missing required positional argument
您需要构建一个设置了
delta
的部分函数。做这件事有很多种方法。其中之一如下:
model.compile(loss=lambda x, y: huber(x, y, delta=delta), optimizer='adam')
或者只使用大写 H
Huber
:
model.compile(loss=lambda x, y: tf.keras.losses.Huber(delta=delta), optimizer='adam')