使用nn :: sequential访问权重和偏差

时间:2019-03-28 13:21:58

标签: libtorch

如果我定义std::vector<torch::nn::Linear> linear_layers;并用一些torch::nn::Linear对象填充此向量,那么我可以通过weight和{{ 1}}。其他图层类型(例如bias)可以使用相同的功能。

如果使用linear_layers[k].weight创建我的网络,然后向后推linear_layers[k].biastorch::nn::Conv2d,则无法直接访问nn::sequentialLinear。现在,我的问题是使用Conv2d后如何访问每个图层的权重和偏差值?

谢谢, 苦参碱

1 个答案:

答案 0 :(得分:1)

这是灵魂:[请参见链接https://discuss.pytorch.org/t/common-class-of-linear-conv-etc/39987/8]

包括

使用命名空间火炬; 使用名称空间torch :: nn;

int main() {     自动网络=顺序(Conv2d(1 / / 输入通道 /,1 / 输出通道 /,2 / 内核大小 /),                               Conv2d(1,1,2));

for (auto& p : net->named_parameters()) {

    NoGradGuard no_grad;

    // Access name.
    std::cout << p.key() << std::endl;

    // Access weigth and bias.
    p.value().zero_(); // set all zero
    std::cout << p.value() << std::endl;
}

return 0;
}

顺序的图层具有以下命名约定:查看控制台输出

0.weight # name of the layer
(1,1,.,.) = 
  0  0
  0  0
[ Variable[CPUFloatType]{1,1,2,2} ]
0.bias
 0
[ Variable[CPUFloatType]{1} ]
1.weight
(1,1,.,.) = 
  0  0
  0  0
[ Variable[CPUFloatType]{1,1,2,2} ]
1.bias
 0
[ Variable[CPUFloatType]{1} ]