tensorflow2.x研究ノート8:関数のクロスエントロピーtensorflow(keras)損失

間違った場所、それを指摘してください場合はここに私自身の簡単な要約の一部は、あります。

、BinaryCrossentropyクラスや関数binary_crossentropy

使用してBinaryCrossentropyクラス:

tf.keras.losses.BinaryCrossentropy(
from_logits =偽、label_smoothing = 0、
低下= losses_utils.ReductionV2.AUTO、
NAME = 'binary_crossentropy'

1
2
3
4
5
参数解释。

from_logits:trueの場合、結果は非予測確率分布を示しているが、カテゴリの正確な値は、False出力は、確率分布として表される
還元(例えば、複数のバッチのような)データの複数のセットを計算すると、計算を表すために使用しました:処理を行うにはどのような損失は、属性値のいくつかの値は、主にtf.keras.losses.Reduction、含ま
値役割
AUTO処理モードは、コンテキストに応じて決定された
デフォルト保つために任意の処理をせずにNONEを、
グループごとに得られSUMを合計する損失
平均化グループごとにSUM_OVER_BATCH_SIZE所得損失
データのセットが、その式はどのようにある最初のを見て:

y_true = [1、0、1、0]
y_pred = [1、1、1、0]
BCE = tf.keras.losses.BinaryCrossentropy()
損失= BCE(y_true、y_pred)
印刷( '損失:'、loss.numpy())

#输出:減量:3.833
''」
#EPSILON = 1E-7、Y = y_true、y` = y_pred、Y_MAX = 0.9999999
#y` = clip_ops.clip_by_value(出力、ε、1 - EPSILON)
#y` = [ Y_MAX、Y_MAX、Y_MAX、EPSILON]

メトリック=# - (EPSILON y` +)Yログ(y` EPSILON +)+(1 - - Y)ログ(1)
-log#= -log(Y_MAX + EPSILON)、(。1 - EPSILON Y_MAX +)、
-log#(+ Y_MAX EPSILON)、-log(1)]
#=(0 + 15.33)/ 2、(0 + 0)/ 2]
メトリックが減少= 7.665 / 2 = 3.833
'' '
。1
2
。3
。4
5
。6
。7
8
9
10
11
12である
13である
14
15
16
17
18である
リダクションパラメータの特定の役割を実証するために、我々は2つのデータセットがグループごとに計算され提供計算し、上記の例では同じです。

y_true =(1、0、1、0]、[1、1、1、0])
y_pred =(1、1、1、0]、[1 。、0、1、0])

= tf.keras.losses.BinaryCrossentropy BCE()
損失= BCE(y_true、y_pred)
プリント( '損失:'、loss.numpy())
デフォルト出力:減量:3.8447733
。1
2
。3
。4
。5
。6
。7
、それは見ることができ、デフォルトこの時間は、次の還元ルックに示す例のように、効果を変更する場合の平均値を求めています。

BCE = tf.keras.losses.BinaryCrossentropy(
削減= tf.keras.losses.Reduction.NONE)
loss1 = BCE(y_true、y_pred)
プリント( '損失:'、loss1.numpy())

#输出:減量:[3.8333097 3.8562372]
1
2
3
4
5
6
BCE = tf.keras.losses.BinaryCrossentropy(
縮小= tf.keras.losses.Reduction.SUM)

loss2 = BCE(y_true、y_pred)
プリント( '損失: 」、loss2.numpy())

#求和输出:減量:7.6895466
1
2
3
4
5
6
7
BCE = tf.keras.losses.BinaryCrossentropy(
縮小= tf.keras.losses.Reduction.SUM_OVER_BATCH_SIZE)

loss3 = BCE(y_true、y_pred)
プリント( '損失: 」、loss3.numpy())

#平均化出力:減量:3.8447733
。1
2
3。
4。
5。
6。
7。
使用binary_crossentropy機能:

tf.keras.losses.binary_crossentropy(
y_true、y_pred、from_logits =偽、label_smoothing = 0

1
2
3
y_true = [1、0、1、0]
y_pred = [1、1、1、 0]
損失= tf.keras.losses.binary_crossentropy(
y_true、y_pred)
プリント( '損失:'、loss.numpy())
输出:3.833
1
2
3
4
5
6
二、CategoricalCrossentropy类和categorical_crossentropy函数。

CategoricalCrossentropyクラス

tf.keras.losses.CategoricalCrossentropy(
from_logits =偽、label_smoothing = 0、
低下= losses_utils.ReductionV2.AUTO、
NAME = 'categorical_crossentropy'

1
2
3
4
5
y_true =([0、1、0]、[0,0 、1])
y_pred =(0.05、0.95、0]、[0.1、0.8、0.1])
CCE = tf.keras.losses.CategoricalCrossentropy()
損失= CCE(y_true、y_pred)
プリント( '損失:'、損失.nu​​mpy())

#输出:減量:1.176
''」
#EPSILON = 1E-7、Y = y_true、y` = y_pred
#y` = clip_ops.clip_by_value(出力、ε、1 - EPSILON)
#y` = [0.05、0.95 、EPSILON]、[0.1、0.8、0.1]

-sum xent =#(Y *ログ(Y「)、軸= -1)
#= - ((0.95ログ)、(0.1ログ))
#= [0.051、2.302]
減少xent =(0.051 + 2.302)/ 2 = 1.176
「」
。1
2
3
4
5
6
7
8
9
10
11
12は
13である
14
15
16
17は、
また、の減少の値を設定することにより、デフォルトの計算された平均値は、計算結果がデータの複数のセットに変更してもよいことがわかりますまったく同じアプローチ、使用状況やBinaryCrossentropyは、ここで説明し、あなたが自分自身でそれを試すことができます、と言うことではありません。
categorical_crossentropy機能

tf.keras.losses.categorical_crossentropy(
y_true、y_pred、from_logits =偽、label_smoothing = 0

1
2
3
y_true =([0、1、0]、[0、0、1])
y_pred =(0.05、0.95、 0]、[0.1、0.8、0.1])
損失= tf.keras.losses.categorical_crossentropy(
y_true、y_pred)
プリント( '損失:'、loss.numpy())

#出力:減量:1.176
。1
2
。3
。4
。5
。6
。7
:使用に加えて、それらは次の通り、損失パラメータのmodel.compile()として使用することができる
インポートtensorflow TF ASを

= tf.keras.Input入力(形状=(3))
X = tf.keras.layers.Dense(4、アクティベーション= tf.nn.relu)(入力)
出力tf.keras.layers.Dense =(5、 = tf.nn.softmax活性化)(X)
モデル= tf.keras.Model(入力=入力、出力アウトプット=)
。1
2
。3
。4
。5
。6
model.compile( 'SGD'、
損失= tf.keras.losses.BinaryCrossentropy ())
model.compile( 'SGD'、
損失= tf.keras.losses.binary_crossentropy)
 鄭州メンズ病院その良い家庭を確認します。http:男性の//www.xasgnanke.com/鄭州入院治療をします。http:/ /www.xasgnanke.com/鄭州の男性と病院ランキング:HTTP://www.xasgnanke.com/
model.compile( 'SGD'、
損失= tf.keras.losses.CategoricalCrossentropy())
model.compile( 'SGD'、
損失= tf.keras.losses.categorical_crossentropy)

。1
2
3。
4。
5。
6。
7。
8。
9。
10
もう一つ注意すべきは、それは、クラスを使用する場合、インスタンス化オブジェクトを得るために、リアブラケットが存在することを忘れないで、書き込みのみの関数関数名ならその上

第三に、そして最終的に、また、それは、前者に基づいて拡張されていないので、明確な境界は、上来、実際には、両方のバイナリまたは複数の分類に使用できるかどうかBinaryCrossentropy CategoricalCrossentropy、です。しかし、通常の状況下で上記の例で使用されるデフォルトの用途に応じて行われます。
----------------
免責事項:この記事はCSDNブロガー「ユニバーサル黒アレックスの元記事で、BY-SAの著作権契約CC 4.0に従って、転載元のソースを添付してくださいリンクとこの文。
オリジナルリンクします。https://blog.csdn.net/qq_39507748/article/details/105005427

おすすめ

転載: www.cnblogs.com/sushine1/p/12642821.html