LoginSignup
6
7

More than 5 years have passed since last update.

MNISTの学習用画像を見てみよう!(2)

Last updated at Posted at 2016-02-09

GNU Octave のパッケージをインストールしよう

MNISTの画像ファイルは一般的な画像ビューアで見ることができないらしい…。
フリーの数値計算ソフト GNU Octave を使うとMNIST画像データを可視化できるんだって!

さっそくパッケージをインストール。
ちなみ僕はRaspberry Pi 2Ubuntu 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)

img00001.png
「5」のようですね笑
次は2枚目を見てみよう。

octave:12> val = uint8(img(:,:,2)');
octave:13> imshow(val)

img00002.png
2枚目は「0」だ!
いっきに飛ばして10000枚目を見よう。

octave:14> val = uint8(img(:,:,10000)');
octave:15> imshow(val)

img10000.png
10000枚目は「7」のようですね。

いちいちコマンドを打つのが面倒くさいのですね。
コマンドをファイルにまとめて実行できる様なので、

mnist-train-images.m
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


参照サイト&文献

6
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7