(2) MNIST学習画像を見てみる

投稿者: | 2013年10月5日

10,023 views

この記事は最終更新から 1750日 が経過しています。

ダウンロードしたMNIST画像は、一般的な画像ビューアで見ることができない。
ここではフリーの数値計算ソフト GNU-Octave を使って MNIST画像データを可視化してみる。

【参考】
「(28) MNIST画像をPNG画像で出力する(Python版)」では、同じことを Pythonでもやってみました。

学習用画像データファイルをオープンする。

octave:2> fid = fopen('train-images-idx3-ubyte','r','b')
fid =  3

学習用画像データファイルのフォーマットは以下の通り。
https://www.dogrow.net/nnet/wp-content/uploads/2013/10/20131005_03.png
ファイル先頭のヘッダ部分には、画像データに関する情報が4項目格納されている。

octave:3> magic_number = fread(fid,1,'int32')
magic_number =  2051
octave:4> number_of_items = fread(fid, 1, 'int32')
number_of_items =  60000
octave:5> number_of_rows = fread(fid,1,'int32')
number_of_rows =  28
octave:6> number_of_columns = fread(fid,1,'int32')
number_of_columns =  28

縦横28 x 28ピクセルの画像が 60,000枚入っていることが確認できた。

次に画像を読み出してみる。
GNU-Octaveでは、fread関数で取得したデータの出力を2次元配列にすることができる。

octave:7> img = fread(fid, [28*28 60000],'uint8');
octave:8> size(img)
ans =
     784   60000
octave:9> img = reshape(img,28,28,60000);
octave:10> size(img)
ans =
      28      28   60000

先頭から一つずつ画像を表示してみる。
GNU-Octaveでは、imshowコマンドで2次元配列データを簡単に画像として表示できる。

octave:11> v = uint8(img(:,:,1)');
octave:12> imshow(v)

これは「5」だろうか?
https://www.dogrow.net/nnet/wp-content/uploads/2013/10/20131005_M01.png

2番目に格納されている学習画像も見てみる。

octave:13> v = uint8(img(:,:,2)');
octave:14> imshow(v)

これは「0」に間違いない。
https://www.dogrow.net/nnet/wp-content/uploads/2013/10/20131005_M02.png

60000個目に格納されている学習画像も見てみる。

octave:15> v = uint8(img(:,:,60000)');
octave:16> imshow(v)

これは「8」に間違いない。
https://www.dogrow.net/nnet/wp-content/uploads/2013/10/20131005_M03.png

次回「(3) MNIST画像をPNG画像で出力する」では、MNIST画像を PNG画像ファイル化して眺めてみる。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です