【发布时间】: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