7

我正在阅读Theano 文档主页上提供的本教程

我不确定梯度下降部分给出的代码。

在此处输入图像描述

我对 for 循环有疑问

如果将“ param_update ”变量初始化为零。

param_update = theano.shared(param.get_value()*0., broadcastable=param.broadcastable)

然后在剩下的两行中更新它的值。

updates.append((param, param - learning_rate*param_update))
updates.append((param_update, momentum*param_update + (1. - momentum)*T.grad(cost, param)))

为什么我们需要它?

我想我在这里弄错了。你们能帮帮我吗!

4

1 回答 1

15

param_updateusing的初始化theano.shared(.)只告诉 Theano 保留一个将被 Theano 函数使用的变量。这个初始化代码只被调用一次,以后不会用它来重置param_update0 的值。

的实际值param_update将根据最后一行更新

updates.append((param_update, momentum*param_update + (1. - momentum)*T.grad(cost, param)))

train通过将此更新字典作为参数构造函数时(本教程中的 [23]):

train = theano.function([mlp_input, mlp_target], cost,
                        updates=gradient_updates_momentum(cost, mlp.params, learning_rate, momentum))

每次train调用,Theano 都会计算costwrt的梯度,并根据动量规则param更新到新的更新方向。param_update然后,param将按照保存的更新方向进行更新,param_update并带有适当的learning_rate.

于 2014-08-18T15:46:25.873 回答