3

我目前正在使用 Lasagne / Theano 研究循环神经网络。

在训练时,使用 Theano 的符号梯度计算更新。

grads = theano.grad(loss_or_grads, params)

虽然梯度表达式一般来说非常好,但我也对梯度感兴趣以监控训练。

我现在的问题是,是否有一个内置的方法也可以获取渐变值,这是我目前还没有找到的,或者我必须自己做。

提前致谢

4

1 回答 1

5

我不知道有任何千层面函数来评估梯度,但你可以用简单的 theano 函数自己得到它。

假设我们有以下 theano 变量:

  • inputs= 网络输入
  • targets= 网络的目标输出
  • loss= 损失函数的值,定义为网络输出和targets
  • l_hid= 网络的循环层,类型lasagne.layers.RecurrentLayer

假设我们对循环权重的损失函数的梯度感兴趣:

grad = theano.grad(loss, l_hid.W_hid_to_hid)

定义一个 theano 函数来获取梯度的数值

get_grad = theano.function([inputs, targets], grad)

现在,只需调用get_grad输入和目标的任何值(例如当前小批量)。get_grad()不需要传递权重的值,因为它们存储为 theano 共享变量。

于 2016-05-23T07:21:22.527 回答