GNU Octave のパッケージをインストールしよう
MNISTの画像ファイルは一般的な画像ビューアで見ることができないらしい…。
フリーの数値計算ソフト GNU Octave を使うとMNIST画像データを可視化できるんだって!
さっそくパッケージをインストール。
ちなみ僕はRaspberry Pi 2 に **Ubuntu 15.10(Wily Werewolf)**を走らせて遊んでいます。
$ sudo apt-get install octave
GNU Octave でMNIST学習用画像を見てみる
学習用画像ファイルを開く。
octave:1> fid = fopen('train-images-idx3-ubyte','r','b')
fid = 4
画像ファイルの先頭から16バイトはファイル形式が記述されているので、
octave:2> magic_number = fread(fid,1,'int32')
magic_number = 2051
octave:3> number_of_images = fread(fid,1,'int32')
number_of_images = 60000
octave:4> number_of_rows = fread(fid,1,'int32')
number_of_rows = 28
octave:5> number_of_columns = fread(fid,1,'int32')
number_of_columns = 28
では、画像を読み出してみよう。
GNU Octave では、fread関数で取得したデータの出力を2次元配列(行列)にすることができる。
また、reshape関数で2次元配列(行列)の各要素を組み替えて与えられた次元となる行列を返す。
返された行列の要素は行要素が連続であるものとしてアクセスされる。
octave:6> img = fread(fid, [28*28 60000], 'uint8');
octave:7> size(img)
ans =
784 60000
octave:8> img = reshape(img,28,28,60000);
octave:9> size(img)
ans =
28 28 60000
先頭から一つずつ画像を表示してみる。
GNU Octave ではimshowコマンドで2次元配列データを簡単に画像表示できる。
1枚目を見てみる。
octave:10> val = uint8(img(:,:,1)');
octave:11> imshow(val)
octave:12> val = uint8(img(:,:,2)');
octave:13> imshow(val)
2枚目は「0」だ!
いっきに飛ばして10000枚目を見よう。
octave:14> val = uint8(img(:,:,10000)');
octave:15> imshow(val)
いちいちコマンドを打つのが面倒くさいのですね。
コマンドをファイルにまとめて実行できる様なので、
fid = fopen('train-images-idx3-ubyte','r','b');
magic_number = fread(fid,1,'int32');
number_of_images = fread(fid,1,'int32');
number_of_rows = fread(fid,1,'int32');
number_of_columns = fread(fid,1,'int32');
img = fread(fid,[number_of_rows*number_of_columns number_of_images],'uint8');
size(img)
img = reshape(img,number_of_rows,number_of_columns,number_of_images);
size(img)
% 学習画像を10枚見てみる
% 1秒間ずつ表示する
for i=1:1:10
val = uint8(img(:,:,i)');
imshow(val)
sleep(1);
end
fclose(fid);
下記で実行できる。
$ octave mnist-train-images.m