[Tensorflow]テンソルフローの損失関数の概要



Introduction Loss Function Tensorflow



TensorFlowの損失関数の概要

この記事の参照先:損失関数の損失は大幅に要約されています。アドレス:https://blog.csdn.net/qq_14845119/article/details/80787753
公式文書を参照して整理します。

1.分類損失関数

1.バイナリクロスエントロピー損失sigmoid_cross_entropy:

画像
エイリアス:
tf.losses.sigmoid_cross_entropy(…):
tf.nn.sigmoid_cross_entropy_with_logitsを使用して、クロスエントロピー損失を作成します。



tf.losses.sigmoid_cross_entropy( multi_class_labels, logits, weights=1.0, label_smoothing=0, scope=None, loss_collection=tf.GraphKeys.LOSSES, reduction=Reduction.SUM_BY_NONZERO_WEIGHTS )

パラメータの紹介:
1. multi_class_labels:[batch_size、num_classes]ターゲット整数ラベルは{0、1}にあります。
2.logits:ネットワークから出力されたFloat [batch_size、num_classes]ロジット。
戻り値:
ロジットと同じタイプの加重損失テンソル。リダクションがNONEの場合、その形状はロジットと同じです。それ以外の場合は、スカラーです。

tf.nn.sigmoid_cross_entropy_with_logits



tf.nn.sigmoid_cross_entropy_with_logits( _sentinel=None, labels=None, logits=None, name=None )

パラメータの紹介:
ロジットとラベルは同じタイプと形状である必要があります。
ラベル:[batch_size、num_classes]。ターゲット整数ラベルは{0、1}にあります。
ロジット:フロート[batch_size、num_classes]。
name:操作の名前(オプション)。
戻り値:コンポーネントごとのロジスティック損失を伴うロジットと同じ形状のテンソル。[batch_size、num_classes]

tf.keras.losses.binary_crossentropy
ネットワークの最後の層の活性化関数をシグモイド/タンにし、この目的に損失を設定することができます。
y_trueとy_predの形状は同じで、どちらも[batch_size、1]です。

tf.keras.losses.binary_crossentropy( y_true, y_pred, from_logits=False, label_smoothing=0 )
2.マルチクラスクロスエントロピー損失softmax_cross_entropy:

画像
エイリアス:
tf.losses.softmax_cross_entropy(…):
tf.nn.softmax_cross_entropy_with_logitsを使用して、クロスエントロピー損失を作成します。



tf.losses.softmax_cross_entropy( onehot_labels, logits, weights=1.0, label_smoothing=0, scope=None, loss_collection=tf.GraphKeys.LOSSES, reduction=Reduction.SUM_BY_NONZERO_WEIGHTS )

パラメータの紹介:
onehot_labels:ワンホットエンコードされたラベル。
ロジット:ネットワークのロジット出力。
戻り値:
ロジットと同じタイプの加重損失テンソル。リダクションがNONEの場合、その形状はロジットと同じです。それ以外の場合は、スカラーです。

tf.losses.sparse_softmax_cross_entropy(…):
tf.nn.sparse_softmax_cross_entropy_with_logitsを使用して、クロスエントロピー損失を作成します。

tf.losses.sparse_softmax_cross_entropy( labels, logits, weights=1.0, scope=None, loss_collection=tf.GraphKeys.LOSSES, reduction=Reduction.SUM_BY_NONZERO_WEIGHTS )

パラメータの紹介:
ラベル:[batch_size、]。およびdtypeint32またはint64。ラベルの各エントリは、[0、num_classes)のインデックスである必要があります。 (一意でないホットコード)
ロジット:[batch_size、num_classes]。そして、dtype float16、float32またはfloat64。
戻り値:ロジットと同じタイプの加重損失テンソル。リダクションがNONEの場合、それ以外のラベルと同じ形状になり、それ以外の場合はスカラーになります。

tf.nn.softmax_cross_entropy_with_logits
同時にtf.nn.sparse_softmax_cross_entropy_with_logits。同じ機能がありますが、入力ラベルの次元は[batch_size、]です。

tf.nn.softmax_cross_entropy_with_logits( _sentinel=None, labels=None, logits=None, dim=-1, name=None, axis=None )

パラメータの紹介:
ラベル:[batch_size、num_classes]、labels [i]の各行は有効な確率分布である必要があります。
ロジット:[batch_size、num_classes]。
dim:クラスディメンション。デフォルトは-1で、これが最後の次元です。
戻り値:ラベルと同じ形状です。

tf.keras.losses.categorical_crossentropy
出力ユニットはsoftmaxで起動し、この損失関数を使用できます。
入力パラメーターの次元:[batch_size、num_classes]
ワンホットエンコーディングへの変換が利用可能です:
keras.utils.to_categorical(y、num_classes = None、dtype = ‘float32’)

tf.keras.losses.categorical_crossentropy( y_true, y_pred, from_logits=False, label_smoothing=0 )

tf.keras.losses.sparse_categorical_crossentropy
出力ユニットはsoftmaxで起動し、この損失関数を使用できます。
y_trueディメンション:[batch_size、]はデジタルエンコーディングであり、ワンホットエンコーディングではありません。

tf.keras.losses.sparse_categorical_crossentropy( y_true, y_pred, from_logits=False, axis=-1 )

2.回帰損失関数

1. MSEは、予測値と目標値の差の二乗和を表し、平均化されます。

画像
L2損失は、予測値と目標値の差の2乗の合計を表し、2乗されます。 L2はユークリッド距離を表します。
画像
MSEとL2の曲線は同じです。違いは、1つは平均np.mean()を見つけることであり、もう1つはより正方形のnp.sqrt()を見つけることです。

tf.losses.mean_squared_error( labels, predictions, weights=1.0, scope=None, loss_collection=tf.GraphKeys.LOSSES, reduction=Reduction.SUM_BY_NONZERO_WEIGHTS ) tf.metrics.mean_squared_error( labels, predictions, weights=None, metrics_collections=None, updates_collections=None, name=None

パラメータの紹介:
ラベル:「予測」と同じ次元のグラウンドトゥルース出力テンソル。
予測:予測された出力。
メトリックバージョンには、update_op、mean_squared_errorの2つの戻り値があり、一般的な損失値は[1]です。

Kerasインターフェース:mean_squared_errorまたはmse

2. MAEは、予測値と目標値の差の絶対値を表し、平均化されます。

画像
L1は、予測値と目標値の差の絶対値を表し、L1はマンハッタン距離とも呼ばれます。
画像
MAEとL1の違いは、一方には平均np.mean()があり、もう一方にはnp.sum()がないことです。 2つの曲線の傾向も完全に一貫しています。

tf.metrics.mean_absolute_error( labels, predictions, weights=None, metrics_collections=None, updates_collections=None, name=None )

パラメータの紹介:
ラベル:予測と同じ形状のテンソル。
予測:任意の形状のテンソル。
戻り値:update_op、mean_absolute_error

Kerasインターフェース:mean_absolute_errorまたはmae

3. Huber LossとスムーズなL1:

Huber Lossには、MAEとMSEのそれぞれの利点があります。 δが0になると、MAEに縮退し、δが無限大になると、MSEに縮退します。
画像
スムーズなL1損失には、L1損失とL2損失の利点もあります。本質は、L1とL2の組み合わせです。
画像
Huber損失とSmoothL1損失の曲線の傾向は同じです。 Huber損失のδが1に等しい場合、Huber損失はSmoothL1損失と同等です。
画像
Huber損失の場合、δの選択は非常に重要です。これは、外れ値を処理するためのモデルの動作を決定します。残差がδより大きい場合はL1損失が使用され、小さい場合はより適切なL2損失が最適化に使用されます。

Huber損失関数は、MAEとMSEの欠点を克服します。損失関数の連続導関数を維持できるだけでなく、MSE勾配を使用して誤差を減らし、より正確な最小値を取得できます。また、外れ値に対する応答も向上します。偉大。

ただし、Huberの損失関数の優れたパフォーマンスは、注意深くトレーニングされたハイパーパラメータδの恩恵を受けます。

tf.losses.huber_loss( labels, predictions, weights=1.0, delta=1.0, scope=None, loss_collection=tf.GraphKeys.LOSSES, reduction=Reduction.SUM_BY_NONZERO_WEIGHTS )

パラメータの紹介:
ラベル:「予測」と同じ次元のグラウンドトゥルース出力テンソル。
予測:予測された出力。
戻り値:加重損失フロートテンソル。リダクションがNONEの場合、これはラベルと同じ形状になり、それ以外の場合はスカラーになります。