我有一個以張量寫入的損失函數,其中得到y_in
中的3個值和y_pred
中的3個值。在Tensorflow中寫入Keras的移植損失函數導致AttributeError
僞代碼tensorflow損失:
def my_loss(y_in,y_pred):
with tf.name_scope('loss_scope'):
loss1 = tf.reduce_mean(...)
loss2 = tf.reduce_mean(...)
loss3 = tf.reduce_mean(...)
return loss1,loss2,loss3
現在,我想在我的keras模型中使用這個損失,我只想試試這樣:
...
out = Dense(3,activation='linear')(con_res)
model = Model(inputs=[In1,In2],output = out)
model.compile(optimizer='rmsprop',loss=my_loss)
哪裏con_res是結果來自網絡之前。然後在密集層的幫助下,它會減少到3個輸出。發生
以下錯誤:.compile
功能之後發生
File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 910, in compile sample_weight, mask)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 447, in weighted ndim = K.ndim(score_array)
File "/usr/local/lib/python2.7/dist-packages/keras/backend/tensorflow_backend.py", line 479, in ndim dims = x.get_shape()._dims
AttributeError: 'tuple' object has no attribute 'get_shape'
所示出的回溯。
我有crossentropy損失試了一下,並沒有拋出任何錯誤
my_loss()應該返回一個張量。不是元組。 – gidim
謝謝,但是損失是由tf.reduce_mean計算的(參見編輯) - 所以它們應該是張量 - 或者我必須將它們全部放入一張張? – Kev1n91
將losse與tf.stack結合在一起的確有竅門。你想把這個作爲一個答案,因爲你引導我進入正確的方向? – Kev1n91