Neural network 要计算稀疏性的模块的名称

Neural network 要计算稀疏性的模块的名称,neural-network,pytorch,Neural Network,Pytorch,我正在编写一个函数,用于计算以下完全连接网络的权重矩阵的稀疏性: class FCN(nn.Module): def __init__(self): super(FCN, self).__init__() self.fc1 = nn.Linear(input_dim, hidden_dim) self.relu1 = nn.ReLU() self.fc2 = nn.Linear(hidden_dim, h

我正在编写一个函数,用于计算以下完全连接网络的权重矩阵的稀疏性:

class FCN(nn.Module):
    def __init__(self):
        super(FCN, self).__init__()

        
        self.fc1 = nn.Linear(input_dim, hidden_dim)
        self.relu1 = nn.ReLU()
        self.fc2 = nn.Linear(hidden_dim, hidden_dim)
        self.relu2 = nn.ReLU()
        self.fc3 = nn.Linear(hidden_dim, hidden_dim)
        self.relu3 = nn.ReLU()
        self.fc4 = nn.Linear(hidden_dim, output_dim)
    
    def forward(self, x):

        out = self.fc1(x)
        out = self.relu1(out)
        out = self.fc2(out)
        out = self.relu2(out)
        out = self.fc3(out)
        out = self.relu3(out)
        out = self.fc4(out)

        return out
我编写的函数如下所示:

def print_layer_sparsity(model):
    for name,module in model.named_modules():
        if 'fc' in name:
            zeros = 100. * float(torch.sum(model.name.weight == 0))
            tot = float(model.name.weight.nelement())
            print("Sparsity in {}.weight: {:.2f}%".format(name, zeros/tot))
但它给了我以下错误:

torch.nn.modules.ModuleAttributeError:'FCN'对象没有属性'name'

当我手动输入图层名称(例如

(model.fc1.weight==0) (model.fc2.weight==0) (model.fc3.weight==0)

但我想让它独立于网络。换句话说,我想调整我的功能,在给定任何稀疏网络的情况下,它打印每一层的稀疏性。有什么建议吗

谢谢!!

试试:

getattr(model, name).weight
代替

model.name.weight
您的
print\u layer\u sparsity
功能变为:

def print\u layer\u稀疏性(模型):
模型中的模块名称。命名为_modules():
如果名称中有“fc”:
零=100.*浮点(torch.sum(getattr(model,name.weight==0))
tot=float(getattr(model,name).weight.neelement())
打印(“稀疏度在{}.weight:{.2f}%.”格式(名称,零/tot))
您不能使用
model.name
,因为
name
是一个
str
。内置的
getattr
函数允许您使用对象名称作为字符串来获取对象的成员变量/属性

有关更多信息,请查看答案