Lua 为什么他们在火炬训练前要克隆整个模型?

Lua 为什么他们在火炬训练前要克隆整个模型?,lua,neural-network,torch,Lua,Neural Network,Torch,我最近经历了很多火炬代码。我注意到,通常在构建模型之后,它会被克隆,如以下代码所示: siamese_1=siamese_1:cuda() parameters,gradParameters = siamese_1:getParameters() siamese_2=siamese_1:clone('weight','bias','gradWeight','gradBias') siamese_net:add(siamese_1) siamese_net:add(siamese_2) siam

我最近经历了很多火炬代码。我注意到,通常在构建模型之后,它会被克隆,如以下代码所示:

siamese_1=siamese_1:cuda()
parameters,gradParameters = siamese_1:getParameters()
siamese_2=siamese_1:clone('weight','bias','gradWeight','gradBias')
siamese_net:add(siamese_1)
siamese_net:add(siamese_2)
siamese_1
是一个构建模型

很难理解为什么要这样做


此代码用于通过网络执行微调。来自存储库(第122到126行)。

克隆模型并指定一些附加参数(如
'weight
等)时,新模型将与原始模型共享这些参数。因此,在您的案例中,模型
siamese_1
siamese_2
共享其权重、偏差和相应的梯度


在您正在查看的代码中,作者希望创建一个两个并行网络共享其权重的网络,这就是他们使用
clone
功能的原因。

在此代码中,网络并行已在上述行上完成。我知道参数被克隆到另一个模块(
siamese_2
)上,但是为什么
siamese_1
也被添加到
siamese_net
?不,行122到126执行并行
siamese_net
是一个
并行表
,因此您需要向该网络添加至少2个模块(并行)。这就是为什么您添加了
siamese_1
siamese_2
,这两个网络因此在
siamese_网络
中是并行的。没错,我还发现需要并行网络,因为此实现试图同时传递两个数据张量。