1
1

【ゼロから作るDeepLearning】mnistデータセットの読み込みエラーの対処

Last updated at Posted at 2024-05-06

2024/5/7更新

コード実行時に毎回データを取得しているため動作が遅い
→アクセス後にpickle形式で保存することで解消

はじめに

オライリー社の『ゼロから作るDeepLearning』で画像認識の勉強中に、MNISTデータセットの準備で詰まったので解決法を共有します

問題

P.72 3.6.1 MNISTデータセット
用意されているスクリプトのload_mnist()関数を実行時、以下のエラーが出る

(X_train, t_train), (X_test, t_test) = load_mnist(flatten=True, normalize=False)

# エラーコード ------------------------------------------------------------------
HTTPError: HTTP Error 403: Forbidden

エラーの原因を調べてみると
サイト側のアクセス制限によりダウンロードができないらしい

解決方法

sklearnのfetch_mldata関数を利用

from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split

mnist_X, mnist_y = fetch_openml("mnist_784", version=1, data_home=".", return_X_y=True)

X = mnist_X.astype("float32").to_numpy()
y = mnist_y.astype(int).to_numpy()

# 学習用と評価用に分割
X_train, X_test, t_train, t_test = train_test_split(X, y, test_size=10000)

これで当書と同じようにデータをnumpy配列で取得し、学習用と評価用に分割ができた

また、再利用に備えPickle形式で保存しておくと便利

# pickle形式で保存
import pickle

with open('mnist_X.pkl', 'wb') as f:
    pickle.dump(X, f)
    
with open('mnist_y.pkl', 'wb') as f:
    pickle.dump(y, f)

pikleファイルの読み込み

with open('mnist_X.pkl', 'rb') as f:
    X = pickle.load(f)
    
with open('mnist_y.pkl', 'rb') as f:
    y = pickle.load(f)

おわりに

skleanの関数を利用することで、配布スクリプトと同じようにMNISTデータセットをnumpy配列で取得し、学習用と評価用に分割ができた

参考

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