Keras (백엔드로 Tensorflow 사용)를 사용하여 신경 네트워크에서 'quantile regression'을 구현하기위한 핀거 손실 함수를 정의하려고합니다. pinball losstensorflow 백엔드가있는 케라에서 핀볼 손실 함수 정의
그것은 그들이 y_pred, y_true의 전체 일괄 처리하기 때문에 전통 등 K.means() 함수를 구현하기 어렵다, 그러나 나는 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"]()]]
어떻게 해결할 수 있습니까? 감사!
하면이 라인'y_pin = tf.placeholder (tf.float32, [없음, 1])'도 전체 세션 기반의 블록을 제거합니다. – lejlot
감사! 나는 이것을 알아 냈다. –