ゼロつくの74ページ。MNISTデータセットを読み込む際の以下のソースコードをGoogle Colaboratoryで走らせようとしたらエラーが。(ソースコードはOreilly-JapanからGit-Hubで公開されていますが、一部省略しています。)
from dataset.mnist import load_mnist
(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)
エラーメッセージは次のようなものがでました。datasetフォルダ内のmnist.pyで書かれているload_mnistという関数の定義文に同じ文章があるので、どうやらそこがうまく機能していないようです。
107
108 with open(save_file, 'rb') as f:
--> 109 dataset = pickle.load(f)
110
111 if normalize:
ValueError: unsupported pickle protocol: 5
原因はdatasetフォルダ内に.pklファイルが生成されていることでした。実は以前自分のPCにインストールしたpythonで同じコードを動かしていたのですが、そのときパソコンに保存していたゼロつくの提供ファイル「deep-learning-from-scratch-master」をそのままgoogle deriveにコピーして持ってきたのでこのようなことになったみたいです。自分のPCにインストールしたpythonはバージョン 3.8でしたがGoogle Colaboratoryのバージョンは3.7です(2022年4月現在)。バージョン3.8で上のコードを動かすと自動的に mnist.pkl ファイルが生成されるようです。pickle5はバージョン3.7には対応しておらず、3.8からになるのでこのファイルがあるとGoogle Colaboratoryではうまく動作しなくなります。
ちなみにpython のバージョンは次のコードで確認できます。
!python -V
解決策: 結局、提供ファイル「deep-learning-from-scratch-master」をゼロつくのGit-Hubから新しく持ってきて、コードを動かしたら何の問題もなく動作しました。あるいは .pklファイルを削除すればうまく動作すると思います。
はじめは「unsupported pickle protocol: 5」というエラーが出ているので、pickle5をインストールしないといけないのではとか考えて、色々無駄なことをしていたのですが、大したコードの修正はいりませんでした。
参考サイト
pickleファイルの場所がわからない
コメント