我试图通过神经网络使用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