こんにちは。
tensorflow を試しているのですが、
https://www.tensorflow.org/get_started/mnist/beginners
こちらのチュートリアルで、
y = tf.nn.softmax(tf.matmul(x, W) + b)
という、ソフトマックス関数を使ったコードを活性化関数?として定義しています。
そして損失関数として
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
を定義しています。
しかし読み進めると、この損失関数がうまく動かないことがあるため、代わりに
tf.nn.softmax_cross_entropy_with_logits()
関数を使用すべしという記述が現れます。
そこで用意されている完成版のサンプルコード
https://github.com/tensorflow/tensorflow/blob/r1.4/tensorflow/examples/tutorials/mnist/mnist_softmax.py
を確認してみると、確かに
y = tf.matmul(x, W) + b cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
となっています。
しかしここで疑問なのは、上記サンプルコードでは y の定義から softmax() が消えてしまっている点です。
softmax_cross_entropy_with_logits の方で同時にsoftmax関数も実行しているということは分かるのですが、
活性化関数であるyからsoftmax()を除去してしまってもよいのでしょうか?
理屈がよく分かりません。
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
の行で、softmax() 有りの y の場合と softmax 無しの y の場合で、結果が変わってしまったりしないのでしょうか。
ご教示いただけると嬉しいです。
宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。