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

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

新規登録して質問してみよう
ただいま回答率
85.48%
機械学習

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

Python

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

Q&A

解決済

3回答

5009閲覧

ニューラルネットワークの推論処理のプログラムでエラーが出てしまいます。(ゼロから始めるdeepleraning)

achala

総合スコア27

機械学習

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

Python

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

0グッド

0クリップ

投稿2017/06/01 02:27

###前提・実現したいこと
オライリー・ジャパンの”ゼロから始めるdeeplearning”を使って機械学習を勉強しています。(現在3.6.2章です)

下記のソースコードを実行したところ, エラーメッセージが出てしまったのですが,
このエラーメッセージの意味と回避方法を教えていただきたいです。

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

Traceback (most recent call last): File "<stdin>", line 2, in <module> File "<stdin>", line 3, in predict KeyError: 'B1'

###該当のソースコード

python

1import numpy as np 2import pickle 3 4import sys, os 5sys.path.append(os.pardir) 6from dataset.mnist import load_mnist 7 8 9def sigmoid(x): 10 return 1/(1+np.exp(-x)) 11 12def getdata(): 13 (xtrain,ttrain), (xtest,ttest) = load_mnist(normalize = True, flatten = True, one_hot_label = False) 14 return xtest, ttest 15 16def initnetwork(): 17 with open("sample_weight.pkl", 'rb') as f: 18 network = pickle.load(f) 19 return network 20 21def predict(network, x): 22 W1, W2, W3 = network['W1'], network['W2'], network['W3'] 23 B1, B2, B3 = network['B1'], network['B2'], network['B3'] 24 a = np.dot(x, W1) + B1 25 A = sigmoid(a) 26 b = np.dot(A, W2) + B2 27 B = sigmoid(b) 28 y = np.dot(B. W3) + B3 29 Y = softmax(y) 30 return Y 31 32 33 34x, t = getdata() 35network = initnetwork() 36 37accuracycnt = 0 38 39for i in range(len(x)): 40 y = predict(network, x[i]) 41 p = np.argmax(y) 42 if p == t[i]: 43 accuracycnt += 1 44 45print("Accuracy:" + str(float(accuracycnt) / len(x)))

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

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

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

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

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

guest

回答3

0

ベストアンサー

この章では、筆者が事前に作成した学習済みのモデルのデータ(samble_weight.pkl)を使用する必要があったかと記憶しております。

書籍の公式のリポジトリ
https://github.com/oreilly-japan/deep-learning-from-scratch
よりソースコード一式を入手し、 ch03/ 以下に置かれている sample_weight.pklをお使いください。

投稿2017/06/01 23:57

magichan

総合スコア15898

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

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

achala

2017/06/02 01:38

ソースコード一式はダウンロードしてあり, コードはch03/に保存しており, 実行時もカレントディレクトリをch03/にしてから実行した結果, 上のようなエラーが出ています。
magichan

2017/06/02 02:08

そういうことでしたか失礼しました。 実際の確認しましたところ、sample_weight.pkl内のDictデータは、キーとして ['b1', 'b2', 'b3', 'W1', 'W2', 'W3'] が使用されておりました。よって B1, B2, B3 = network['B1'], network['B2'], network['B3'] の箇所は、大文字ではなく、小文字の 'b1','b2','b3'を使い B1, B2, B3 = network['b1'], network['b2'], network['b3'] とする必用がありそうです。 ついでに、上記の他にもエラーが2箇所ありましたので (1) 28行目の y = np.dot(B. W3) + B3 の部分にはタイプミス('.'ではなくて',') (2) softmax() 関数が定義されていない とりあえず commom/functions.py からコピー の修正で動作すると思います。
achala

2017/06/02 02:17

修正したら, テキストの通りの数値が出ました! カンマの打ち忘れ等の細かい修正も見つけていただきとても助かりました。 ありがとうございました。
guest

0

sample_weight.pklデータ内容が正しいか('B1'キーを含むデータか)を確認してください。

サンプルデータ確認したところ{'b3': array([-0.06023985,~でしたのでnetwork['B1']ではなくnetwork['b1']と修正してください。

投稿2017/06/01 04:03

編集2017/06/02 02:00
can110

総合スコア38266

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

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

achala

2017/06/02 01:48 編集

付属のデータを用いていたのですが, 含まれていないようでした…。 ありがとうございました。
can110

2017/06/02 01:50

print(network)すると確認できます。 こちらで確認したところ「{'b3': array([-0.06023985,~」となっていたので 「B1」ではなく「b1」とすべきでしょう。(大文字ではなく小文字)
achala

2017/06/02 02:10

変えてみたところ, 上記のエラーは出なくなりました。 ありがとうございました。
guest

0

辞書networkにキーが登録されていません。

python

1if 'B1' not in network:#辞書にkeyが登録されていなければTrueを返す 2 #ここはそちらで合う処理をしてください(例えばデバッグに使うなど)

投稿2017/06/01 03:06

_Victorique__

総合スコア1392

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

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

achala

2017/06/02 01:55

ありがとうございます。 処理について確認してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問