[火炬]如何在nn模型中读取权重

时间:2015-08-19 03:35:49

标签: neural-network torch

我使用itorch笔记本构建了nn模型。

model = nn.Sequential()

model:add(nn.Reshape(ninputs))

model:add(nn.Linear(ninputs,noutputs))

向模型输入数据

output = model:forward(input)

然后,我打印模型并得到它。

print(model)

nn.Sequential {
  [input -> (1) -> (2) -> output]
  (1): nn.Reshape(3072)
  (2): nn.Linear(3072 -> 10)
}
{
  gradInput : DoubleTensor - empty
  modules : 
    {
      1 : 
        nn.Reshape(3072)
        {
          _input : DoubleTensor - empty
          nelement : 3072
          train : true
          output : DoubleTensor - size: 3072
          gradInput : DoubleTensor - empty
          size : LongStorage - size: 1
          _gradOutput : DoubleTensor - empty
          batchsize : LongStorage - size: 2
        }
      2 : 
        nn.Linear(3072 -> 10)
        {
          gradBias : DoubleTensor - size: 10
          weight : DoubleTensor - size: 10x3072
          train : true
          bias : DoubleTensor - size: 10
          gradInput : DoubleTensor - empty
          gradWeight : DoubleTensor - size: 10x3072
          output : DoubleTensor - size: 10
        }
    }
  train : true
  output : DoubleTensor - size: 10
}

如何读取nn.linear中的权重?

提前致谢。

2 个答案:

答案 0 :(得分:7)

哦,它类似于php

model.modules[2].weight

答案 1 :(得分:1)

我发现model.modules[1].weightmodel:get(1).weight类似,但两者都无法像残留块一样从表层获取参数。这样残留块作为一层。

但是,即使在表格层中,我们也可以使用params, gradParams = model:parameters()来获取每个图层的参数。

值得注意的是,在第二种方式中,每层网络参数分为两层并按层排列