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

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

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

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

機械学習

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

Python

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

Q&A

解決済

3回答

1690閲覧

Python3 外部ディレクトリへのFileNotFoundの対処法について

HelpfulJp

総合スコア22

Python 3.x

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

機械学習

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

Python

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

0グッド

0クリップ

投稿2018/11/30 08:47

編集2018/11/30 13:15

メイン文からクラスのメンバ関数を呼び出したところ、
カレンとディレクトリでなく外部ディレクトリにあるファイルの指定に失敗しました。
sys.path.appendでパス設定を試みたのですがうまくいきませんでした。

どうしたらFileNotFoundに対処し外部ディレクトリファイルの準備ができるでしょうか。
参考URLでも御指摘くださると幸いです。

以下はメイン文、クラス、エラーの3つです。

メイン

Python

1from function import function 2import numpy as np 3 4x,t=function().get_data() 5network=function().init_network() 6 7accurancy_cnt=0 8for i in range(len(x)): 9 y=function().predict(network,x[i]) 10 p=np.argmax(y) 11if p==t[i]: 12 accurancy_cnt+=1 13print("Accurancy:"+str(float(accurancy_cnt)/len(x)))

クラス

Python

1from step_function import step 2import numpy as np 3import sys,os 4from networkx.algorithms.flow.networksimplex import network_simplex 5os.chdir('C:/pleiades\eclipse/deep-learning-from-scratch-master/dataset') 6sys.path.append(os.pardir) 7sys.path.append('C:/pleiades\eclipse/deep-learning-from-scratch-master/ch03') 8from dataset.mnist import load_mnist 9import pickle 10from PIL import Image 11 12class function: 13 def get_data(self): 14 (x_train, t_train),(x_test, t_test)=load_mnist(flatten=True, normalize=True,one_hot_label=False) 15 return x_test,t_test 16 17 def init_network(self): 18 with open("sample_wight.pkl",'rb')as f: 19 20 network=pickle.load(f) 21 return network 22 23 def predict(self,network,x): 24 W1,W2,W3=network['W1'],network['W2'],network['W3'] 25 b1,b2,b3=network['b1'],network['b2'],network['b3'] 26 27 28 a1=np.dot(x,W1)+b1 29 z1=step.sigmoid(a1) 30 a2=np.dot(z1,W2)+b2 31 z2=step.sigmoid(a2) 32 a3=np.dot(z2,W3)+b3 33 y=step.softmax(a3) 34 return y
Traceback (most recent call last): File "C:\Users\~~\Desktop\A_Cognitive\Ministop_Cognitive\execute.py", line 5, in <module> network=function().init_network() File "C:\Users\~~\Desktop\A_Cognitive\Ministop_Cognitive\function.py", line 18, in init_network with open("sample_wight.pkl",'rb')as f: FileNotFoundError: [Errno 2] No such file or directory: 'sample_wight.pkl'

※ディレクトリのユーザー名は~~で伏せてあります。

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

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

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

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

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

morinatsu

2018/11/30 12:52

エラーメッセージは「FileNotFound」ですが、なぜインポートに失敗したと判断されましたか?
HelpfulJp

2018/11/30 13:16 編集

ご指摘ありがとうございます。インポートエラーでないのに、誤ってその言葉を使ってしまいました。失礼ながら勉強不足で伝え方がわからなかったのですが「FileNotFoundの対処法について」と書き直すのが良いでしょうか。私見ですが、ただちに訂正してみます。
morinatsu

2018/11/30 13:21

なるほど。「sample_wight.pkl」のある外部ディレクトリ込みで指定すれば解決しそうな問題ですが、そうしなかった理由はありますか。
HelpfulJp

2018/11/30 13:44 編集

恥ずかしながら単純に方法がわからず、文献も何を参考にすれば良いかも知らなかったからできませんでした。ほとんどのweb文献が相対パスの説明で理解できず、また絶対パスをどこに当てはめれば良いのか基礎がわかっていません。
morinatsu

2018/12/01 00:17

hayataka2049さんの回答の通り、絶対パスで指定するのが良いと思います。ご覧になった記事で相対パスが使われているのは、同じソースを他の場所で使う時の便宜のためなので。
guest

回答3

0

当面の解決、今あるコードを動かしたいということであれば、hayataka2049さんが既に回答されている通り、絶対パスで指定するのが良いと思います。

ご覧になった記事で相対パスが使われているのは、同じソースを他の場所で使う時の便宜のためです。
ソースの格納場所を他の場所に移動したいなど、他のことを試したくなったときに改めて、相対参照やos.pathライブラリなどの勉強をされれば良いと思います。

投稿2018/12/01 00:26

morinatsu

総合スコア395

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

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

0

ベストアンサー

sys.path.appendはimport pathへの追加ですから、ファイルを開く際のパスとは関係ありません。

頻繁に移動するものでなければ、絶対パスでファイルを指定するのが簡単です。

投稿2018/11/30 13:39

hayataka2049

総合スコア30933

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

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

HelpfulJp

2018/12/02 03:55 編集

回答ありがとうございます。もしかすると、 with open("sample_weight.pkl",'rb')as f: の .pklファイルの絶対パスの指定だけでよかったのでしょうか? 一応このページに、自己解決の回答のコードのように 私なりに書き直したら動きました。カレントディレクトリを 移動してappendしたのですが移動させる必要はあるのか違和感を 感じました。 with open(~~,~~)のところで絶対パスを指定すればよかったのか、 その他に良い方法はあったのか御指摘くださると幸いです。
hayataka2049

2018/12/02 04:22

そういうことです。openのときに絶対パスで書けばカレントディレクトリの移動は不要です(あとsys.path.appendはどちらにせよ不要です)
hayataka2049

2018/12/02 04:24

ディレクトリ構造を把握していないのでもしかしたら間違ってるかもですが、  with open('C:/pleiades\eclipse/deep-learning-from-scratch-master/ch03/sample_weight.pkl','rb')as f: ですかね
HelpfulJp

2018/12/02 15:08

はい、そのパスで合ってます。 お陰さまで僅かですが、 パスのことようやく理解できました。 もうすこしos.pathを実践して 身に付けてみます。 ありがとうございます。
guest

0

書き方として良いかはわかりませんが、
回答くださった方のos.pathを学べという
御指摘より色々試したら導入できました。

以下はメイン1つ、クラス2つのコードになります。

メイン文

from function import function import numpy as np import os x,t=function().get_data() network=function().init_network() accurancy_cnt=0 for i in range(len(x)): y=function().predict(network,x[i]) p=np.argmax(y) if p==t[i]: accurancy_cnt+=1 print("Accurancy:"+str(float(accurancy_cnt)/len(x))) print("Accurancy:"+str(accurancy_cnt))

functionクラス文(データの読み込みと分類)

functionクラス文(データの読み込みと分類)

1from step_function import step 2import numpy as np 3import sys,os 4from networkx.algorithms.flow.networksimplex import network_simplex 5os.chdir('C:/pleiades\eclipse/deep-learning-from-scratch-master/dataset') 6sys.path.append(os.pardir) 7from dataset.mnist import load_mnist 8os.chdir('C:/pleiades\eclipse/deep-learning-from-scratch-master/ch03') 9sys.path.append(os.pardir) 10 11import pickle 12from PIL import Image 13 14class function: 15 def get_data(self): 16 (x_train, t_train),(x_test, t_test)=load_mnist(flatten=True, normalize=True,one_hot_label=False) 17 return x_test,t_test 18 19 def init_network(self): 20 with open("sample_weight.pkl",'rb')as f: 21 network=pickle.load(f) 22 return network 23 24 def predict(self,network,x): 25 W1,W2,W3=network['W1'],network['W2'],network['W3'] 26 b1,b2,b3=network['b1'],network['b2'],network['b3'] 27 28 a1=np.dot(x,W1)+b1 29 z1=step().sigmoid(a1) 30 a2=np.dot(z1,W2)+b2 31 z2=step().sigmoid(a2) 32 a3=np.dot(z2,W3)+b3 33 y=step().softmax(a3) 34 return y

step_function文(活性化関数)

step_function文(活性化関数)

1import numpy as np 2 3class step: 4 5 def step_funtion(self,x): 6 return np.array(x > 0, dtype=np.int) 7 8 def sigmoid(self,x): 9 return 1 / (1 + np.exp(-x)) 10 11 def relu(self,x): 12 return np.maximum(0,x) 13 14 def identity_function(self,x): 15 return x 16 17 def softmax(self,x): 18 c=np.max(x) 19 exp_a=np.exp(x-c) 20 sum_exp_a=np.sum(exp_a) 21 y=exp_a/sum_exp_a 22 return y

出力結果

range(0, 10000) Accurancy:0.9352 Accurancy:9352

投稿2018/12/02 03:23

編集2018/12/02 03:53
HelpfulJp

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問