配列と行列の掛け算について質問です。
3層のニューラルネットワークを作っていたのですが、
0層から1層目のA1
のshapeが(3,)
になっていることからわかる通り、
A1
は要素3個の1次元配列((2,)×(2, 3)
)となっています。
行列×配列の公式をググっても見つからなかったので、
↑の式を「列と行の要素がそろった部分((2,)
と(2,3)
のうちの(2)
)の部分が消えて3
のみが残るので1次元配列になる」と解釈していました。)
ですが、1層目から2層目の出力結果を見てみると
A2
は**(1, 2)の2次元配列**となっていました((3,)×(3, 2)
)
なぜ2層目からは2次元配列となるのでしょうか?
import numpy as np def sigmoid(x): return np.array(1 / (1 + np.exp(-x))) # 0層目(入力層)から1層目(中間層)の実装例 X = np.array([1,2]) w1 = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]]) b1 = np.array([0.1,0.2,0.3]) A1 = np.dot(X,w1)+b1 Z1 = sigmoid(A1) # 1-2 w2 = np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]]) b2 = np.array([[0.1,0.2]]) A2 = np.dot(Z1,w2)+b2 Z2 = sigmoid(A2) # 2-3 def identity_function(x): return x w3 = np.array([[0.1,0.3],[0.2,0.4]]) b3 = np.array([[0.1,0.2]]) A3 = np.dot(Z2,w3)+b3 Z3 = identity_function(A3)
各変数のshape
X.shape: (2,) w1.shape: (2, 3) A1.shape: (3,) --------------------------- Z1.shape: (3,) w2.shape: (3, 2) A2.shape: (1, 2) --------------------------- (1, 2) (2, 2) (1, 2) Z3: [[0.32403126 0.71230655]]
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/31 11:37 編集
2020/03/31 11:48 編集
2020/03/31 11:50