FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

機械学習初心者がTensorFlowのチュートリアルを勉強して分かったことをまとめる(3)

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 ""
...

これを縮小表示してみると、

f:id:msyksphinz:20151114031420j:plain

どうみても「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

f:id:msyksphinz:20151114031652p:plain

1

f:id:msyksphinz:20151114031730p:plain

2

f:id:msyksphinz:20151114031751p:plain

3

f:id:msyksphinz:20151114031818p:plain

4

f:id:msyksphinz:20151114031839p:plain

5

f:id:msyksphinz:20151114031902p:plain

6

f:id:msyksphinz:20151114031923p:plain

7

f:id:msyksphinz:20151114031942p:plain

8

f:id:msyksphinz:20151114032001p:plain

9

f:id:msyksphinz:20151114032027p:plain