Lasagne / Theano梯度值

3

我目前正在使用Lasagne / Theano进行循环神经网络的工作。

在训练过程中,使用Theano的符号梯度来计算更新。

grads = theano.grad(loss_or_grads, params)

虽然梯度表达式通常没有问题,但为了监控训练,我也对梯度值感兴趣。

我的问题是是否有内置方法可以获取梯度值,这是我到目前为止还没有找到的,或者我必须自己做。

提前致谢。

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共享变量存储。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接