获取Pytorch中间某一层权重或者特征
问题:训练好的网络模型想知道中间某一层的权重或者看看中间某一层的特征,如何处理呢?
1.获取某一层权重,并保存到excel中;
以resnet18为例说明:
import torch
import pandas as pd
import numpy as np
import torchvision.models as models
resnet18 = models.resnet18(pretrained=True)
parm={}
for name,parameters in resnet18.named_parameters():
print(name,':',parameters.size())
parm[name]=parameters.detach().numpy()
上述代码将每个模块参数存入parm字典中,parameters.detach().numpy()将tensor类型变量转换成numpy array形式,方便后续存储到表格中.输出为:
conv1.weight : torch.Size([64, 3, 7, 7])
bn1.weight : torch.Size([64])
bn1.bias : torch.Size([64])
layer1.0.conv1.weight : torch.Size([64, 64, 3, 3])
layer1.0.bn1.weight : torch.Size([64])
layer1.0.bn1.bias : torch.Size([64])
layer1.0.conv2.weight : torch.Size([64, 64, 3, 3])
layer1.0.bn2.weigh