Lasagne / Theano 梯度值
Lasagne / Theano gradient values
我目前正在使用 Lasagne / Theano 研究递归神经网络。
训练时,使用 Theano 的符号梯度计算更新。
grads = theano.grad(loss_or_grads, params)
虽然梯度 expression 通常非常好,但我也对梯度 values 感兴趣,以便监控训练。
我现在的问题是是否有内置方法也可以获取梯度值,目前我还没有找到,或者我是否必须自己做。
提前致谢
我不知道有任何 lasagne 函数可以计算梯度,但您可以使用简单的 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 共享变量。
我目前正在使用 Lasagne / Theano 研究递归神经网络。
训练时,使用 Theano 的符号梯度计算更新。
grads = theano.grad(loss_or_grads, params)
虽然梯度 expression 通常非常好,但我也对梯度 values 感兴趣,以便监控训练。
我现在的问题是是否有内置方法也可以获取梯度值,目前我还没有找到,或者我是否必须自己做。
提前致谢
我不知道有任何 lasagne 函数可以计算梯度,但您可以使用简单的 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 共享变量。