Theano教程中的澄清

时间:2014-08-18 15:27:52

标签: python numpy theano gradient-descent deep-learning

我正在阅读this tutorial

上提供的home page of Theano documentation

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

enter image description here

我对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)))

为什么我们需要它?

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

1 个答案:

答案 0 :(得分:15)

使用param_update初始化theano.shared(.)只会告诉Theano保留一个将由Theano函数使用的变量。此初始化代码仅调用一次,稍后将不会用于将param_update的值重置为0.

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都会计算cost w.r.t的渐变。 param根据动量规则将param_update更新为新的更新方向。然后,param将按照param_update中保存的更新方向与适当的learning_rate进行更新。