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

Theano function that can take input arrays of different shapes in python

在 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]))

然后我得到尺寸不匹配的错误:'Wrong number of dimensions: expected 2, got 1 with shape (3,).'

有什么方法可以在 theano 中定义一个更通用的输入符号,它既可以接受矩阵,也可以接受不同形状的数组,例如向量或 3 维数组,并且仍然有效?

谢谢。

维数必须在编译Theano函数时固定。编译过程的一部分是 select 取决于维数的操作变体。

您始终可以为高维张量编译函数,只需堆叠您的输入,使它们具有所需的形状。

所以

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