Python 无循环错误:扫描中的输出信息尺寸和fn输出尺寸不匹配

Python 无循环错误:扫描中的输出信息尺寸和fn输出尺寸不匹配,python,neural-network,theano,Python,Neural Network,Theano,我是Theano的初学者,我是从一个别人的代码示例开始工作的,这个示例可能在某个点上起作用(但是,我已经修改了它…但是我非常确定我的修改与目前出现的错误无关) 无论如何,我正在调试Theano扫描…我认为我观察到的是扫描函数中的一个基本错误 U, V, W = self.U, self.V, self.W x = T.ivector('x') y = T.ivector('y') def forward_prop_step(x_t, s_t_prev, U, V, W): s_t = T

我是Theano的初学者,我是从一个别人的代码示例开始工作的,这个示例可能在某个点上起作用(但是,我已经修改了它…但是我非常确定我的修改与目前出现的错误无关)

无论如何,我正在调试Theano扫描…我认为我观察到的是扫描函数中的一个基本错误

U, V, W = self.U, self.V, self.W
x = T.ivector('x')
y = T.ivector('y')
def forward_prop_step(x_t, s_t_prev, U, V, W):
    s_t = T.tanh(U.dot(x_t) + V.dot(s_t_prev))
    o_t = T.tanh(W.dot(s_t))
    return [o_t,s_t]
[o,s], updates = theano.scan(
        forward_prop_step,
        sequences=x,
        outputs_info=[None, dict(initial=T.zeros(self.hidden_dim))],
        non_sequences=[U, V, W],
        truncate_gradient=self.bptt_truncate,
        strict=True)
U
mxn
矩阵,
V
nxn
矩阵,
W
nxo
矩阵……和
self。bptt\U truncate
是标量(4)。但我不认为我的内部功能是目前失败的

我得到的错误是:

ValueError:编译scan的内部函数时遇到以下错误:变量incSubSensor{Set;:int64:}.0(参数编号1)的初始状态(
outputs_info
)在扫描命名法中为2维,而内部函数(
fn
)的结果为2维(应比初始状态小一个)

我尝试过改变输出信息的维度,以及
forward\u prop\u step
的返回维度,但到目前为止似乎没有任何效果

我目前正在查看文档…但是,从文档来看,我所做的似乎是正确的(以下是文档中的示例):

这是文档扫描:

W = T.matrix()
W_in_1 = T.matrix()
W_in_2 = T.matrix()
W_feedback = T.matrix()
W_out = T.matrix()

u = T.matrix() # it is a sequence of vectors
x0 = T.matrix() # initial state of x has to be a matrix, since
                # it has to cover x[-3]
y0 = T.vector() # y0 is just a vector since scan has only to provide
                # y[-1]


([x_vals, y_vals], updates) = theano.scan(fn=oneStep,
                                          sequences=dict(input=u, taps=[-4,-0]),
                                          outputs_info=[dict(initial=x0, taps=[-3,-1]), y0],
                                          non_sequences=[W, W_in_1, W_in_2, W_feedback, W_out],
                                          strict=True)
     # for second input y, scan adds -1 in output_taps by default
函数的返回是:“[x_t,y_t]”,
输出信息是
[dict(initial=x0,taps=[-3,-1]),y0]


在我的实现中,函数的返回是:
[o\u t,s\u t]
,而
输出信息是
[None,dict(initial=t.zeros(self.hidden\u dim))]
…这很有意义,因为我没有理由将输出传递到函数中…

尝试以下方法?注意与
(self.hidden\u dim,)的区别
(自隐藏)


我在将RNN应用于NLP任务时遇到了完全相同的问题。出现此错误的原因是
forward\u prop\u step
函数的
x\u t
参数的类型,该函数是标量的,因为迭代了ivector
x

这里的解决方案是使用一个向量。例如,
x\u tv
是一个在
x\u t
索引处都有0和1的向量

def forward_prop_step(x_t, s_t_prev, U, V, W):
    x_tv = T.eye(1, m=input_size, k=x_t)[0]
    s_t = T.tanh(U.dot(x_tv) + V.dot(s_t_prev))
    o_t = T.tanh(W.dot(s_t))
    return [o_t, s_t]
outputs_info=[None, dict(initial=T.zeros((self.hidden_dim, )))],
def forward_prop_step(x_t, s_t_prev, U, V, W):
    x_tv = T.eye(1, m=input_size, k=x_t)[0]
    s_t = T.tanh(U.dot(x_tv) + V.dot(s_t_prev))
    o_t = T.tanh(W.dot(s_t))
    return [o_t, s_t]