ゼロから作るDeep Learningの3章3.4.3の説明
下記のページの説明で変数「network」は辞書形式で定義されていると思います。
この内容は容易に理解できます。
実装まとめ
Python
1 def init_network(): # """重みとバイアスの初期化""" 2 network = {} 3 network['W1'] = np.array([[.1, .3, .5], [.2, .4, .6]]) 4 network['W2'] = np.array([[.1, .4], [.2, .5], [.3, .6]]) 5 network['W3'] = np.array([[.1, .3], [.2, .4]]) 6 network['b1'] = np.array([.1, .2, .3]) 7 network['b2'] = np.array([.1, .2]) 8 network['b3'] = np.array([.1, .2]) 9 10 return network 11 12 def forward(network, x): # """入力信号が出力へと変換されるプロセス""" 13 W1, W2, W3 = network['W1'], network['W2'], network['W3'] 14 b1, b2, b3 = network['b1'], network['b2'], network['b3']
ゼロから作るDeep Learningの3章3.6.2のニューラルネットワークの推論処理では
構造は同じようですが、何処にもnetworkを辞書で初期化してなくて、なぜ、このように記述して
実行して結果ができるのがわかりません。理由を教えてください。お願いします。
pickle.load(f)関数のソースをみてもピンときませんでした。
Python
1 import sys, os 2 sys.path.append(os.pardir) # 親ディレクトリのファイルをインポートするための設定 3 import numpy as np 4 import pickle 5 from dataset.mnist import load_mnist 6 from common.functions import sigmoid, softmax 7 8 def get_data(): # """学習データのロード""" 9 (x_train, t_train), (x_test, t_test) = \ 10 load_mnist(normalize=True, flatten=True, one_hot_label=False) 11 return x_test, t_test 12 13 def init_network(): # """sample_weight.pklに保存された学習済み重みパラメータの読み込み""" 14 with open("sample_weight.pkl", 'rb') as f: 15 network = pickle.load(f) 16 17 return network 18 19 def predict(network, x): 20 W1, W2, W3 = network['W1'], network['W2'], network['W3'] 21 b1, b2, b3 = network['b1'], network['b2'], network['b3']
ちょっと読むのが困難なので、https://teratail.com/tour を参考にシンタックスハイライト・マークダウンでコードを囲い見やすくしてください。
sample_weight.pklは書籍の著者などが提供しているものですか?
見やすくするように編集します。ご指摘のpklは、そのようで、以下のGitHubから提供されています。
https://github.com/oreilly-japan/deep-learning-from-scratch/tree/master/ch03
書籍内の説明では、init_network()では、pickleファイルのSample_Weight.Pklに保存された学習済みの
重みパラメーターを読み込みます。このファイルには、重みとバイアスのパラメーターがディクショナリ型の変数として保存されていると説明されています。
私の疑問はなぜ、init_network()内で以下のような空の辞書設定と”W1”などのキーに値の要素を入れる記述がないのかが理解できなくて質問しました。
network = {}
network['W1'] = np.array([[.1, .3, .5], [.2, .4, .6]])
network['W2'] = np.array([[.1, .4], [.2, .5], [.3, .6]])
network['W3'] = np.array([[.1, .3], [.2, .4]])
network['b1'] = np.array([.1, .2, .3])
network['b2'] = np.array([.1, .2])
network['b3'] = np.array([.1, .2])
解決したとしても質問は編集しましょう
編集したつもりです。
これでは不足だとしたら、もし可能であれば、編集の手法を砕いて説明ください
質問のソースがまともに読めている、というのはつまりPythonのコードにとって大事になるインデントがまともにあるように見えていますか?
https://teratail.com/tour#animateBox2 のシンタックスハイライト・マークダウンの項、 https://teratail.com/tour のhttps://teratail.com/help#about-template のコードを入力の部分、 https://teratail.com/help/question-tips#questionTips3-5-1 のソースコードを書きましょうの項、前提としてのマークダウンについて調べるなどなど、色々と見るべきところはあるはずです。
https://teratail.com/help#about-teratail の
価値のあるコンテンツを世の中に残し届ける事を目的としています。
なども参考にお願いします。
インテントは、抜けている事は修正必要ですね。コピペだと、インテントが抜けてしまったようです。修正します
"コピペだとインテントが抜ける"のではありません。
コードがちゃんと表示されるような記法を使ってください。
```で行の前後を括るか、コード部分を選択して <code> というボタンを押してみてください。
インテントやコメントの位置を正しく合わせたのですが、更新すると頭が面一になります。なぜでしょう?
編集モードでは正しく表記されてますが・・・・
わかりました使い方
いろいろありがとうございました。
回答1件
あなたの回答
tips
プレビュー