为什么他们在 torch 训练之前克隆整个模型?

Why do they clone the entire model before training in 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 行)。

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

在您看到的代码中,作者想要创建一个网络,其中两个并行网络共享它们的权重,这就是他们使用 clone 函数的原因。