我正在尝试定义一个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 …Run Code Online (Sandbox Code Playgroud)