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