1. ホーム
  2. python

[解決済み] ロジットとは何ですか?softmaxとsoftmax_cross_entropy_with_logitsの違いは何ですか?

2022-03-22 02:53:09

質問

tensorflow API ドキュメント というキーワードを使用しています。 logits . これは何でしょうか?みたいな書き方のメソッドが多い。

tf.nn.softmax(logits, name=None)

もし logits は単なる一般的な Tensor という入力がありますが、なぜ logits ?


次に、次の2つの方法の違いは何でしょうか。

tf.nn.softmax(logits, name=None)
tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None)

知っている tf.nn.softmax はできますが、他はできません。例を示してもらえると本当に助かります。

どのように解決するのですか?

softmax+logitsは、単純に、関数が以前の層のスケーリングされていない出力で動作し、単位を理解するための相対的なスケールが線形であることを意味します。 特に、入力の和が 1 にならないことがある、その値が ない の確率(5が入力されるかもしれない)。内部的には、まず、スケーリングされていない出力にソフトマックスを適用し、次に、それらの値とラベルで定義された「あるべき姿」とのクロスエントロピーを計算するのです。

tf.nn.softmax を適用した結果が表示されます。 ソフトマックス関数 を入力テンソルに適用する。 ソフトマックスは入力をquot;squishes" する。 sum(input) = 1 ソフトマックスの出力は入力と同じ形状である。

a = tf.constant(np.array([[.1, .3, .5, .9]]))
print s.run(tf.nn.softmax(a))
[[ 0.16838508  0.205666    0.25120102  0.37474789]]

参照 この回答 は、DNNでソフトマックスが広く使われている理由を説明しています。

tf.nn.softmax_cross_entropy_with_logits は、ソフトマックスのステップと、ソフトマックス関数を適用した後のクロスエントロピーの損失の計算を組み合わせたものですが、より数学的に慎重な方法でそれをまとめて行っています。 という結果に似ています。

sm = tf.nn.softmax(x)
ce = cross_entropy(sm)

クロスエントロピーは要約指標であり、要素間の総和を算出する。 の出力は tf.nn.softmax_cross_entropy_with_logits 形状に [2,5] テンソルは形状 [2,1] (1次元目はバッチとして扱われる)。

クロスエントロピーを最小化する最適化を行いたい場合 AND 最後のレイヤーの後にソフトマックスを行う場合は tf.nn.softmax_cross_entropy_with_logits なぜなら、数値的に不安定なコーナーケースを数学的に正しい方法でカバーしてくれるからです。 そうでなければ、あちこちに小さなイプシロンを追加してハックすることになるでしょう。

2016-02-07に編集しました。 オブジェクトが1つのクラスにしか属さないようなシングルクラスラベルを使用している場合、次のように使用することを検討します。 tf.nn.sparse_softmax_cross_entropy_with_logits そうすれば、ラベルを密な一重の配列に変換する必要がなくなります。 この関数はリリース0.6.0以降に追加されました。