2
2

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 3 years have passed since last update.

「ゼロから作るDeep Learning」自習メモ(その3)3.6.1 MNISTデータセットのダウンロード

Last updated at Posted at 2020-08-11

「ゼロから作るDeep Learning」(斎藤 康毅 著 オライリー・ジャパン刊)を読んでいる時に、参照したサイト等をメモしていきます。 その2← →その4

##3.6.1 MNISTデータセットのダウンロード

P72 MNIST データセット についてのところで、つまづきました。

本の内容が難しいわけではなく、単純にファイルのダウンロード方法や、ダウンロードしたファイルの加工方法とかが、よくわかりませんでした。

Qiita の記事を参考にさせてもらいました。

PythonでMNISTをダウンロードして前処理する

この記事を参考にして、自分でMNISTファイルをダウンロード、加工してみました。

import urllib.request  # データをホームページからダウンロード
import os.path

url_base = 'http://yann.lecun.com/exdb/mnist/' #MNISTのホームページ
key_file = {
    'train_img':'train-images-idx3-ubyte.gz',
    'train_label':'train-labels-idx1-ubyte.gz',
    'test_img':'t10k-images-idx3-ubyte.gz',
    'test_label':'t10k-labels-idx1-ubyte.gz'
}

#データを保存するフォルダ
dataset_dir = os.path.dirname(os.path.abspath('__file__'))+'/dataset'

for file_name in key_file.values():
    file_path = dataset_dir + '/' + file_name
    urllib.request.urlretrieve(url_base + file_name, file_path)

このプラグラムを実行すると、指定したフォルダに4つのファイルがダウンロードされます。
p72.jpg

# 保存したデータの内容を確認する
import os.path
import gzip
import numpy as np

key_file = {
    'train_img':'train-images-idx3-ubyte.gz',
    'train_label':'train-labels-idx1-ubyte.gz',
    'test_img':'t10k-images-idx3-ubyte.gz',
    'test_label':'t10k-labels-idx1-ubyte.gz'
}
# dataset_dir = 'C:/Users/(ユーザー名)/dataset' 
dataset_dir = os.path.dirname(os.path.abspath('__file__'))+'/dataset'
file_path = dataset_dir + '/' + key_file['train_img']    #試しにtrain_imgを見てみる
with gzip.open(file_path, 'rb') as f:
    data = np.frombuffer(f.read(), np.uint8)

len(data)    #->47040016
# 画像データtrain_img の頭16バイトには、ファイルについての情報がのっている。これを除去してファイルを解凍する
# 同様にラベルデータの頭8バイトを除去してファイルを解凍する

import gzip
import numpy as np

key_file = {
    'train_img':'train-images-idx3-ubyte.gz',
    'train_label':'train-labels-idx1-ubyte.gz',
    'test_img':'t10k-images-idx3-ubyte.gz',
    'test_label':'t10k-labels-idx1-ubyte.gz'
}
dataset_dir = 'C:/Users/(ユーザー名)/dataset' 

def load_img(file_name):
    file_path = dataset_dir + '/' + file_name
    with gzip.open(file_path, 'rb') as f:
        data = np.frombuffer(f.read(), np.uint8, offset=16)
    data = data.reshape(-1, 784)
    return data

def load_label(file_name):
    file_path = dataset_dir + '/' + file_name
    with gzip.open(file_path, 'rb') as f:
        labels = np.frombuffer(f.read(), np.uint8, offset=8)
    return labels

dataset = {}
dataset['train_img'] = load_img(key_file['train_img'])
dataset['train_label'] = load_label(key_file['train_label'])
dataset['test_img'] = load_img(key_file['test_img'])
dataset['test_label'] = load_label(key_file['test_label'])

# 必要な形式に変換した datasetオブジェクトを、pickleで保存する
import pickle
save_file = dataset_dir + '/mnist.pkl'    #拡張子は.pkl
with open(save_file, 'wb') as f:
    pickle.dump(dataset, f, -1) 

mnist.pkl というファイルが保存される。
p73.jpg

# 保存したデータを読み込んで、dataset に格納する
import pickle

dataset_dir = 'C:/Users/(ユーザー名)/dataset' 
mnist_file = dataset_dir + '/mnist.pkl'

with open(mnist_file, 'rb') as f:
    dataset = pickle.load(f)
# 確認 データ数(行列の行数)を調べる
dataset['train_img'].shape    #-> (60000, 784)
# 確認 データ数(行列の行数)を調べる
dataset['train_label'].shape   #-> (60000,)
# 訓練画像の表示
import matplotlib.pyplot as plt

example = dataset['train_img'][0].reshape((28, 28))
l = dataset['train_label'][0] 
print(l)
plt.figure()
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(example)
plt.show()

p75.jpg

#参考にしたサイト
PythonでMNISTをダウンロードして前処理する
MNIST データの仕様を理解しよう

その2← →その4

読めない用語集

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?