Read MNIST label information

This is a sample program that reads MNIST label information in Perl. MNIST is a sample image that can be used in deep learning.

This is a sample to read THE MNIST DATABASE of handwritten digits.

use strict;
use warnings;
use FindBin;

# MNIST Read label information
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: $!";

#Magic number
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";
}

# Number of labels
read($mnist_label_fh, $label_buffer, 4);
my $items_count = unpack('N1', $label_buffer);

#Read label
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;
}

# Label information
my $label_info = {};
$label_info->{items_count} = $items_count;
$label_info->{label_numbers} = $label_numbers;

A brief explanation of the program that reads MNIST label information

Place "train-labels-idx1-ubyte" under "data".

Open the file and read it with the read function.

Check the magic number. Since it is a big endian 32-bit integer, specify "N1" for unpack.

Get the number of labels. Since it is a big endian 32-bit integer, specify "N1" for unpack.

I will read the label. Since one piece of information on the label is an unsigned 8-bit integer, specify "C1".

The label information for training "train-labels-idx1-ubyte" is read, but the label information for verification "t10k-labels-idx1-ubyte" can also be read in the same way.

Associated Information