我目前正面临这个问题: 我无法在使用Theano编码的递归神经网络中评估我的渐变符号变量。 这是代码:
W_x = theano.shared(init_W_x, name='W_x')
W_h = theano.shared(init_W_h, name='W_h')
W_y = theano.shared(init_W_y, name='W_y')
[self.y, self.h], _ = theano.scan(self.step,
sequences=self.x,
outputs_info=[None, self.h0])
error = ((self.y - self.t) ** 2).sum()
gW_x, gW_y, gW_h = T.grad(self.error, [W_x, W_h, W_y])
[...]
def step(self, x_t, h_tm1):
h_t = T.nnet.sigmoid(T.dot(self.W_x, x_t) + T.dot(h_tm1, self.W_h))
y_t = T.dot(self.W_y, h_t)
return y_t, h_t
我保留了我认为合适的东西 我希望能够计算例如'gW_x',但是当我尝试将其作为theano函数嵌入时,它不起作用,因为它的依赖项(W_x,W_h,W_y)是共享变量。
非常感谢
答案 0 :(得分:0)
我相信在这种情况下,您需要将共享变量传递给self.step
non_sequences
参数中的函数theano.scan
。
因此,您需要更改self.step
的签名以再取三个参数(对应于共享变量),然后将参数non_sequences=[W_x, W_h, W_y]
添加到theano.scan
。
另外,我怀疑你可能在倒数第二行写了一个拼写错误 - 它应该是error = ((self.y - t) ** 2).sum()
吗?