【问题标题】:torch7: Setting Variable Learning Rates for Different Conv-net Layerstorch7:为不同的卷积网络层设置可变学习率
【发布时间】:2016-06-05 07:58:18
【问题描述】:

我正在尝试微调一个 conv-net。它具有以下结构(改编自OverFeat):

   net:add(SpatialConvolution(3, 96, 7, 7, 2, 2))
   net:add(nn.ReLU(true))
   net:add(SpatialMaxPooling(3, 3, 3, 3))
   net:add(SpatialConvolutionMM(96, 256, 7, 7, 1, 1))
   net:add(nn.ReLU(true))
   net:add(SpatialMaxPooling(2, 2, 2, 2))
   net:add(SpatialConvolutionMM(256, 512, 3, 3, 1, 1, 1, 1))
   net:add(nn.ReLU(true))
   net:add(SpatialConvolutionMM(512, 512, 3, 3, 1, 1, 1, 1))
   net:add(nn.ReLU(true))
   net:add(SpatialConvolutionMM(512, 1024, 3, 3, 1, 1, 1, 1))
   net:add(nn.ReLU(true))
   net:add(SpatialConvolutionMM(1024, 1024, 3, 3, 1, 1, 1, 1))
   net:add(nn.ReLU(true))
   net:add(SpatialMaxPooling(3, 3, 3, 3))
   net:add(SpatialConvolutionMM(1024, 4096, 5, 5, 1, 1))
   net:add(nn.ReLU(true))
   net:add(SpatialConvolutionMM(4096, 4096, 1, 1, 1, 1))
   net:add(nn.ReLU(true))
   net:add(SpatialConvolutionMM(4096, total_classes, 1, 1, 1, 1))
   net:add(nn.View(total_classes))
   net:add(nn.LogSoftMax())

我使用 SGD 作为优化方法,参数如下:

   optimState = {
      learningRate = 1e-3,
      weightDecay = 0,
      momentum = 0,
      learningRateDecay = 1e-7
   }
   optimMethod = optim.sgd

我训练它如下:

optimMethod(feval, parameters, optimState)

地点:

-- 'feval' is the function with the forward and backward passes on the current batch
    parameters,gradParameters = net:getParameters()

从我的参考资料中,我了解到,在微调预训练网络时,建议较低(卷积)层应具有较低的学习率,而较高层应具有相对较高的学习率。

我参考了 torch7 的 optim/sgd 文档,为每一层设置不同的学习率。从那里,我得到了设置 config.learningRates ,即个人学习率的向量,我可以实现我想要的。我是 Torch 的新手,所以,如果这似乎是一个愚蠢的问题,请原谅我,但如果有人能解释我如何以及在哪里创建/使用这个向量来服务于我的目的,那将非常有帮助?

提前致谢。

【问题讨论】:

    标签: lua training-data torch conv-neural-network


    【解决方案1】:

    我不知道你是否还需要答案,因为你在一年前发布了这个问题。

    无论如何,以防万一有人看到这一点,我已经写了一个post here 关于如何在torch 中为不同层设置不同的学习率。

    解决方案是使用net:parameters() 而不是net:getParameters()。它不是返回两个张量,而是返回两个张量表,其中包含单独张量中每一层的参数(和 gradParameters)。

    通过这种方式,您可以为每一层运行一个sgd() 步骤(具有不同的学习率)。您可以点击上面的链接找到完整的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-10
      • 2016-12-08
      • 2018-06-02
      • 2017-10-04
      • 2019-06-21
      • 1970-01-01
      • 2017-12-17
      • 2019-06-28
      相关资源
      最近更新 更多