如何修复Theano v0.8教程代码中的维度错误

时间:2016-03-29 21:00:49

标签: python theano

我正在关注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的新身份),并且可能涉及重塑步骤。该教程没有很好的提示。建议?

1 个答案:

答案 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")