如何在模块上传递和分配参数-Torch Lua

时间:2019-02-24 10:53:58

标签: lua torch

我很想了解Lua如何将神经网络的参数传递给每个模块,尤其是在CNN中,参数构成了过滤器/内核。

bottom, top = split_model(nChannel)
bottom = bottom:cuda()
top = top:cuda()

上面的代码使用9个顺序层的SpatialConvolution-> SpatialBatchNormalization-> ReLU创建模型

local bottom_param, bottom_grad_param = bottom:getParameters()

我猜测以上联系了bottom_param和bottom_grad_param来保存模型的参数

local params = torch.load(opt.model_param)

上面的代码加载了已经包含预训练参数的.t7文件

bottom_param:copy(params)

上面的行将预训练的参数复制到bottom_param,并将参数传递给模型

我的问题是传递参数的方式。前9个定义第一个3x3内核吗?

split_model函数是这样的:

function split_model(nChannel)

local half_padding = 9
local bottom = nn.Sequential()
bottom:add(nn.SpatialReflectionPadding(half_padding, half_padding, half_padding, half_padding))

-- building block
local function ConvBNReLU(nInputPlane, nOutputPlane, kw, kh, pw, ph)
  pw = pw or 0
  ph = ph or 0
  bottom:add(nn.SpatialConvolution(nInputPlane, nOutputPlane, kw, kh, 1, 1, pw, ph))
  bottom:add(nn.SpatialBatchNormalization(nOutputPlane,1e-3))
  bottom:add(nn.ReLU(true))
  return bottom
end

ConvBNReLU( nChannel,64,3,3)
ConvBNReLU(64,64,3,3)--:add(nn.Dropout(0.4))
ConvBNReLU(64,64,3,3)--:add(nn.Dropout(0.4))
ConvBNReLU(64,64,3,3)--:add(nn.Dropout(0.4))
ConvBNReLU(64,64,3,3)--:add(nn.Dropout(0.4))
ConvBNReLU(64,64,3,3)--:add(nn.Dropout(0.5))
ConvBNReLU(64,64,3,3)--:add(nn.Dropout(0.4))
ConvBNReLU(64,64,3,3)--:add(nn.Dropout(0.4))

bottom:add(nn.SpatialConvolution(64, 64, 3, 3))
bottom:add(nn.SpatialBatchNormalization(64,1e-3))

local top = nn.Sequential()
top:add(nn.CMulTable())
top:add(nn.Sum(2))

return bottom, top

end

p.s该代码不是我的,而是先生的工作。罗文杰

0 个答案:

没有答案