Python Theano共享变量更新导致'ValueError:长度未知`

Python Theano共享变量更新导致'ValueError:长度未知`,python,numpy,theano,Python,Numpy,Theano,最小示例代码: import theano as th import theano.tensor as T import numpy as np x = T.dscalars('x') z = th.shared(np.zeros(2)) updates = [z, z+x] f1 = th.function(inputs=[x], updates=updates) f1(3) print z.get_value() 错误消息: Traceback (most recent call l

最小示例代码:

import theano as th
import theano.tensor as T
import numpy as np

x = T.dscalars('x')
z = th.shared(np.zeros(2))
updates = [z, z+x]

f1 = th.function(inputs=[x], updates=updates) 
f1(3)
print z.get_value()
错误消息:

Traceback (most recent call last):
  File "/home/temp2/theano.test.py", line 9, in <module>
    f1 = th.function(inputs=[x], updates=updates) 
  File "/usr/local/lib/python2.7/dist-packages/theano/compile/function.py", line 205, in function
    profile=profile)
  File "/usr/local/lib/python2.7/dist-packages/theano/compile/pfunc.py", line 460, in pfunc
    no_default_updates=no_default_updates)
  File "/usr/local/lib/python2.7/dist-packages/theano/compile/pfunc.py", line 191, in rebuild_collect_shared
    for (store_into, update_val) in iter_over_pairs(updates):
  File "/usr/local/lib/python2.7/dist-packages/theano/tensor/basic.py", line 1610, in __iter__
    for i in xrange(get_vector_length(self)):
  File "/usr/local/lib/python2.7/dist-packages/theano/tensor/basic.py", line 5210, in get_vector_length
    raise ValueError("length not known")
ValueError: length not known
回溯(最近一次呼叫最后一次):
文件“/home/temp2/theano.test.py”,第9行,在
f1=th.函数(输入=[x],更新=更新)
文件“/usr/local/lib/python2.7/dist-packages/theano/compile/function.py”,第205行,在函数中
外形=外形)
pfunc中的文件“/usr/local/lib/python2.7/dist-packages/theano/compile/pfunc.py”,第460行
无默认更新=无默认更新)
文件“/usr/local/lib/python2.7/dist packages/theano/compile/pfunc.py”,第191行,位于rebuild\u collect\u shared中
对于iter\U over\U对(更新)中的(存储到,更新到):
文件“/usr/local/lib/python2.7/dist packages/theano/tensor/basic.py”,第1610行,在__
对于x范围内的i(获取向量长度(self)):
文件“/usr/local/lib/python2.7/dist packages/theano/tensor/basic.py”,第5210行,get_vector_长度
提升值错误(“长度未知”)
ValueError:长度未知

此错误的原因是什么?

更新必须包含
对的列表。请参阅有关的官方教程

正确代码:

import theano as th
import theano.tensor as T
import numpy as np

x = T.dscalars('x')
z = th.shared(np.zeros(2))
updates = [(z, z+x)]

f1 = th.function(inputs=[x], updates=updates) 
f1(3)
print z.get_value()

在这种情况下,我会将消息错误更新为:“updates参数必须是OrderedDict/dict或一个包含2个元素的列表/元组列表”@nouiz,如果尝试类似于
updates=(z,z+x)
的操作,则错误消息也没有太大帮助:
TypeError:TensorType不支持迭代。也许您使用的是内置的.sum而不是no.tensor.sum?(可能是.max?)