我正在关注Theano的v0.8版本中的tutorial。
它包含一个创建&的例子。训练逻辑回归如下所示:
rng = np.random
N = 400 # training sample size
feats = 784 # number of input vars
D = (rng.randn(N, feats), rng.randint(size=N, low=0, high=2)) # generate a dataset
training_steps = 10000
x, y = T.matrix('x'), T.matrix('y')
w = theano.shared(rng.randn(feats), name='w') # init a weight vector randomly
b = theano.shared(0., name='b') # init bias variable
# both w and b are 'shared'
print "logistic regression: initial model:"
print w.get_value()
print b.get_value()
# build expression graph
p_1 = 1/(1+T.exp(-T.dot(x,w)-b)) # Probability that target = 1
prediction = p_1 > 0.5 # prediction threshold
xent = -y * T.log(p_1) - (1-y) * T.log(1-p_1) # Cross-entropy loss function
cost = xent.mean() + 0.01 * (w ** 2).sum() # The cost to minimize
gw, gb = T.grad(cost, [w, b]) # Cost gradient = func(w,b)
train = theano.function( # compile training function
inputs=[x,y],
outputs=[prediction, xent],
updates=((w, w - 0.1 * gw), (b, b - 0.1 * gb)))
predict = theano.function(inputs=[x], outputs=prediction)
for i in range(training_steps): # do the training
pred, err = train(D[0], D[1])
Theano发出以下错误:
TypeError :('带有名字的theano函数的错误输入参数 “./tut.py:206”在索引1(从0开始)','维数错误: 预期2,得到1的形状(400,)。')
我有理由相信这个解决方案很简单(由于我在Theano的新身份),并且可能涉及重塑步骤。该教程没有很好的提示。建议?
答案 0 :(得分:1)
尝试在theano函数中使用它之前重塑D[1]
,也许就是这样(我没有尝试过,告诉我它是否有效):
pred, err = train(D[0], np.reshape(D[1],(400,1))
错误发生是因为您使用D[1]
在一维数组中初始化rng.randint(size=N, low=0, high=2)
,但它传递给矩阵(二维)变量y
或
另一个简单的解决方案是使用向量而不是矩阵来表示变量y
:
y = T.vector("y")