Pytorch之如何提取模型中的某一层
作者:黄鑫huangxin
这篇文章主要介绍了Pytorch之如何提取模型中的某一层问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Pytorch提取模型中的某一层
modules()会返回模型中所有模块的迭代器,它能够访问到最内层,比如self.layer1.conv1这个模块,还有一个与它们相对应的是name_children()属性以及named_modules(),这两个不仅会返回模块的迭代器,还会返回网络层的名字。
方法如下:
new_model = nn.Sequential(*list(model.children())[:2]
取模型中的前两层
如果希望提取出模型中的所有卷积层,可以像下面这样操作:
for layer in model.named_modules(): if isinstance(layer[1],nn.Conv2d): conv_model.add_module(layer[0],layer[1]) #使用isinstance可以判断这个模块是不是所需要的类型实例
Pytorch查看模型某一层的参数数值
import os import torch import torch.nn as nn # 设置GPU os.environ['CUDA_VISIBLE_DEVICES'] = '1' device = torch.device('cuda:0') if torch.cuda.is_available() else 'cpu' # 创建模型 model = nn.Sequential(nn.Conv2d(3, 16, kernel_size=1), nn.Conv2d(16, 3, kernel_size=1)) model.to(device) # 方法一 # 打印某一层的参数名 for name in model.state_dict(): print(name) # 直接索引某一层的name来输出该层的参数 print(model.state_dict()['1.weight']) # 方法二 # 获取模型所有参数名和参数值 存储在list中 params = list(model.named_parameters()) # 分别索引得到某层的名称和参数值 print(params[2][0]) # name print(params[2][1].data) # data # 方法三 # 依次遍历模型每一层的参数 存储到dict中 params = {} for name, param in model.named_parameters(): params[name] = param.detach().cpu().numpy() print(params['0.weight']) # 方法四 # 遍历模型的每一层 查找目标层 输出参数值 for layer in model.modules(): # 打印Conv2d层的参数 if (isinstance(layer, nn.Conv2d)): print(layer.weight)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。