Python 使用共享变量从矩阵中进行选择

Python 使用共享变量从矩阵中进行选择,python,python-2.7,numpy,theano,Python,Python 2.7,Numpy,Theano,我试图使用一个变化的向量从矩阵中选择多个元素,该向量在每次迭代时被发送到Theano函数。但是,当我尝试运行代码时,最后一行出现以下错误(从W中选择) 宣言是: x = T.vector('x', dtype='int32') y = T.vector('y', dtype='int32') net = net(rng=rng, x=x, n_in=dim*5, n_out=2, n_hidden=100, y=y, n_tokens=len(txt), dim=dim) 然后我使用我的输入

我试图使用一个变化的向量从矩阵中选择多个元素,该向量在每次迭代时被发送到Theano函数。但是,当我尝试运行代码时,最后一行出现以下错误(从W中选择)

宣言是:

x = T.vector('x', dtype='int32')
y = T.vector('y', dtype='int32')

net = net(rng=rng, x=x, n_in=dim*5, n_out=2, n_hidden=100, y=y, n_tokens=len(txt), dim=dim)
然后我使用我的输入(x),如下所示:

W = numpy.asarray(
    rng.uniform(low=0., high=1., size=(n_tokens, dim)),
    dtype=theano.config.floatX
)
self.W = theano.shared(value=W, name='W', borrow=True)

self.output = W[x, ]
其目的是在运行时x将是形式的索引的简单向量

x = [0, 1, 5, 98....]

感谢您的帮助

矩阵W是numpy-ndarray类型,因此它不知道如何处理像x这样的无张量。如果要索引此numpy数组,请使用numpy索引数组而不是Theano张量。如果要为Theano张量self.W编制索引,则必须等待Theano的下一个版本,或更新到开发版本:说明:

和NumPy一样,Theano区分了基本索引和高级索引。Theano完全支持基本索引(参见NumPy的索引)

0.6rc4(或开发版本)将支持整数高级索引。我们不支持布尔掩码,因为Theano没有布尔类型(我们使用int8作为逻辑运算符的输出)


您可以使用
inc_subsensor
set_subsensor
来处理此类行为,而不是切片。有关详细信息,请参阅。

谢谢。因此,为了索引self.W,我可以更新Theano,也可以循环遍历所有索引,每次将它们添加到self.output。你知道dev版本吗?它足够稳定吗?我自己没有使用开发版本,所以我不知道。如果遇到问题,您可以尝试一下,然后返回。或者你可以在theano邮件列表上询问:当某个列表不应该出现时,或者有一个不同长度的列表被解释为数组时,通常会出现这种类型的
ValueError
。我无法确定这是在哪里发生的,但请确保您为我们发布了工作代码:
W[x,]
看起来非常像R符号;在python
x中,==(x,)
是一个包含
x
的元组,尽管这可能有效,但它是一种非常隐式的处理方式。。。
x = [0, 1, 5, 98....]