5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-02-08

MNISTファイルの入手

MNISTの手書き画像データは下記のサイトで手に入れることができる。

THE MNIST DATABASE of handwritten digits

そこでは4つのgzipファイルを解凍すると下記のファイルを入手することができるらしい…。

  • train-images-idx3-ubyte
    →学習用画像
  • train-labels-idx1-ubyte
    →学習用画像のラベル
  • t10k-images-idx3-ubyte
    →テスト用画像
  • t10k-labels-idx1-ubyte
    →テスト用画像のラベル

学習用画像のファイル形式

TRAINING SET IMAGE FILE (train-images-idx3-ubyte):
[offset] [type] [value] [description]
0000 32 bit integer 0x00000803(2051) magic number
0004 32 bit integer 60000 number of images
0008 32 bit integer 28 number of rows
0012 32 bit integer 28 number of columns
0016 unsigned byte ?? pixel
0017 unsigned byte ?? pixel
........
xxxx unsigned byte ?? pixel

Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black).

学習用画像ファイル形式を確認してみる

上記のようなファイル形式になっているらしいので、実際に学習用画像ファイルの16バイト目まで見てみよ~。

look-train-images.c
#include <stdio.h>
#include <stdlib.h>
// 学習用画像ファイルがビッグエンディアンで保存されてるため
// 1バイトより大きいサイズのデータは一時格納用配列の中身は
// リトルエンディアンで格納しint型変数にはビッグエンディアン
// で格納する


void get_images_info(FILE *, int*);
// 画像の情報を取得する関数
// 引数:取得したい情報源のファイルポインタ
//       取得したい情報を保持する変数のアドレス
// 戻り値:なし

void get_images_info(FILE *fp, int *info){
	int count; // カウンター
	int status; // fread関数の戻り値 
	// 一時格納用配列(リトルエンディアンで保持)
	char buff[4];
	// 1バイトずつ取得
	for(count=0;count<4;count++){
		status=fread( (char *)&buff[count],1,sizeof(char),fp);
		if(status < sizeof(char)){
			printf("Reading Error\n"); // 読み込みエラー
			exit(2);
		}
	}

	//	一時格納用配列の中身(リトルエンディアン)をint型変数(ビッグエンディアン)に格納
	*info = buff[0];
	for(count=1;count<4;count++){
		*info <<= 8;
		*info += buff[count];
	}
}



int main(void){
	FILE *train_images_fp;	// 学習用画像ファイルのポインタ	

	// int型変数(ビッグエンディアンで保持)
	int magic_number;
	int number_of_images;
	int number_of_rows;
	int number_of_columns;
	

	// 学習用画像ファイルを開く
	train_images_fp=fopen("train-images-idx3-ubyte","rb");
	if(train_images_fp == NULL){
		printf("Cannot open the train-images-idx3-ubyte\n"); // オープンエラー
		exit(1);
	}


	// 画像の情報を取得
	get_images_info(train_images_fp, &magic_number);
	get_images_info(train_images_fp, &number_of_images);
	get_images_info(train_images_fp, &number_of_rows);
	get_images_info(train_images_fp, &number_of_columns);


	//	データの表示
	printf("magic_number :0x%x\n",magic_number);
	printf("number_of_images :%d\n",number_of_images);
	printf("number_of_rows :%d\n",number_of_rows);
	printf("number_of_columns :%d\n",number_of_columns);
	
	
	//	ファイルを閉じる
	if(fclose(train_images_fp) != 0){
		printf("Cannot close the rain-images-idx3-ubyte\n");
	}

	return 0;
}

結果


magic_number :0x803
number_of_images :60000
number_of_rows :28
number_of_columns :28


上記で示したファイル形式と同じ値がしっかり出ている!!!

次回

では、次回はGUN Octaveを使って実際に学習用画像を見てみる。

5
5
0

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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?