diff options
author | Marco Scoffier <marco@marco-ThinkPad-X220.(none)> | 2011-08-26 02:25:28 +0400 |
---|---|---|
committer | Marco Scoffier <marco@marco-ThinkPad-X220.(none)> | 2011-08-26 02:25:28 +0400 |
commit | e24dfd0c32ca6759b4506a5d1cca974b70a305e2 (patch) | |
tree | 515746028b227cd9d587f180da91edfe3d5beb12 | |
parent | 087d96271f60bd3fd80e8b3aaab72626cd0b6e53 (diff) |
parallel modules weren't coping weights back to main module
-rw-r--r-- | LBFGSOptimization.lua | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/LBFGSOptimization.lua b/LBFGSOptimization.lua index f0e130a..4026afe 100644 --- a/LBFGSOptimization.lua +++ b/LBFGSOptimization.lua @@ -88,8 +88,8 @@ function LBFGS:forward_mapreduce(inputs, targets, options) local modules = {} local criterions = {} local outputs = {} - self.parametersT = {} - self.gradParametersT = {} + self.parametersPT = {} + self.gradParametersPT = {} for m = 1,self.parallelize do if m == 1 then modules[m] = self.module @@ -98,8 +98,8 @@ function LBFGS:forward_mapreduce(inputs, targets, options) modules[m] = self.module:clone() criterions[m] = self.criterion:clone() end - self.parametersT[m] = nnx.getParameters(modules[m]) - self.gradParametersT[m] = nnx.getGradParameters(modules[m]) + self.parametersPT[m] = nnx.getParameters(modules[m]) + self.gradParametersPT[m] = nnx.getGradParameters(modules[m]) end -- (1) construct a closure that compute f(inputs) + df/dW @@ -119,14 +119,14 @@ function LBFGS:forward_mapreduce(inputs, targets, options) -- in separate threads lbfgs.evaluate_map = function(thread) - -- set parameters from current state - self:unflatten(self.parametersT[thread], self.gradParametersT[thread]) + -- set parameters of current state + self:unflatten(self.parametersPT[thread], self.gradParametersPT[thread]) -- reset gradients modules[thread]:zeroGradParameters() -- f is the average of all criterions outputs[thread] = 0 - -- given all inputs, evaluate gradients - for i = thread,#inputs,thread do + -- evaluate gradients on inputs for this thread + for i = thread,#inputs,#modules do -- estimate f local output = modules[thread]:forward(inputs[i]) local err = criterions[thread]:forward(output, targets[i]) @@ -146,8 +146,8 @@ function LBFGS:forward_mapreduce(inputs, targets, options) self.gradParametersAcc:resizeAs(self.gradParameters):zero() -- update state from computed parameters for t = 1,self.parallelize do - self:flatten(self.parametersT[1], self.gradParametersT[t]) - self.gradParametersAcc:copy(self.gradParameters) + self:flatten(self.parametersPT[t], self.gradParametersPT[t]) + self.gradParametersAcc:add(self.gradParameters) end self.gradParameters:copy(self.gradParametersAcc) -- normalize gradients @@ -161,7 +161,7 @@ function LBFGS:forward_mapreduce(inputs, targets, options) end -- (2) store current parameters/gradParameters - self:flatten(self.parametersT[1], self.gradParametersT[1]) + self:flatten(self.parametersT, self.gradParametersT) -- (3) the magic function: will update the parameter vector -- according to the l-BFGS method @@ -169,8 +169,8 @@ function LBFGS:forward_mapreduce(inputs, targets, options) self.maxIterations, self.maxLineSearch, self.sparsity) - -- (4) last: read parameters back into the model - self:unflatten(self.parametersT[1], self.gradParametersT[1]) + -- (4) last: read parameters back into the main (not parrallel) model + self:unflatten(self.parametersT, self.gradParametersT) -- (5) return current output after optimization return self.output |