锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

六月份组队学习【深入浅出PyTorch】Task05打卡笔记

时间:2024-01-05 08:07:01 hs3一组常开10a继电器

这个吃瓜教程是Datawhale组织团队学习 。
学习资料由开源学习组织Datawhale提供。
开源贡献:李嘉琪、牛志康、刘洋、陈安东、陈玉立、刘兴、郭棉升、乔斌、匡俊伟
笔记的分来自网络检索。如果有侵权联系,可以删除
本研究的对象:
具有高数、线代、概率论的基础,具有一定的机器学习和深度学习基础,熟悉常见概念Python。
内容说明:PyTorch从基础知识到项目实战,理论与实践相结合。
学习周期:14天

教程链接:https://datawhalechina.github.io/thorough-pytorch/index.html
B站视频:BV1L44y1472Z
学习者手册:https://mp.weixin.qq.com/s/pwWg0w1DL2C1i_Hs3SZedg

Task05学习内容

  • 第七章 pytorch可视化
    • 7.1 可视化网络结构
      • ResNet18
      • torchinfo的安装
      • torchinfo的使用
    • 7.2 CNN可视化
      • 可视化CNN卷积核的方法
        • VGG11模型网络结构

第七章 pytorch可视化

第七章的主要学习内容是学习如何构建可视化网络,使用它torchinfo工具包。

7.1 可视化网络结构

使用ResNet展示18个结构:

ResNet18

在这里插入图片描述
上图是ResNet18的结构列表

torchinfo的安装

#安装方法一 pip install torchinfo  #安装方法二 conda install -c conda-forge torchinfo 

torchinfo的使用

import torchvision.models as models from torchinfo import summary resnet18 = models.resnet18() # 实例化模型 summary(resnet18, (1, 3, 224, 224)) # 1:batch_size 3:图片的通道数 224: 图片的高宽 

7.2 CNN可视化

第二节围绕在内pytorch下搭建CNN模型的可视化过程

可视化CNN卷积核的方法

PyTorch可视化卷积核也很方便,核心在于特定层的卷积核是特定层的模型权重,可视化卷积核等同于可视化对应的权重矩阵。torchvision自带的VGG11模型为例。

VGG11模型网络结构

import torch from torchvision.models import vgg11  model = vgg11(pretrained=True) print(dict(model.features.named_children())) 
#确认层信息 { 
        '0': Conv2d(3, 64, kernel_size=(3, 3
       
        )
        , stride
        =
        (
        1
        , 
        1
        )
        , padding
        =
        (
        1
        , 
        1
        )
        )
        , 
        '1'
        : 
        ReLU
        (inplace
        =True
        )
        , 
        '2'
        : 
        MaxPool2d
        (kernel_size
        =
        2
        , stride
        =
        2
        , padding
        =
        0
        , dilation
        =
        1
        , ceil_mode
        =False
        )
        , 
        '3'
        : 
        Conv2d
        (
        64
        , 
        128
        , kernel_size
        =
        (
        3
        , 
        3
        )
        , stride
        =
        (
        1
        , 
        1
        )
        , padding
        =
        (
        1
        , 
        1
        )
        )
        , 
        '4'
        : 
        ReLU
        (inplace
        =True
        )
        , 
        '5'
        : 
        MaxPool2d
        (kernel_size
        =
        2
        , stride
        =
        2
        , padding
        =
        0
        , dilation
        =
        1
        , ceil_mode
        =False
        )
        , 
        '6'
        : 
        Conv2d
        (
        128
        , 
        256
        , kernel_size
        =
        (
        3
        , 
        3
        )
        , stride
        =
        (
        1
        , 
        1
        )
        , padding
        =
        (
        1
        , 
        1
        )
        )
        , 
        '7'
        : 
        ReLU
        (inplace
        =True
        )
        , 
        '8'
        : 
        Conv2d
        (
        256
        , 
        256
        , kernel_size
        =
        (
        3
        , 
        3
        )
        , stride
        =
        (
        1
        , 
        1
        )
        , padding
        =
        (
        1
        , 
        1
        )
        )
        , 
        '9'
        : 
        ReLU
        (inplace
        =True
        )
        , 
        '10'
        : 
        MaxPool2d
        (kernel_size
        =
        2
        , stride
        =
        2
        , padding
        =
        0
        , dilation
        =
        1
        , ceil_mode
        =False
        )
        , 
        '11'
        : 
        Conv2d
        (
        256
        , 
        512
        , kernel_size
        =
        (
        3
        , 
        3
        )
        , stride
        =
        (
        1
        , 
        1
        )
        , padding
        =
        (
        1
        , 
        1
        )
        )
        , 
        '12'
        : 
        ReLU
        (inplace
        =True
        )
        , 
        '13'
        : 
        Conv2d
        (
        512
        , 
        512
        , kernel_size
        =
        (
        3
        , 
        3
        )
        , stride
        =
        (
        1
        , 
        1
        )
        , padding
        =
        (
        1
        , 
        1
        )
        )
        , 
        '14'
        : 
        ReLU
        (inplace
        =True
        )
        , 
        '15'
        : 
        MaxPool2d
        (kernel_size
        =
        2
        , stride
        =
        2
        , padding
        =
        0
        , dilation
        =
        1
        , ceil_mode
        =False
        )
        , 
        '16'
        : 
        Conv2d
        (
        512
        , 
        512
        , kernel_size
        =
        (
        3
        , 
        3
        )
        , stride
        =
        (
        1
        , 
        1
        )
        , padding
        =
        (
        1
        , 
        1
        )
        )
        , 
        '17'
        : 
        ReLU
        (inplace
        =True
        )
        , 
        '18'
        : 
        Conv2d
        (
        512
        , 
        512
        , kernel_size
        =
        (
        3
        , 
        3
        )
        , stride
        =
        (
        1
        , 
        1
        )
        , padding
        =
        (
        1
        , 
        1
        )
        )
        , 
        '19'
        : 
        ReLU
        (inplace
        =True
        )
        , 
        '20'
        : 
        MaxPool2d
        (kernel_size
        =
        2
        , stride
        =
        2
        , padding
        =
        0
        , dilation
        =
        1
        , ceil_mode
        =False
        )
        } 
       

卷积核对应的应为卷积层(Conv2d),这里以第“3”层为例,可视化对应的参数:

conv1 = dict(model.features.named_children())['3']
kernel_set = conv1.weight.detach()
num = len(conv1.weight.detach())
print(kernel_set.shape)
for i in range(0,num):
    i_kernel = kernel_set[i]
    plt.figure(figsize=(20, 17))
    if (len(i_kernel)) > 1:
        for idx, filer in enumerate(i_kernel):
            plt.subplot(9, 9, idx+1) 
            plt.axis('off')
            plt.imshow(filer[ :, :].detach(),cmap='bwr')
torch.Size([128, 64, 3, 3])
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章