質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

4740閲覧

ファイル読み取り時のエラー(No such file or directory: 'sample_weight.pkl')

taga

総合スコア8

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/02/29 12:03

前提・実現したいこと

"ゼロから作るDeepLearning"に取り組んでいます.
第3章のpickelファイルのsample_weight.pklを読み取る際に
以下のエラーメッセージが発生しました.

発生している問題・エラーメッセージ

FileNotFoundError Traceback (most recent call last) <ipython-input-16-05df57570dc4> in <module> 30 31 x, t = get_data() ---> 32 network = init_network() 33 <ipython-input-16-05df57570dc4> in init_network() 12 13 def init_network(): ---> 14 with open("sample_weight.pkl", "rb") as f: 15 network = pickle.load(f) 16 return network FileNotFoundError: [Errno 2] No such file or directory: 'sample_weight.pkl'

該当のソースコード

Python

1import numpy as np 2import sys, os 3from dataset.mnist import load_mnist 4from PIL import Image 5 6def get_data(): 7 (x_train, t_train),(x_test, t_test) = load_mnist(normalize=True, flatten=True, one_hot_label=False) 8 return x_test, t_test 9 10def init_network(): 11 with open("sample_weight.pkl", "rb") as f: 12 network = pickle.load(f) 13 return network 14 15def predict(network, x): 16 W1,W2,W3 = network["W1"], network["W2"], network["W3"] 17 b1,b2,b3 = network["b1"], network["b2"], network["b3"] 18 19 a1 = np.dot(x, W1) + b1 20 z1 = sigmoid(a) 21 a2 = np.dot(z1, W2) + b2 22 z2 = sigmoid(a2) 23 a3 = np.dot(z2, W3) + b3 24 y = sigmoid(a3) 25 26 return y 27 28x, t = get_data() 29network = init_network()

試したこと

パスが通ってないのではと考え,該当ファイルのパスを下記のコマンドのように追加
file_pass = r'C:\Users\taga\Documents\deep-learning-from-scratch-master\ch03'
sys.path.append(file_pass)

補足情報(FW/ツールのバージョンなど)

Jupyter-notebook使用
Anaconda3使用

conda version : 4. 7 .12
python version : 3. 7. 4. final. 0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

sample_weight.pklが格納されているディレクトリにパスを通す方法ではファイルの読み取りができないのでしょうか??

あなたが実行された
sys.path.append(file_pass)
のsys.pathはimportするモジュールがあるパスの指定です。
なので、読み書きしたいファイルがあるディレクトリをそのパスに追加しても無意味です。

ちなみにインポートするパスの確認方法です。

>>> import sys >>> sys.path ['', '/Users/Technocore/.pyenv/versions/3.7.6/lib/python37.zip', '/Users/Technocore/.pyenv/versions/3.7.6/lib/python3.7', '/Users/Technocore/.pyenv/versions/3.7.6/lib/python3.7/lib-dynload', '/Users/Technocore/.local/lib/python3.7/site-packages', '/Users/Technocore/.pyenv/versions/3.7.6/lib/python3.7/site-packages'] >>>

import時にこのパスをたどってモジュールを探します。
あなたのpcで実行してみてください。
これはこれで覚えておいて損はないです。

投稿2020/02/29 15:56

technocore

総合スコア7337

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taga

2020/02/29 16:08

ご丁寧に回答していただき,ありがとうございます! 大変勉強になりました!! 最後にもう一つだけ質問なのですが, ファイルを読み書きする場合は,必ずカレントディレクトリに入れなければならないという理解で 大丈夫でしょうか??
technocore

2020/02/29 16:12

>必ずカレントディレクトリに入れなければならない そんな決まりはないですよ。 たとえばpyスクリプトと同じ場所にdataというフォルダを作って そこにpklファイルをまとめれば with open("./data/sample_weight.pkl") と指定できます。
hayataka2049

2020/03/01 00:58 編集

technocoreさんのコメントに追加で書いておくと、 ・カレントディレクトリは常に.pyスクリプトのありかと同一である保証はありません。むしろ違う場所である可能性も相応にあります。 ・確実なのは絶対パスでの指定です。C:/とか/から書くということです。あるいは組み込みグローバル変数の__file__の値を拾ってスクリプトからの相対パスを作る方法もあります(検索すると色々出てきます。しかしJupyterにはあまり向いていないかもしれません)。
taga

2020/03/01 01:49

technocore さん,hayataka2049 さん, ご丁寧に説明していただきありがとうございます!! ファイルの指定方法には,カレントディレクトリから辿る方法や絶対パスを使用する方法があることを勉強させていただきました. ありがとうございましたm(_ _)m
guest

0

オープンする直前にカレントディレクトリを表示させたらどうなりますか?

import os
print(os.getcwd())
with open("sample_weight.pkl", 'rb') as f:

投稿2020/02/29 12:53

technocore

総合スコア7337

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taga

2020/02/29 15:18

technocore さん ご回答ありがとうございます. カレントディレクトリに"sample_weight.pkl"を移してからプログラムを実行すると 読み込むことができました.ありがとうございます! しかし,なぜカレントディレクトリではない,"sample_weight.pkl"が格納されているディレクトリに パスを通す方法ではファイルの読み取りができないのでしょうか??
guest

0

その出ているメッセージのとおり、そのファイルが存在しない、ということですから、その場所にそのファイルが存在するのかをチェックしてみてはどうでしょう

投稿2020/02/29 12:09

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taga

2020/02/29 12:27

y_waiwaiさん  回答ありがとうございます. 'C:\Users\taga\Documents\deep-learning-from-scratch-master\ch03' 内に"sample_weight.pkl"というファイルがあることは確認できています. そのうえで,エラーの原因に関してご教授いただければ幸いです.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問