与theano

时间:2016-03-30 19:12:04

标签: python numpy theano

这是我关于stackoverflow的第一个问题。希望它符合预期的格式。

我只是想创建一个计算矩阵和向量之间的点积的函数:

A = T.matrix()
B = T.vector()
C = T.dot(A,B)

a = numpy.array([[1,2],[3,4]])
b = numpy.array([[1],[0]])

f = function([A,B],C)

当我要求产品凹凸不平时,我没有问题。 numpy.dot(a,b)会返回我预期的array([[1],[3]])

但是当我向Theano询问f(a,b)时,我遇到了这个错误:TypeError: ('Bad input argument to theano function with name "<stdin>:1" at index 1(0-based)', 'Wrong number of dimensions: expected 1, got 2 with shape (2, 1).')

我的理解是,Theano打字期望我的Y被声明为向量,必然是1D。 因此,我尝试使用b = numpy.array([1,0])。也许theano会明白它必须是一个能够计算的列? 现在我得到的结果是array([[ 2., 2.],[ 4., 4.]]),这对我来说更是一个谜。

我发现了类似的主题,但没有一个我能理解的解释。我意识到这对你们很多人来说显而易见,但我很感激一只手!

1 个答案:

答案 0 :(得分:0)

键入以下内容时

b = numpy.array([1,0])

它内部创建的是一个形状为Rx1的列矩阵。这就是一般如何表示向量。

现在输入时,

b = numpy.array([[1],[0]])

然后将其传递给函数f,它会抛出一个错误,因为它期待一个Vector,并且您正在传递一个Matrix作为第二个参数。将B更改为类型矩阵,它工作正常。

所以,要么这样做: -

A = T.matrix() 
B = T.matrix()
C = T.dot(A,B)

a = numpy.array([[1,2],[3,4]])
b = numpy.array([[1], [0]])

f = function([A,B],C)

print f(a,b)

或者您可以将B视为矢量本身,并传递一个

的矢量
A = T.matrix()
B = T.vector()
C = T.dot(A,B)

a = numpy.array([[1,2],[3,4]])
b = numpy.array([1,0])

f = function([A,B],C)

print f(a,b)

希望这有帮助!