我試圖通過神經網絡使用python中的Theano庫實現AND
操作。這裏是我的代碼:ValueError:Theano中的尺寸不匹配錯誤
import theano
import theano.tensor as T
import numpy as np
import matplotlib.pyplot as plt
#Define variables:
x = T.matrix('x')
w1 = theano.shared(np.random.uniform(0,1,(3,3)))
w2 = theano.shared(np.random.uniform(0,1,(1,3)))
learning_rate = 0.01
#Define mathematical expression:c for forward pass
z1 = T.dot(x,w1)
a1 = 1/(1+T.exp(-z1))
z2 = T.dot(a1,w2.T)
a2 = 1/(1 + T.exp(-z2))
#Let’s determine the cost as follows:
a_hat = T.vector('a_hat') #Actual output
cost = -(a_hat*T.log(a2) + (1-a_hat)*T.log(1-a2)).sum()
dw2,dw1 = T.grad(cost,[w2,w1])
train = theano.function(
inputs = [x,a_hat],
outputs = [a2,cost],
updates = [
[w1, w1-learning_rate*dw1],
[w2, w2-learning_rate*dw2]
]
)
#Define inputs and weights
inputs = np.array([
[0, 0],
[0, 1],
[1, 0],
[1, 1]
])
inputs = np.append(np.ones((inputs.shape[0],1)), inputs, axis=1)
outputs = np.array([0,0,0,1]).T
#Iterate through all inputs and find outputs:
cost = []
for iteration in range(30000):
pred, cost_iter = train(inputs, outputs)
cost.append(cost_iter)
我無法追溯錯誤ValueError: Dimension mismatch; shapes are (*, *), (*, 4), (4, 1), (*, *), (*, 4), (4, 1) Apply node that caused the error:
。即使我更改權重向量w1
和w2
的維度,錯誤仍然保持不變。我是Theano的新手,對調試知之甚少。 有人可以幫我嗎? 謝謝。
感謝FO你的迴應。我已經通過'outlace'教程。我發現[這一個](https://www.analyticsvidhya.com/blog/2016/04/neural-networks-python-theano/)對theano的理解很有幫助。我知道'dim dimmatch'問題在那裏,但'代碼中的哪一行導致問題'會有幫助。 – chandresh
明天我會努力工作,當我有時間時,我會盡快給您答覆,希望 – Axel
謝謝阿克塞爾。這是我做了什麼來擺脫那個錯誤。我將'z2 = T.dot(a1,w2.T)'改爲'z2 = T.dot(w2,a1.T)'。有效。我不知道如何考慮矩陣向量乘法來解決'尺寸不匹配'問題。 – chandresh