如何从 Pytorch 中定义为 class 对象的神经网络层获取权重?

How to get weights from layer of neural network that is defined as a class object in Pytorch?

我正在现有的代码框架之上开发一些东西,但我在从定义为 class 的神经网络中提取权重时遇到了一些问题。下面的代码

import numpy as np
import torch
import torch.nn as nn

class Solver:
    class Head(nn.Module):
        def __init__(self, base):
            super().__init__()
            self.base = base
            self.last_layer = nn.Linear(100, 10)

        def forward(self, x):
            x = self.base(x)
            x = self.last_layer(x)
            return x

    def __init__(self, bases, HeadClass=None):
        self.base = bases
        if HeadClass:
            self.head = self.Head(self.base)
        else:
            self.head = self.Head(self.base)
        print('Head Class:',self.head)

class Full_Solver:
    class Base(nn.Module):
        def __init__(self):
            super().__init__()
            self.linear_1 = nn.Linear(1, 100)
            self.linear_2 = nn.Linear(100, 100)
            self.linear_3 = nn.Linear(100, 100)

        def forward(self, x):
            x = self.linear_1(x)
            x = torch.tanh(x)
            x = self.linear_2(x)
            x = torch.tanh(x)
            x = self.linear_3(x)
            x = torch.tanh(x)
            return x

    def __init__(self, BaseClass=Base()):
        self.base = BaseClass
        print('Base model:',self.base)
        print('Base model type:',type(self.base))

        solver_1 = Solver(self.base)
        print('Full model:',solver_1)
        print('Full model type:',type(solver_1))


xx = Full_Solver()

Full_Solver class中,我定义了一个基础神经网络,它将根据Solver class中的某些条件添加一个Head(我有为了简洁起见,省略了所有条件)。当我执行 print('Full model:',solver_1) 时,我得到的输出是 Full model: <__main__.Solver object at 0x7f83a82e9cd0>如何从此 class 对象中提取输出权重?(假设我只想从中提取随机分配的权重)

在这种情况下,它将是 print('Full model:',solver_1.head.last_layer.weight)