Tensorflowとはあまり関係無いが、Softmax関数についてまだ腑に落ちないところがあるので、一生懸命本を読みながら進めている。 一番最初のMNISTを理解するために、最初のMNISTについていろいろ読み進めていこう。
Tensorflowのチュートリアルでは、input_data.pyを使ってMNISTの数値、およびトレーニングデータを読み込んでいる。
http://tensorflow.org/tutorials/mnist/beginners/index.md
import input_data mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
これはどのような構造になっているのかというと、mnist.train.imagesにイメージデータ(28x28)が55000個入っている。さらに、mnist.train.labelsに正解のデータが入っている。これはone-hotのリストになっている。 例えばインデックスの一番目は、
mnist.train.images[0] ... 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.94901967, 0.99607849, 0.93725497, 0.22352943, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.34901962, 0.98431379, 0.9450981 , 0.33725491, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.01960784, 0.80784321, 0.96470594, 0.6156863 , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.01568628, 0.45882356, 0.27058825, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ], dtype=float32)
このインデックス0の答えは、
mnist.train.labels[0] array([ 0., 0., 0., 0., 0., 0., 0., 1., 0., 0.])
答えは7だ。本当かな?表示してみよう。
>>> for ys in range(0, 28): ... for xs in range(0, 28): ... print "%0.3f " % (mnist.train.images[0][ys*28+xs]), ... print "" ...
これを縮小表示してみると、
どうみても「3」なんだけどね。。。まあ、7なんでしょう(海外では7の文字に一本横棒を入れることが良くあるしね)
というわけで、面白いので、答えに応じてどのようなトレーニングデータが入っているのか、それぞれ加算してExcelでグラフを作ってみた。 これがIntensityとかに関係するのかなあ、Tensorflowのチュートリアルを読み進めても、あまり理解できていないのがつらい。。。
width = 28 max = 55000 num_index = 0 def make_matrix(num_index): total=[0]*max for idx in range(0, max): if mnist.train.labels[idx][num_index] == 1.0: for ys in range(0, width): for xs in range(0, width): xy_index = ys*width+xs total[xy_index] = total[xy_index] + mnist.train.images[idx][xy_index] # print "%f " % (mnist.train.images[idx][ys*width+xs]), for ys in range(width-1, -1, -1): for xs in range(0, width): xy_index = ys*width+xs print "%03.3f," % (total[xy_index]) , print ""
0
1
2
3
4
5
6
7
8
9