1

如果我std::vector<torch::nn::Linear> linear_layers;用一些对象定义并填充这个向量torch::nn::Linear,那么我可以通过and访问weightandbias值。其他图层类型也可以使用相同的功能,例如.linear_layers[k].weightlinear_layers[k].biastorch::nn::Conv2d

如果使用创建我的网络nn::sequential然后推回其中一个,Linear或者Conv2d我无法直接访问weightand bias。现在,我的问题是如何在使用后访问每一层的权重和偏差值nn::sequential

谢谢, 阿夫辛

4

1 回答 1

1

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

包括

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

int main() { auto net = Sequential(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} ]
于 2019-06-27T18:19:35.110 回答