tensorflow常用損失関数(loss function)(一):画像認識、分類


1.画像分類


tensorflowで画像分類に対するloss functionは主に3クロスエントロピー関数であり、主にsoftmax、sigmoid、sparse_softmax、weighted重み付けクロスエントロピー.
sigmoid、softmax、logits、cross entropyの計算方法については、別のブログで紹介されています.ブログアドレス:https://blog.csdn.net/itlilyer/article/details/107101569.

sigmoid_cross_entropy_with_logits

tf.nn.sigmoid_cross_entropy_with_logits(logits, targets,name=None)

パラメータの説明:


Labels:logitsと同じshapeを持つTensorで、画像のラベルです.one-hot形式である必要はありません.logits:タイプはfloat 32またはfloat 64のTensorで、予測値です.name:この操作の名前を設定できます.オプションです.注意:labelsとlogitsのshapeは一致する必要があります.一致しないとValueErrorの異常が放出されます.

戻り値:


logitsと同じshapeを持つTensorで、内容は各タイプのlogistic loss値です.

使用方法:


分類タスクの確率誤差を測定し、各カテゴリは独立しているが、反発せず、同じピクチャに同時に存在することができる.たとえば、象と犬を同時に含むことができるマルチラベル分類のタスクです.
計算式:
  x=logits,z = labels

loss = max(x, 0) - x*z + log(1 + exp(-abs(x)))

推理プロセスにはtensorflowの公式サイトが表示されます.https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits

softmax_cross_entropy_with_logits

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

パラメータの説明:


**labels:**カテゴリ次元の各ベクトルは有効な確率分布であるべきである(個人的には、1つのbatchの各概論値は0以上1以下であり、すべてのカテゴリの確率と1に等しいべきであることを理解する).例えば、1つのshapeが[batch_size,num_class]のlabels、labels[i]の各要素は有効な確率分布である.logits:一般的にネットワークの最後のレイヤの出力であり、通常は線形出力である.正規化されていない対数分布です.axis:classが存在する次元.デフォルトは-1で、最後の次元です.name:操作の名前.

戻り値:


softmaxのクロスエントロピーloss値を含むTensorで、タイプはlogitsと同じで、shapeは[batch_size]に等しい.

使用方法:


分類タスクで確率誤差を測定します(各オブジェクトは1つのタイプにのみ属します).例えば、CIFAR-10の画像にはラベルが1つしかありません.画像はトラックや犬かもしれませんが、2つの物体を同時に含むことはできません.
注意:1、画像のカテゴリは反発的で、1つのカテゴリしかありませんが、ラベルは違います.ラベルは有効な確率分布を満たすだけでいいです.有効な確率分布でなければ勾配計算が正しくない.
2、各labelが反発する、すなわちone-hot(1箇所のみ値が1、他は0)を満たす場合、tfを用いることもできる.nn.sparse_softmax_cross_entropy_with_logits().
3、この関数に入力されたlogitsはスケールされていない必要があります(値は必ず0と1の間ではありません)、効率を高めるためにこの関数の内部でsoftmaxの操作を実行します.したがってsoftmaxの出力をこの関数の入力としないでください.計算結果が正しくありません.
4、通常labelsとlogitsのshapeは[batch_size,num_classes]であり、タイプは同じでなければならない(float 16、float 32、float 64)

sparse_softmax_cross_entropy_with_logits

tf.nn.spares_softmax_cross_entropy_with_logits(logits, labels,name=None)

パラメータの説明:


Labels:shapeは[d_0,d_1,...,d_{r-1}であり、タイプはint 32またはint 64である.1つのエンティティのlabelの値は[0,num_classes]の間(つまりlabelの値は0,1,2,3,4,5…のような値である必要があります.softmaxとは異なり)、他の値は異常を放出し、NaNの無効な値を返します.logits:スケーリングされていない対数確率でshapeは[d_0,d_1,...,d_{r-1},num_classes]、データ型はfloat 16,float 32,float 64 name:操作の名前

戻り値


shapeはlabelsと同じで、タイプはlogitsと同じです.

使用方法の説明


ソフトmax_とcross_entropy_with_logitsの使用差は多くありませんが、違いに注意してください.1、2つのlabelは違います.shapeもタイプも違います.sparseのlabelsはone-hotです.
その他の使い方は前の関数とほぼ一致しています

weighted_cross_entropy_with_logits

tf.nn.weighted_cross_entropy_with_logits(logits, targets,pos_weight,name=None)

パラメータの説明:


Labels:logitsタイプとshapeと同じTensor logits:タイプfloat 32またはfloat 64のTensor pos_Weight:正のサンプルに使用される係数

戻り値:


logitsのshapeと同じTensor

使用方法:


weighted_cross_entropy_with_logitsとsigmoid_cross_entropy_with_logitsは正のサンプルに重みposを追加する以外はWeight以外は同じです.リコール率(recall)と精度(precision)は、正負サンプルの重みを調整することによって比較することができる.
通常のクロスエントロピーは次のように定義されます.
labels * (-log(sigmoid(logits)) + (1 - labels) * (-log(1 - sigmoid(logits))

重み付きクロスエントロピー定義:
labels * (-log(sigmoid(logits)) * pos_weight + (1 - labels) * (-log(1 - sigmoid(logits))

まとめ


この4つの関数はsigmoidとsoftmaxの2つに分類できることがわかります.個人的に理解すると、sigmoidの関数の応用と出力結果には多くの可能性のあるシーンがあり、例えばx光シート1枚に対して、様々な病気の確率がある.sigmoidは予測値を0から1の間にマッピングし、二分類に使用する.一方、softmaxは多分類の場合によく用いられるが、カテゴリ数が2の場合、softmaxはsigmoidに劣化するため、二分類softmaxとsigmoidは同じである.不正確な点があればご指摘ください.