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」も同様の方法で読み込めます。
Perl AI深層学習入門