theano 的点积维度问题

Dot product dimension issue with theano

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

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

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 时,我没有遇到任何问题。 numpy.dot(a,b) returns 我的预期 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 声明为向量必须是一维的。 因此,我尝试使用 b = numpy.array([1,0]) 代替。也许 theano 会明白它必须是一个列才能计算? 现在我得到的结果是array([[ 2., 2.],[ 4., 4.]]),这对我来说更是一个谜。

我找到了类似的主题,但 none 有一个我能理解的解释。我知道这对你们中的许多人来说一定很明显,但我很感激您的帮助!

当您键入以下内容时

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)

希望对您有所帮助!