tensorflowテクニック--binary_crossentropyとBinaryCrossentropyの違い
5358 ワード
tf.keras.lossesの下には2つの非常に似た損失関数がありますbinary_crossentropy(公式サイト転送ゲート)とBinaryCrossentropy(公式サイト転送ゲート).公式サイトの紹介から見ると、ブロガーもこの2つの損失関数の違いを見ていません.今日になってやっと分かりました.あまり言わないで、直接コードをつけます.
このように損失関数を宣言するのは問題ありません.
新聞が間違っていて、入参が欠けています.だからbinary_crossentropy()は、所与の入力y_を計算するために使用されるtrueとy_predのloss、BinaryCrossentropy()はクラスを宣言し、eager executionを使用してy_を計算できます.trueとy_predのloss.
また、両方が返す次元も異なります.
したがって、BinaryCrossentropy()は最終結果を返し、binary_crossentropyは各位置の損失値を計算し、最後にマトリクスを返します.この処理はいくつかのシーンで非常に役に立ち、私の別のブログを見ることができます.
#set loss func
loss=tf.losses.BinaryCrossentropy()
このように損失関数を宣言するのは問題ありません.
loss=tf.losses.binary_crossentropy()
TypeError: binary_crossentropy() missing 2 required positional arguments: 'y_true' and 'y_pred'
新聞が間違っていて、入参が欠けています.だからbinary_crossentropy()は、所与の入力y_を計算するために使用されるtrueとy_predのloss、BinaryCrossentropy()はクラスを宣言し、eager executionを使用してy_を計算できます.trueとy_predのloss.
また、両方が返す次元も異なります.
import tensorflow as tf
label=tf.constant([[1,1],[0,0]],dtype=tf.int32)
pred=tf.constant([[0.7,0.6],[0.3,0.2]],dtype=tf.float32)
loss=tf.losses.BinaryCrossentropy()
# , 1*1
loss(label,pred)
<tf.Tensor: shape=(), dtype=float32, numpy=0.36182958>
# , batch_size
tf.losses.binary_crossentropy(label,pred)
<tf.Tensor: shape=(2,), dtype=float32, numpy=array([0.4337501, 0.2899091], dtype=float32)>
したがって、BinaryCrossentropy()は最終結果を返し、binary_crossentropyは各位置の損失値を計算し、最後にマトリクスを返します.この処理はいくつかのシーンで非常に役に立ち、私の別のブログを見ることができます.