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
函数允许您使用对象名称作为字符串来获取对象的成员变量/属性
有关更多信息,请查看答案