我目前正在使用Lasagne / Theano处理复发神经网络。
在训练时,使用Theano的符号渐变计算更新。
grads = theano.grad(loss_or_grads, params)
虽然渐变表达式一般来说非常好,但我也对渐变值感兴趣,以便监控训练。
我现在的问题是,是否有内置方法来获取渐变值,到目前为止我还没有找到,或者我是否必须自己完成。
提前致谢
答案 0 :(得分:5)
我不知道任何测试渐变的千层面功能,但您可以通过简单的theano功能自行获取。
假设我们有以下theano变量:
inputs
=输入网络targets
=网络的目标输出loss
=损失函数的值,定义为网络输出的函数和targets
l_hid
=网络的周期性图层,键入lasagne.layers.RecurrentLayer
假设我们对损失函数的梯度感兴趣w.r.t.经常性的权重:
grad = theano.grad(loss, l_hid.W_hid_to_hid)
定义theano函数以获取渐变的数值
get_grad = theano.function([inputs, targets], grad)
现在,只需为输入和目标的任何值(例如当前的小批量)调用get_grad
。 get_grad()
不需要传递权重值,因为它们会被存储为theano共享变量。