7

Theano ドキュメントのホームページで提供されているこのチュートリアルを読んでいます

勾配降下セクションの下にあるコードについてはよくわかりません。

ここに画像の説明を入力

for loop について疑問があります

「 param_update」変数をゼロに初期化した場合。

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

次に、残りの 2 行でその値を更新します。

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 に指示するだけです。この初期化コードは 1 回だけ呼び出され、後で の値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 は wrt の勾配を計算し、cost運動量規則に従って新しい更新方向に更新しますparamparam_updateその後、paramに保存された更新指示に従い、param_update適切なlearning_rate.

于 2014-08-18T15:46:25.873 に答える