【问题标题】:Why do they clone the entire model before training in torch?为什么他们在进行 Torch 训练之前克隆整个模型?
【发布时间】:2017-11-30 19:33:06
【问题描述】:

我最近浏览了很多 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 行)。

【问题讨论】:

    标签: lua neural-network torch


    【解决方案1】:

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

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

    【讨论】:

    • 在此代码中,网络并行性已经在上述行之上完成。我知道参数被克隆到另一个模块(siamese_2)但为什么siamese_1 也被添加到siamese_net 中?
    • 不,第 122 到 126 行执行并行性。 siamese_netParallelTable,因此您需要向该网络添加至少 2 个模块(并行)。这就是为什么要同时添加 siamese_1siamese_2,因此它们会并行放置在 siamese_net 网络中。
    • 没错,我还发现需要并行网络,因为这个实现试图同时传递两个数据张量。
    猜你喜欢
    • 2022-01-26
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2016-01-25
    • 2019-05-15
    相关资源
    最近更新 更多