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

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

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

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

Q&A

解決済

1回答

6488閲覧

絶対パスだと通るのに、sys.path.append(os.pardir)だと通らない。

toyota

総合スコア12

Python 3.x

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

1グッド

0クリップ

投稿2019/01/27 07:56

前提・実現したいこと

ゼロから作るDeep Learningの手書き数辞認識(MNISTデータセットのニューラルネットワーク
推論処理)のサンプルソースの確認中に、サンプルソースの通りのsys.path.append(os.pardir)宣言では通りません。
以下のエラーメッセージがでます。

エラーメッセージ

True


FileNotFoundError Traceback (most recent call last)
<ipython-input-189-45e70ceb6e1d> in <module>()
41
42 x, t = get_data()
---> 43 network = init_network()
44 accuracy_cnt = 0
45 for i in range(len(x)):

<ipython-input-189-45e70ceb6e1d> in init_network()
20
21 def init_network():
---> 22 with open("sample_weight.pkl", 'rb') as f:
23 # with open("/Users/oosak/Anaconda3/deep-learning-from-scratch-master/ch03/sample_weight.pkl", 'rb') as f:
24 network = pickle.load(f)

FileNotFoundError: [Errno 2] No such file or directory: 'sample_weight.pkl'

言語名 Pyton3

ソースコード

注釈 coding: utf-8
import sys, os

print(os.path.isfile("/Users/oosak/Anaconda3/deep-learning-from-scratch-master/ch03/sample_weight.pkl"))

sys.path.append(os.pardir) # 親ディレクトリのファイルをインポートするための設定

import numpy as np
import pickle
from dataset.mnist import load_mnist
from common.functions import sigmoid, softmax

def get_data():
(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, flatten=True, one_hot_label=False)
return x_test, t_test

def init_network():
with open("sample_weight.pkl", 'rb') as f:

試した部分 with open("/Users/oosak/Anaconda3/deep-learning-from-scratch-master/ch03/sample_weight.pkl", 'rb') as f:

network = pickle.load(f) return network

def predict(network, x):
W1, W2, W3 = network['W1'], network['W2'], network['W3']
b1, b2, b3 = network['b1'], network['b2'], network['b3']

a1 = np.dot(x, W1) + b1 z1 = sigmoid(a1) a2 = np.dot(z1, W2) + b2 z2 = sigmoid(a2) a3 = np.dot(z2, W3) + b3 y = softmax(a3) return y

x, t = get_data()
network = init_network()
accuracy_cnt = 0
for i in range(len(x)):
y = predict(network, x[i])
p= np.argmax(y) # 最も確率の高い要素のインデックスを取得
if p == t[i]:
accuracy_cnt += 1

print("Accuracy:" + str(float(accuracy_cnt) / len(x)))

試したこと

'sample_weight.の絶対パスを調べてファイル存在もTrueで確認して、ソース内に直に指定すると通ります。
また、より確実であろうと思って、sys.path.append("/Users/oosak/Anaconda3/deep-learning-from-scratch-master/ch03/)でも通りませんでした。

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

ここにより詳細な情報を記載してください。

cmbnur👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

sys.pathはモジュールのimport時に使用されるパスであり、ファイルopenなどとはまったく関係ありません。

開きたいファイルは絶対パスで記述するか、実行時カレントディレクトリからの相対パスで書いてください。

投稿2019/01/27 08:04

hayataka2049

総合スコア30933

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

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

toyota

2019/01/27 08:20

ありがとうございます。てっきり全体に指定できると思い込んでしました。試した方法でよかったのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問