テンソルフローで書かれた損失関数は、y_in
の3つの値とy_pred
の3つの値を取得しています。 tensorflow損失のためTensorflowからKerasに書き込まれたポーティング損失関数がAttributeErrorとなる
擬似コード:
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モデルでは、この損失を使いたい、私は単純に、このようにそれをしようとするだろう:
con_resがある...
out = Dense(3,activation='linear')(con_res)
model = Model(inputs=[In1,In2],output = out)
model.compile(optimizer='rmsprop',loss=my_loss)
前のネットワークからの結果。 Dense-Layerの助けを借りれば、それは3つの出力に減らされます。
次のエラーが発生し
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'
示すトレースバックは、.compile
関数の後に起こります。
私はcrossentropy損失でそれを試してみましたが、それがmy_loss()
はテンソルを返す必要があり、任意のエラー
my_loss()はテンソルを返す必要があります。タプルではありません。 – gidim
ありがとう、しかし、損失はtf.reduce_mean(編集を参照)によって計算されます - テンソルでなければならない - またはそれらをすべて1つのテンソルに入れる必要がありますか? – Kev1n91
losseとtf.stackを組み合わせることは、そのトリックでした。あなたは正しい方向に私を導いてくれるので、答えとしてこれを与えたいですか? – Kev1n91