在theano中,我想创建一个可以采用几种不同输入的函数,例如矩阵和向量。
通常我会做这样的事情:
import theano
import numpy
x = theano.tensor.matrix(dtype=theano.config.floatX)
y = 3*x
f = theano.function([x],y)
然而,当我输入向量而不是矩阵时,例如:
f(numpy.array([1,2,3]))
然后我得到尺寸不匹配的错误:'维数错误:预期为2,得到1有形状(3,)。'
有没有办法在theano中定义一个更通用的输入符号,它可以采用矩阵,但也可以使用不同形状的数组,如矢量或三维数组,仍可以使用?
感谢。
答案 0 :(得分:4)
编译Theano函数时必须固定维数。编译过程的一部分是选择取决于维数的操作变体。
你总是可以为高维张量编译函数,只需叠加你的输入,使它们具有所需的形状。
所以
x = theano.tensor.tensor3()
y = 3*x
f = theano.function([x],y)
将接受这些
f(numpy.array([[[1,2]]])) # (1,1,3) vector wrapped as a tensor3
f(numpy.array([[[1,2],[3,4]]])) # (1,2,2) matrix wrapped as a tensor3
f(numpy.array([[[1,2],[3,4]],[[5,6],[7,8]]])) # (2,2,2) tensor3