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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

4回答

29860閲覧

どう見ても存在するファイルがNotFound

moscow3

総合スコア201

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

1クリップ

投稿2018/09/26 11:30

写真のような感じで、どう見ても同階層にファイルが存在するのに、
FileNotFoundError: [Errno 2] No such file or directory: 'sample_weight.pkl'
のエラーが出ます。

イメージ説明

ソースコード

python

1# coding: utf-8 2import numpy as np 3import pickle 4from mnist import load_mnist 5 6def sigmoid(x): 7 return 1 / (1 + np.exp(-x)) 8 9def softmax(x): 10 if x.ndim == 2: 11 x = x.T 12 x = x - np.max(x, axis=0) 13 y = np.exp(x) / np.sum(np.exp(x), axis=0) 14 return y.T 15 16 x = x - np.max(x) # オーバーフロー対策 17 return np.exp(x) / np.sum(np.exp(x)) 18 19 20def get_data(): 21 (x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, flatten=True, one_hot_label=False) 22 return x_test, t_test 23 24 25def init_network(): 26 with open("sample_weight.pkl", 'rb') as f:#問題の箇所 27 network = pickle.load(f) 28 return network 29 30 31def predict(network, x): 32 W1, W2, W3 = network['W1'], network['W2'], network['W3'] 33 b1, b2, b3 = network['b1'], network['b2'], network['b3'] 34 35 a1 = np.dot(x, W1) + b1 36 z1 = sigmoid(a1) 37 a2 = np.dot(z1, W2) + b2 38 z2 = sigmoid(a2) 39 a3 = np.dot(z2, W3) + b3 40 y = softmax(a3) 41 42 return y 43 44 45x, t = get_data() 46network = init_network() 47accuracy_cnt = 0 48for i in range(len(x)): 49 y = predict(network, x[i]) 50 p= np.argmax(y) # 最も確率の高い要素のインデックスを取得 51 if p == t[i]: 52 accuracy_cnt += 1 53 54print("Accuracy:" + str(float(accuracy_cnt) / len(x)))

(ゼロから始めるディープラーニング より)

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

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

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

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

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

guest

回答4

0

ベストアンサー

ファイル名が間違っていないのならば、カレントディレクトリが違うのでしょう。
open("sample_weight.pkl", 'rb')は、ソースプログラムと同じディレクトリのsample_weight.pklを開くんじゃなくて、カレントディレクトリのsample_weight.pklを開きます。

投稿2018/09/26 11:36

otn

総合スコア84529

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

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

moscow3

2018/09/26 12:01

なるほど。 VSコードではカレントディレクトリがソースプログラムのディレクトリと同じとは限らないのですね。 そのうえで質問なのですが、コードはどのように書けばいいのでしょうか? コマンドラインでたたいたところうまくいったので、単純にファイル名に ch3/ とつければいいという問題でもない気はするのですが。
otn

2018/09/26 12:10

os.path.dirname(os.path.abspath(__file__))) で、スクリプトファイルのディレクトリが分かるので、それ+"/sample_weight.pkl" で。
guest

0

カレントディレクトリがDeepLearningなので、
deep-learning-from-scratch-master/ch03/sample_weight.pklを開く必要があるのでは?

投稿2018/09/26 11:35

LouiS0616

総合スコア35660

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

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

0

参考情報

  • Python open() requires full path

https://stackoverflow.com/questions/44426569/

...
import os
# Look to the path of your current working directory
working_directory = os.getcwd()
file_path = working_directory + 'my_file.py'
...
import os
# Look for your absolute directory path
absolute_path = os.path.dirname(os.path.abspath(file))
file_path = absolute_path + '/folder/my_file.py'
...

fullpath でなくても cwd を把握していれば、そこからの相対パスで指定することも可能です。

あるいはプログラムの中で "./testtesttest.txt" などのような他にはなさそうな名前でファイルを作成してみて、実際にどこにそのファイルができたかを調べることで "." がどこを指しているか確認するのもよいかもしれません。

投稿2018/09/26 12:23

編集2018/09/26 12:24
katoy

総合スコア22324

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

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

0

質問や別の方の回答やコメントから推察して検索していたら便利そうなものを見つけたのでご参考までに。
Pythonで実行ファイルの場所(パス)を取得する__file__

Python3

1import os 2 3print('getcwd: ', os.getcwd()) 4print('__file__: ', __file__) 5

出力結果

getcwd: C:\workspace\Python\memo __file__: C:\workspace\Python\memo\sample.py

投稿2018/09/26 12:11

opyon

総合スコア1009

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

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

otn

2018/09/26 12:18

__file__ って、実行の仕方によっては相対パスなので、そのあたりの考慮が要るかも。条件によっては要らないかも。
opyon

2018/09/26 12:19

そうですね。 とりあえずこんなサンプルあるのでリンク先見ればやりたいこと出来ると思いますってつもりでした。
otn

2018/09/26 12:21

はい。両方使えば出来ますね。
opyon

2018/09/26 12:23

os.path.dirname(os.path.abspath(__file__))) と同じコードもリンク先にそのままありました。 リンク見ないで回答出来るって流石です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問