为什么他们在 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_1
和 siamese_2
共享它们的权重、偏差和相应的梯度。
在您看到的代码中,作者想要创建一个网络,其中两个并行网络共享它们的权重,这就是他们使用 clone
函数的原因。
我最近浏览了很多 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_1
和 siamese_2
共享它们的权重、偏差和相应的梯度。
在您看到的代码中,作者想要创建一个网络,其中两个并行网络共享它们的权重,这就是他们使用 clone
函数的原因。