为什么在 torch 训练前要克隆整个模型?

我最近一直在研究 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)

其中siamese_1是已构建的模型。

很难理解为什么要这么做?

这段代码是用于对网络进行微调。来自于this仓库中的第122至第126行。

点赞
用户3754413
用户3754413

当你复制一个模型并指定一些额外的参数(比如 'weight')时,新的模型将与原始模型共享这些参数。因此,在你的情况下,模型 siamese_1siamese_2 共享它们的权重、偏差和相应的梯度。

在你所看的代码中,作者想要创建一个具有两个并行网络共享其权重的网络,这就是为什么他们使用 clone 函数的原因。

2017-06-27 18:47:38