model.compile 损失类型错误:缺少必需的位置参数

问题描述 投票:0回答:1

最小的例子是

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
python python-3.x machine-learning scikit-learn
1个回答
0
投票

您需要构建一个设置了

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')
© www.soinside.com 2019 - 2024. All rights reserved.