tensorflowテクニック--binary_crossentropyとBinaryCrossentropyの違い


tf.keras.lossesの下には2つの非常に似た損失関数がありますbinary_crossentropy(公式サイト転送ゲート)とBinaryCrossentropy(公式サイト転送ゲート).公式サイトの紹介から見ると、ブロガーもこの2つの損失関数の違いを見ていません.今日になってやっと分かりました.あまり言わないで、直接コードをつけます.
#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は各位置の損失値を計算し、最後にマトリクスを返します.この処理はいくつかのシーンで非常に役に立ち、私の別のブログを見ることができます.