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

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

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

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

Q&A

解決済

1回答

1859閲覧

ゼロから作るdeeplearningでファイルがうまく読み込めない

Hin03

総合スコア14

Python 3.x

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

0グッド

0クリップ

投稿2020/05/10 07:28

編集2020/05/10 07:30

ご覧いただきありがとうございます。
助けてくださると大変嬉しいです。

サンプルコードをコピペしているがエラーをはく

ゼロから作るdeeplearningの第3章にて、pklファイルを読み込むために絶対パスで指定したのですが、
その後のpredict関数でエラーをはくようになりました。

# coding: utf-8 import os import pickle import sys sys.path.append(os.pardir) # パスに親ディレクトリ追加 import numpy as np from python.dataset.mnist import load_mnist from python.common.functions import sigmoid, softmax from PIL import Image print(sys.version) #ニューラルネット 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('/Users/hinak/Desktop/python/cp3/sample_weight.pkl','rb') as f: network = pickle.load(f) 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)))

エラーメッセージ

Traceback (most recent call last): File "/Users/hinak/Desktop/python/cp3/doukana.py", line 41, in <module> y = predict(network, x[i]) File "/Users/hinak/Desktop/python/cp3/doukana.py", line 24, in predict W1, W2, W3 = network['W1'], network['W2'], network['W3'] TypeError: 'NoneType' object is not subscriptable

私としましては、やはりファイルの読み込みがうまく行ってないのではと考えています。
そのほかにも、sample_weight.pklファイルをatomで開くと文字化けしていることが原因ではないかと思います。

ちなみに、上記のpyファイルとsample_weight.pklファイルは同じディレクトリにいます。

どなたかご教授願えませんでしょうか。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

init_networ関数にて戻り値を記載するのを忘れていたため、predict関数でエラーが起きていました。

正しくは以下の通りでした。

def init_network(): with open('/Users/hinak/Desktop/python/cp3/sample_weight.pkl','rb') as f: network = pickle.load(f) return network

初歩的なミスで時間が溶けました(;o;)

投稿2020/05/10 07:50

Hin03

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問