module
= Parallel(inputDimension,outputDimension)
Creates a container module that applies its ith
child module to the ith
slice of the input Tensor by using select
on dimension inputDimension
. It concatenates the results of its contained modules together along dimension outputDimension
.
Example:
require "lab" mlp=nn.Parallel(2,1); -- iterate over dimension 2 of input mlp:add(nn.Linear(10,3)); -- apply to first slice mlp:add(nn.Linear(10,2)) -- apply to first second slice print(mlp:forward(lab.randn(10,2)))gives the output:
-0.5300 -1.1015 0.7764 0.2819 -0.6026 [torch.Tensor of dimension 5]
A more complicated example:
require "lab" mlp=nn.Sequential(); c=nn.Parallel(1,2) for i=1,10 do local t=nn.Sequential() t:add(nn.Linear(3,2)) t:add(nn.Reshape(2,1)) c:add(t) end mlp:add(c) pred=mlp:forward(lab.randn(10,3)) print(pred) for i=1,10000 do -- Train for a few iterations x=lab.randn(10,3); y=lab.ones(2,10); pred=mlp:forward(x) criterion= nn.MSECriterion() local err=criterion:forward(pred,y) local gradCriterion = criterion:backward(pred,y); mlp:zeroGradParameters(); mlp:backward(x, gradCriterion); mlp:updateParameters(0.01); print(err) end