Voici un modèle de jouet. J'imprime les paramètres du modèle avant d'appeler le backward
exactement une fois, puis j'imprime à nouveau les paramètres du modèle. Les paramètres sont inchangés. Si j'ajoute la ligne model:updateParameters(<learning_rate>)
après avoir appelé backward
, je vois la mise à jour des paramètres.Torch: Comment les paramètres du modèle sont-ils mis à jour?
Mais dans l'exemple de code que j'ai vu, par exemple https://github.com/torch/demos/blob/master/train-a-digit-classifier/train-on-mnist.lua, personne n'appelle réellement updateParameters
. En outre, il ne ressemble pas optim.sgd
, optim.adam
, ou nn.StochasticGradient
jamais appeler updateParameters
soit. Qu'est-ce que j'oublie ici? Comment les paramètres sont-ils mis à jour automatiquement? Si je dois appeler updateParameters
, pourquoi aucun exemple ne fait cela?
require 'nn'
require 'optim'
local model = nn.Sequential()
model:add(nn.Linear(4, 1, false))
local params, grads = model:getParameters()
local criterion = nn.MSECriterion()
local inputs = torch.randn(1, 4)
local labels = torch.Tensor{1}
print(params)
model:zeroGradParameters()
local output = model:forward(inputs)
local loss = criterion:forward(output, labels)
local dfdw = criterion:backward(output, labels)
model:backward(inputs, dfdw)
-- With the line below uncommented, the parameters are updated:
-- model:updateParameters(1000)
print(params)
Très complet, merci. Donc, pour réitérer, 'updateParameters' est utilisé pour mettre à jour" manuellement "les paramètres. Et les algorithmes d'optimisation mettent simplement à jour leur référence aux paramètres aplatis car l'appel de 'updateParameters' ne tient pas compte des optimisations. – gwg