『ゼロから作るDeep Learning』でディープラーニングの勉強を始めたのですが、第3章のMNISTデータセットを読み込むところで早速つまずいてしまいました...笑
同じエラーで困っている方も多いと思うので、解決方法をまとめておきます。
実行環境
- Mac: M1 Mac
- 開発環境: Jupyter Notebook
- 書籍: 『ゼロから作るDeep Learning』第3章
発生したエラー
書籍では以下のようなコードが紹介されています:
import sys, os
sys.path.append(os.pardir) # 親ディレクトリをインポートするための設定
from dataset.mnist import load_mnist
しかし、このコードをJupyter Notebookで実行すると、以下のエラーメッセージが表示されます:
ModuleNotFoundError: No module named 'dataset'
エラーの原因
このエラーが発生する原因は、ファイルのパスが正しく通っていないことです。
os.pardirは親ディレクトリ(..)を指定するコードですが、Jupyter Notebookはノートブックファイルが保存されているディレクトリをカレントディレクトリとして実行します。
そのため、書籍が想定しているディレクトリ構造と異なる場所でノートブックを開いていると、datasetモジュールが見つからないというエラーが発生してしまうのです。
解決方法
1. GitHubからファイルをダウンロード
まず、書籍のサンプルコードとデータセットをダウンロードします。
GitHubリポジトリ: https://github.com/oreilly-japan/deep-learning-from-scratch
「Code」→「Download ZIP」からダウンロードし、解凍しておきましょう。
2. 絶対パスを指定する
os.pardirの代わりに、ダウンロードしたフォルダへの絶対パスを指定します。
import sys
sys.path.append("/Users/ユーザ名/deep-learning-from-scratch-master")
from dataset.mnist import load_mnist
※「ユーザ名」の部分は、ご自身のMacのユーザ名に置き換えてください。
これでdatasetモジュールが正しく認識され、MNISTデータセットを読み込めるようになります!
フォルダの絶対パスを確認する方法
「自分のフォルダパスがわからない...」という方は、以下の方法で確認できます。
Macでの確認方法
- Finderで
deep-learning-from-scratch-masterフォルダを開く - フォルダを右クリック(またはControl+クリック)
- Optionキーを押しながら「"〜"のパス名をコピー」を選択
- コピーしたパスを
sys.path.append()の中に貼り付ける
これで簡単に絶対パスを取得できます。
実際に動作確認
パスを正しく設定できたら、以下のコードでMNISTデータセットを読み込んでみましょう:
import sys
sys.path.append("/Users/ユーザ名/deep-learning-from-scratch-master")
from dataset.mnist import load_mnist
# MNISTデータセットの読み込み
(x_train, t_train), (x_test, t_test) = load_mnist(flatten=True, normalize=False)
print(x_train.shape) # (60000, 784)
print(t_train.shape) # (60000,)
エラーが出ずに実行できれば成功です!
まとめ
- Jupyter Notebookで
ModuleNotFoundErrorが出る原因は、パスが通っていないこと os.pardirではなく、絶対パスを指定することで解決- Macでは「Optionキー+右クリック」で簡単にパスをコピーできる
同じエラーで困っている方の参考になれば幸いです。
ディープラーニングの学習、一緒に頑張りましょう!