Python(基本的なこと007: Tensorflow1.15でmnistの実行)

■Tensorflowのサンプルとしてmnistを実行してみる。
前回でtensorflowの設定ができたので、次にmnistのデータセット(手書きの数字の画像)を実行してみる。
本(実践DeepLearning)に従ってサンプルコードを書いたあと、エラーを修正し続け、何とかそれらしい実行ができるところまでいった。

本によると、mnistのデータセットに対してロジスティック回帰の学習アルゴリズムを使うとある。 mnistのデータセットは、60000の画像(0から9までの数字、1つの画像は28×28(=784)ピクセル)であり、この784ピクセルの入力から0から9の出力を出すそう。上のプログラムの中では、mnistのデータセットを読み込んでいるけど、結果として表示しているのは、cost(損失)、Validation Error(検出エラー)、Test Accuracy(精度)など。実際に何をやっているかいまいちイメージがつかない。
もう少しコードを読んでみる。

以下にmnistのデータや設定をメモしておく。
まず、pythonをインストールすると、python.exeのファイルがあるフォルダにLibフォルダがある。その下のsite-packagesにインストールしたライブラリが入っているようで、tensorflowなどのフォルダがある。この中のtensorflow_coreフォルダからexamples - tutorials - mnist - input_dataとフォルダを作り、input_dataフォルダにデータを置く。サンプルコードでは以下の一文があるので、それに対応するフォルダ構成としている。
from tensorflow.examples.tutorials.mnist import input_data

データは下の通り。特に解凍せずそのまま置いた(多分、公式のページからダウンロードできる)。
t10k-images-idx3-ubyte.gz
t10k-labels-idx1-ubyte.gz
train-images-idx3-ubyte.gz
train-labels-idx1-ubyte.gz

また、データの取り扱いにあたりpythonのファイルが必要みたいなので、下のファイルを作成しGithubというサイトから該当するファイル名のコードをコピーした。
input_data.py
mnist.py

これでmnistのデータの設定は完了。

mnistのデータ構成について、下のコードでデータを読み込んだ後、printでコンソールへ表示したりした。
mnist = input_data.read_data_sets("input_data", one_hot=True)

imageslabels
データの数(訓練train)5500055000
データの数(試験test)1000010000
データの型numpynumpy
データの内容784(28×28)ピクセルの色の情報(おそらく)0から9までの数値

データの内容の例として、下のコードでlabelsとimagesの要素を1つ取り上げた。
print(mnist.train.labels[8])
np.savetxt('test.csv', mnist.train.images[8].reshape(28,28), delimiter=',')

labels[8]は、[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]と表示され、これが9に対応しているものと思う。
images[8]は、28×28に形をなおしcsvファイルとして保存した。下の画面の通り、ほとんどが0となっているが一部で数字が入っている。これをExcelに移して、0の部分を削除すると、9であることが分かる。1ピクセル毎の色情報が入っているのではと思う。

mnistのデータセットのイメージは何となくできてきた。