开发者

Pytorch之如何提取模型中的某一层

开发者 https://www.devze.com 2023-11-19 11:33 出处:网络 作者: 黄鑫huangxin
目录Pytorch提取模型中的某一层Pytorch查看模型某一层的参数数值总结Pytorch提取模型中的某一层
目录
  • Pytorch提取模型中的某一层
  • Pytorch查看模型某一层的参数数值
  • 总结

Pytorch提取模型中的某一层

modules()会返回模型中所有模块的迭代器,它能够访问到最内层,比如selpythonf.layer1.conv1这个模块,还有一个与它们相对应的是name_children()属性以及named_modules(),这两个不仅会返回模块的迭代器,还会返回网络层的名字。

方法如下:

new_model = nn.Sequential(*list(model.children())[:2] 

取模型中的前两层

如果希望提取出模型中的所有卷积层,可以像下面这样操作:

for layer in model.named_modules():
    if isijavascriptnstance(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)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号