[Theano]如何根据共享变量评估渐变

时间:2016-06-16 11:24:33

标签: machine-learning theano

我目前正面临这个问题: 我无法在使用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)是共享变量。

非常感谢

1 个答案:

答案 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()吗?