2017-05-16 7 views
0

テンソルフローで書かれた損失関数は、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()はテンソルを返す必要があり、任意のエラー

+0

my_loss()はテンソルを返す必要があります。タプルではありません。 – gidim

+0

ありがとう、しかし、損失はtf.reduce_mean(編集を参照)によって計算されます - テンソルでなければならない - またはそれらをすべて1つのテンソルに入れる必要がありますか? – Kev1n91

+0

losseとtf.stackを組み合わせることは、そのトリックでした。あなたは正しい方向に私を導いてくれるので、答えとしてこれを与えたいですか? – Kev1n91

答えて

1

あなたの機能をスローしませんでした。タプルではありません。

tf.stack()を使用して、3つのテンソル(loss1,loss2,loss3)を1つのテンソルに積み重ねることができます。

関連する問題