Dah*_*Gan 4 machine-learning keras tensorflow
我正在尝试定义一个pinbal损失函数,以使用Keras(以Tensorflow作为后端)在神经网络中实现``分位数回归''。
定义在这里:弹球损失
很难实现传统的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)
Run Code Online (Sandbox Code Playgroud)
我试图将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"]()]]
Run Code Online (Sandbox Code Playgroud)
我该如何解决?谢谢!
我已经通过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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1685 次 |
| 最近记录: |