Вес доступа и смещение с nn:: последовательный

Если я определю std::vector<torch::nn::Linear> linear_layers; и заполните этот вектор некоторыми torch::nn::Linear объекты, то я могу получить доступ к weight а также bias значения по linear_layers[k].weight а также linear_layers[k].bias, Та же функция доступна с другими типами слоев, например, torch::nn::Conv2d,

Если создать мою сеть, используя nn::sequential а затем отодвиньте любой из Linear или же Conv2d Я не могу получить доступ к weight а также bias непосредственно. Теперь мой вопрос: как я могу получить доступ к значениям веса и смещения каждого слоя, когда я использовал nn::sequential?

Спасибо афшин

0 ответов

Вот душа: [см. Ссылку https://discuss.pytorch.org/t/common-class-of-linear-conv-etc/39987/8 ]

включают

используя факел пространства имен; используя пространство имен torch:: 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} ]
Другие вопросы по тегам