LoginSignup
16
8

More than 5 years have passed since last update.

【TensorFlow】softmax_cross_entropyの前後に付く謎のsparse, with_logitsについて

Last updated at Posted at 2018-02-24

はじめに

TensorFlowのMNISTのチュートリアルをしていたら、そのページでは損失関数(Loss fucntion)にtf.losses.softmax_cross_entropyを使っていたのですが、公式のGitHubではtf.losses.sparse_softmax_cross_entropyを使っていて、その違いを調べてもなかなか出てこなかったので、自分のメモ代わりに残しておきます。
ついでにwith_logitsが付く場合も書いておきます。

sparseがある場合とない場合の違いは?

公式のAPIを読んでもわけがわからなかったのですが(無能)、stack overflowで質問兄貴ブログ執筆外人兄貴によると、両者の結果に違いはないそうです。
sparseが付いていると、自動でinputをone-hotにしてくれるそうです。はい、便利!
one-hot codingについてはこちらを参考にどうぞ。

例えばこうしてたのが

without_sparse
onehot_labels = tf.one_hot(indices=tf.cast(labels, tf.int32), depth=10)
loss = tf.losses.softmax_cross_entropy(
    onehot_labels=onehot_labels, logits=logits)

これで済むというとです。

with_sparse
  loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits)

with_logitsがある場合とない場合の違いは?

Qiita執筆兄貴によると

"with_logits"というのは、この関数は内部でソフトマックスも計算するから、ニューラルネットワークの出力をそのまま入力してね、という意味です。

だそうです。ありがたい。

参照

16
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
8