gpt4 book ai didi

machine-learning - 使用 tensorflow 后端在 keras 中定义 pinball 损失函数

转载 作者:行者123 更新时间:2023-11-30 08:30:18 40 4
gpt4 key购买 nike

我正在尝试定义一个 pinbal 损失函数,用于使用 Keras(以 Tensorflow 作为后端)在神经网络中实现“分位数回归”。

定义在这里:pinball loss

很难实现传统的 K.means() 等函数,因为它们处理整批 y_pred、y_true,但我必须考虑 y_pred、y_true 的每个组成部分,这是我的原始代码:

def pinball_1(y_true, y_pred):
loss = 0.1
with tf.Session() as sess:
y_true = sess.run(y_true)
y_pred = sess.run(y_pred)
y_pin = np.zeros((len(y_true), 1))
y_pin = tf.placeholder(tf.float32, [None, 1])
for i in range((len(y_true))):
if y_true[i] >= y_pred[i]:
y_pin[i] = loss * (y_true[i] - y_pred[i])
else:
y_pin[i] = (1 - loss) * (y_pred[i] - y_true[i])
pinball = tf.reduce_mean(y_pin, axis=-1)
return K.mean(pinball, axis=-1)

sgd = SGD(lr=0.1, clipvalue=0.5)
model.compile(loss=pinball_1, optimizer=sgd)
model.fit(Train_X, Train_Y, nb_epoch=10, batch_size=20, verbose=2)

我试图将 y_pred, y_true 转移到向量化数据结构,以便我可以用索引引用它们,并处理各个组件,但似乎由于缺乏单独处理 y_pred, y_true 的知识而出现问题。

我试图深入到由错误引导的行,但我几乎迷路了。

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'dense_16_target' with dtype float
[[Node: dense_16_target = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

我该如何解决这个问题?谢谢!

最佳答案

我自己用 Keras 后端解决了这个问题:

def pinball(y_true, y_pred):
global i
tao = (i + 1) / 10
pin = K.mean(K.maximum(y_true - y_pred, 0) * tao +
K.maximum(y_pred - y_true, 0) * (1 - tao))
return pin

关于machine-learning - 使用 tensorflow 后端在 keras 中定义 pinball 损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43151694/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com