ここはおもちゃのモデルです。 backward
を正確に1回呼び出す前にモデルパラメータを印刷してから、モデルパラメータを再度印刷します。パラメータは変更されません。 backward
を呼び出した後にmodel:updateParameters(<learning_rate>)
行を追加すると、パラメータの更新が表示されます。Torch:モデルパラメータはどのように更新されますか?
しかし、例のコードでは、たとえばhttps://github.com/torch/demos/blob/master/train-a-digit-classifier/train-on-mnist.luaのように、誰も実際にupdateParameters
を呼び出していません。また、optim.sgd
、optim.adam
、またはnn.StochasticGradient
のいずれかがupdateParameters
と呼ばれることはありません。私はここで何が欠けていますか?パラメータは自動的にどのように更新されますか? updateParameters
に電話しなければならない場合、どうしてその例はありませんか?
backward()
は、パラメータを変更することになっていない
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)
本当に徹底的に、ありがとうございます。繰り返すために、 'updateParameters'はパラメータを手動で更新するために使用されます。 'updateParameters'を呼び出すと最適化が考慮されないため、最適化アルゴリズムはフラット化されたパラメータへの参照を更新します。 – gwg