前提
pythonでニューラルネットワークを作り学習させるコードです。
実現したいこと
対象行で行列同士の内積を取りたい
発生している問題・エラーメッセージ
ValueError: operands could not be broadcast together with shapes (3,2) (3,3) (3,2)
該当のソースコード
python
1input_teacher = np.array([[0,0,-1],[0,1,-1],[1,0,-1],[1,1,-1]]) 2output_teacher = np.array([[0,1,1,0]]).T 3w1 = 2*np.random.random((3,2))-1 4w2 = 2*np.random.random((3,1))-1 5 6def sigmoid_der(x): 7 return sigmoid(x)/(1-sigmoid(x)) 8 9def d2_1(x,o,t): 10 return sigmoid_der(x)*(o-t) 11 12def d1_1(d,x): 13 return sigmoid_der(x)*(d @ w2.T) 14 15for i in range(1): 16 a=sigmoid(input_teacher @ w1) 17 a=np.hstack((a,[[-1]]*len(a))) 18 out=sigmoid(a @ w2) 19 d21=d2_1(out,output_teacher,out) 20 d11=d1_1(d21,a) 21 print(input_teacher.T) 22 print(d11) 23 w1+=input_teacher.T @ d11 24 w2+=a.T @ d21
上記コードの下から二行目でエラーが起きています。
試したこと
.Tを消して試しましたがそうすると揃っていないとエラーが出るのでこうするしかないです。
補足情報(FW/ツールのバージョンなど)
jupyter notebook
エラーは一部分ではなくどこで発生したかなど分かるように全文を記載ください。
そのうえで「対象行で行列同士の内積を取りたい」とのことですが
- それはコード上のどこで行っているのか?
- 対象行とはどれなのか?
- 行列同士とはそれぞれどれなのか?
-具体的なデータ例において 期待する結果はどのようなものなのか?
などを記載ください。
「下から二行目」と記載してあると思うのですが、、、
すみません、質問文を読んで「対象行」が「エラーの発生する行」とは気づきませんでした。
あとは具体的なデータ例において 期待する結果はどのようなものなのか?
の提示をお願いします。
> a=sigmoid(input_teacher @ w1)
上記で「NameError: name 'sigmoid' is not defined」が発生し「下から二行目」まで到達出来ません。
「行列同士の内積が計算できない」のではなく
3行2列の w1 に input_teacher.T @ d11 結果の3行3列の足し算ができないのでは?
なお @ 演算は行列乗算です。
2次元であれば内積結果と一致しますが、3次元以上では内積値と一致しないでしょうね。
input_teacher.T @ d11 は問題ないのですが、w1 と input_teacher.T @ d11 のshape が異なるので加算ができません。
w1.shape => (3, 2)
(input_teacher.T @ d11).shape => (3, 3)
ほんとだ.....内積の結果が3x3になるのですね.....上手いこと内積の結果3x1にならないですかね.....おそらくそもそもその前のコードが間違えてるのかな....

あなたの回答
tips
プレビュー




