

エラーが出ていてどこを直しせばいいのかわかりません、おそらく55行目からのfor文ないを訂正すればよいと思うのですが。

[code]

    import sys, os
    import numpy as np
    sys.path.append(os.pardir)
    from dataset.mnist import load_mnist
    import pickle
    from common.functions import sigmoid, softmax
    
    
    # テスト用のデータを出力する関数を作成
    def get_data():
        # MNISTデータセットを読み込み
        (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("./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']
        
        # 第1層の計算
        a1 = np.dot(x, W1) + b1 # 重み付き和
        z1 = sigmoid(a1) # 活性化
        
        # 第2層の計算
        a2 = np.dot(z1, W2) + b2 # 重み付き和
        z2 = sigmoid(a2) # 活性化
        
        # 第3層の計算
        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)))
    
[/code]

エラーの内容

[code]

    Traceback (most recent call last):
      File "c:\deep-learning-from-scratch-master\3.6.2.py", line 56, in <module>
        y = predict(network, x[i])
      File "c:\deep-learning-from-scratch-master\3.6.2.py", line 30, in predict
        W1, W2, W3 = network['W1'], network['W2'], network['W3']
    TypeError: 'function' object is not subscriptable
    
[/code]


CC BY-SA 4.0
2022-04-16T09:01:21.943
88355
2022-04-16T09:59:02.373
2022-04-16T09:05:50.920
3060
52250
question
python python3
ゼロから作るディープラーニング１からの質問　エラーの箇所を修正したい


問題は2点あると思われます。  
発生しているエラーそのものは以下の2つ目が原因で、関数を呼び出した結果の戻り値を代入すべきところが、関数オブジェクトを代入しているからですね。  
それが`TypeError: 'function' object is not subscriptable`というエラーにつながる間違いです。

誤：

[code]

    # 学習済みのパラメータを読み込む関数を実装
    def init_network():
        
        # 学習済みのパラメータの読み込み
        with open("./deep-learning-from-scratch-master/ch03/sample_weight.pkl", 'rb') as f:
            network = pickle.load(f)
            
            # 学習済みパラメータを格納したディクショナリを出力
            return network
    
[/code]

正：`return`のインデントが違うので1段戻す

[code]

    # 学習済みのパラメータを読み込む関数を実装
    def init_network():
        
        # 学習済みのパラメータの読み込み
        with open("./deep-learning-from-scratch-master/ch03/sample_weight.pkl", 'rb') as f:
            network = pickle.load(f)
        
        # 学習済みパラメータを格納したディクショナリを出力
        return network
    
[/code]

* * *

誤：

[code]

    # 学習済みパラメータを取得
    network=init_network
    
[/code]

正：`()`を付けて関数を呼び出した結果を代入する

[code]

    # 学習済みパラメータを取得
    network=init_network()
    
[/code]

* * *

ちなみにこちらにソースコードが格納されています。  
[deep-learning-from-
scratch/ch03/neuralnet_mnist.py](https://github.com/oreilly-japan/deep-
learning-from-scratch/blob/master/ch03/neuralnet_mnist.py)


CC BY-SA 4.0
2022-04-16T09:59:02.373
88356
2022-04-16T09:59:02.373
26370
88355
answer