MNISTラベル情報を読み込む
MNISTラベル情報をPerlで読み込むサンプルプログラムです。MNISTは、ディープラーニングで利用できる画像のサンプルです。
THE MNIST DATABASE of handwritten digitsを読み込むサンプルです。
use strict; use warnings; use FindBin; # MNISTラベル情報を読み込む my $mnist_label_file = "$FindBin::Bin/data/train-labels-idx1-ubyte"; open my $mnist_label_fh, '<', $mnist_label_file or die "Can't open file $mnist_label_file: $!"; # マジックナンバー my $label_buffer; read($mnist_label_fh, $label_buffer, 4); my $magic_number = unpack('N1', $label_buffer); if ($magic_number != 0x00000801) { die "Invalid magic number expected " . 0x00000801 . "actual $magic_number"; } # ラベル数 read($mnist_label_fh, $label_buffer, 4); my $items_count = unpack('N1', $label_buffer); # ラベルの読み込み my $label_numbers = []; for (my $i = 0; $i < $items_count; $i++) { read $mnist_label_fh, $label_buffer, 1; my $label_number = unpack('C1', $label_buffer); push @$label_numbers, $label_number; } # ラベル情報 my $label_info = {}; $label_info->{items_count} = $items_count; $label_info->{label_numbers} = $label_numbers;
MNISTラベル情報を読み込むプログラムの簡易解説
「data」以下に「train-labels-idx1-ubyte」を配置します。
ファイルをオープンしてread関数で読み込んでいきます。
マジックナンバーのチェックを行います。ビッグエンディアンの32bit整数なので、unpackに「N1」を指定します。
ラベル数を取得します。ビッグエンディアンの32bit整数なので、unpackに「N1」を指定します。
ラベルを読み込んでいきます。ラベルの一つの情報は符号なし8bit整数なので「C1」を指定します。
訓練用のラベル情報である「train-labels-idx1-ubyte」を読み込んでいますが、検証用のラベル情報「t10k-labels-idx1-ubyte」も同様の方法で読み込めます。