2017-12-15 1 views
1

組み込みケラス損失関数を定数で記号的に掛けることは可能ですか?たとえば、2つの出力の損失の線形結合が必要な場合。ケラス損失関数を定数で掛ける

私は独自の損失関数を書くことができましたが、それはPythonコードであり、記号的なKerasではなくコンパイルされませんか?私は純粋なケラス(またはTF)でそれを行う方法を探しています

+1

はい、絶対に可能です。しかし、あなたが達成したいものに応じて、これについては複数の方法があります。おそらくあなたの質問を詳述できますか?モデルで2つの出力が得られた場合、損失のリストを提供し、必要に応じて加重を提供することができます。 'loss_weights = [1.。、0.2]'。詳細については、https://keras.io/getting-started/functional-api-guide/#multi-input-and-multi-output-modelsを参照してください。 – tiao

+0

ありがとう!私はコンパイル()の議論のリストでそれを見つけることができなかったので、私はそれがそこになかったと仮定しました! – Akababa

+0

あなたは大歓迎です!私は以下の完全な答えとして私のコメントを追加しました。あなたの質問に満足に答えた場合は、受け入れてください:) – tiao

答えて

3

モデルに複数の出力がある場合は、モデルのloss引数にKeras lossesのリストを指定すると、出力ごとに損失関数を割り当てることができますcompile方法。

model.compile(
    optimizer='rmsprop', 
    loss=['binary_crossentropy', 'mean_squared_error'], 
    loss_weights=[1., 0.2] 
) 

これは出力output_aにバイナリクロスエントロピー損失を割り当てることになり、平均はにエラー損失を乗:これは次のようにたとえば、あなたのモデルは、フォーム

model = Model(inputs=[input_a, input_b], outputs=[output_a, output_b]) 

である場合は、それをコンパイルすることができますoutput_b。最小化される損失は、loss_weightsで指定された重みで、これらの損失の加重和になります。

また、出力レイヤーに名前が付いている場合は、出力レイヤー名をキーとしてdictsを指定してlossloss_weightsを指定することもできます。これにより、どの出力にどの損失や重みが割り当てられているのかのあいまいさを取り除くのに役立ちます。

詳細については、https://keras.io/getting-started/functional-api-guide/#multi-input-and-multi-output-modelsを参照してください。

関連する問題