可以在python中获取不同形状的输入数组的Theano函数

时间:2015-06-26 19:35:17

标签: python function input theano

在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中定义一个更通用的输入符号,它可以采用矩阵,但也可以使用不同形状的数组,如矢量或三维数组,仍可以使用?

感谢。

1 个答案:

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