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

本次吃瓜教程是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 可视化网络结构

使用ResNet18的结构进行展示:

ResNet18

六月份组队学习【深入浅出PyTorch】Task05打卡笔记_第1张图片
上图是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模型网络结构

六月份组队学习【深入浅出PyTorch】Task05打卡笔记_第2张图片

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])

你可能感兴趣的:(1,学习,pytorch,人工智能)