如何跨并行流共享权重?

时间:2017-07-26 12:02:18

标签: lua neural-network torch

有没有办法在火炬模型的并行流中共享权重?

例如,我有以下模型。

mlp = nn.Sequential();
c = nn.Parallel(1,2)     -- Parallel container will associate a module to each slice of dimension 1
                         -- (row space), and concatenate the outputs over the 2nd dimension.

for i=1,10 do            -- Add 10 Linear+Reshape modules in parallel (input = 3, output = 2x1)
 local t=nn.Sequential()
 t:add(nn.Linear(3,2))   -- Linear module (input = 3, output = 2)
 t:add(nn.Reshape(2,1))  -- Reshape 1D Tensor of size 2 to 2D Tensor of size 2x1
 c:add(t)
end

mlp:add(c)

现在我想在不同数量的nn.Linear上分享上面i图层的权重(包括所有内容,权重,偏差,渐变)(例如,nn.Linear(3,2)[1] nn.Linear(3,2)[9])。 我有什么选择可以分享这些选项?

或者是否建议使用不同的容器/模块方法?

1 个答案:

答案 0 :(得分:1)

您可以创建将重复的模块:

X

然后你可以使用火炬的t = nn.Sequential() t:add(nn.Linear(3,2)) t:add(nn.Reshape(2,1)) 功能和其他参数来分享权重(https://github.com/torch/nn/blob/master/doc/module.md#clonemlp

clone