码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • pytorch初学笔记(九):神经网络基本结构之卷积层


    目录

    一、torch.nn.CONV2D

     1.1 参数介绍

     1.2 stride 和 padding 的可视化

    1.3 输入、输出通道数

    1.3.1 多通道输入

    1.3.2 多通道输出

    二、卷积操作练习

    2.1 数据集准备

    2.2 自定义神经网络

    2.3 卷积操作控制台输出结果

    2.4 tensorboard可视化

    三、完整代码 


    一、torch.nn.CONV2D

    官方文档: 

    torch.nn — PyTorch 1.13 documentation

     1.1 参数介绍

     常用的参数主要是前五个。

    (31条消息) Pytorch中dilation(Conv2d)参数详解_MaZhe丶的博客-CSDN博客_conv2d参数解释

    • in_channels (int) – Number of channels in the input image,输入图片的通道数

    • out_channels (int) – Number of channels produced by the convolution,输出图片的通道数, 代表卷积核的个数,使用n个卷积核输出的特征矩阵深度即channel就是n

    • kernel_size (int or tuple) – Size of the convolving kernel,卷积核的大小

                    e.g. if kernel size = 3, 则卷积核的大小是3*3                                        

    • stride (int or tuple, optional) – Stride of the convolution. Default: 1,步径大小

    • padding (int, tuple or str, optional) – Padding added to all four sides of the input. Default: 0

    • padding_mode (str, optional) – 'zeros', 'reflect', 'replicate' or 'circular'. Default: 'zeros'

    • dilation (int or tuple, optional) – Spacing between kernel elements. Default: 1

    • groups (int, optional) – Number of blocked connections from input channels to output channels. Default: 1

    • bias (bool, optional) – If True, adds a learnable bias to the output. Default: True

    如何进行输出图片长和宽的计算?

     

     1.2 stride 和 padding 的可视化

    conv_arithmetic/README.md at master · vdumoulin/conv_arithmetic · GitHub

    1.3 输入、输出通道数

    (31条消息) 【卷积神经网络】多输入通道和多输出通道(channels)_ZSYL的博客-CSDN博客_多输出通道

    (31条消息) (pytorch-深度学习系列)CNN的多输入通道和多输出通道_我是一颗棒棒糖的博客-CSDN博客

    彩色图像在高和宽2个维度外还有RGB(红、绿、蓝)3个颜色通道。假设彩色图像的高和宽分别是h hh和w ww(像素),那么它可以表示为一个3 × h × w 的多维数组。我们将大小为3的这一维称为通道(channel)维。

    1.3.1 多通道输入

    1.3.2 多通道输出

    多通道输出的通道数 = 卷积核的个数

    二、卷积操作练习

    2.1 数据集准备

    使用cifar10数据集的验证集进行操作。 

    1. import torch
    2. import torchvision.datasets
    3. from torch.nn import Conv2d
    4. from torch.utils.data import DataLoader
    5. #数据集准备
    6. dataset = torchvision.datasets.CIFAR10(root=".\CIFAR10",train=False,transform=torchvision.transforms.ToTensor(),download=True)
    7. #使用dataloader加载数据集,批次数为64
    8. dataloader = DataLoader(dataset,batch_size=64)

    2.2 自定义神经网络

    • 自定义名为Maweiyi的神经网络。
    • 自定义的神经网络要继承nn.Module框架。
    • 重写init和forward方法。
    • 该神经网络调用conv2d进行一层卷积,输入通道为3层(彩色图像为3通道),卷积核大小为3*3,输出通道为6。
    • 设置步长为1,padding为0,不进行填充。
    1. import torch
    2. import torchvision.datasets
    3. from torch.nn import Conv2d
    4. from torch.utils.data import DataLoader
    5. class Maweiyi(torch.nn.Module):
    6. def __init__(self):
    7. super(Maweiyi, self).__init__()
    8. self.conv1 = Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)
    9. def forward(self,x):
    10. x = self.conv1(x)
    11. return x
    12. maweiyi = Maweiyi()
    13. print(maweiyi)

    输出:

      

    2.3 卷积操作控制台输出结果

     使用for循环输出结果。

    1. # 输出卷积前的图片大小和卷积后的图片大小
    2. for data in dataloader:
    3. imgs, labels = data
    4. print(imgs.shape)
    5. # 卷积操作
    6. outputs = maweiyi(imgs)
    7. print(outputs.shape)

    输出:

    2.4 tensorboard可视化

     注意:使用tensorboard输出时需要重新定义图片大小

    • 对于输入的图片集imgs来说,tensor.size([64,3,32,32]),即一批次为64张,一张图片为三个通道,大小为32*32
    • 对于经过卷积后输出的图片集output来说,tensor.size([64,6,30,30]),通道数变成了6,tensorboard不知道怎么显示通道数为6的图片,所以如果直接输出会报错

    解决方案:

    • 使用reshape方法对outputs进行重定义,把通道数改成3,如果不知道批次数大小,可以使用-1代替,程序会自动匹配批次大小。

    outputs = torch.reshape(outputs,(-1,3,30,30))

    1. # 生成日志
    2. writer = SummaryWriter("logs")
    3. step = 0
    4. # 输出卷积前的图片大小和卷积后的图片大小
    5. for data in dataloader:
    6. imgs, labels = data
    7. # 显示输入的图片
    8. writer.add_images("inputs",imgs,step)
    9. #卷积操作
    10. outputs = maweiyi(imgs)
    11. #重定义输出图片的大小
    12. outputs = torch.reshape(outputs,(-1,3,30,30))
    13. # 显示输出的图片
    14. writer.add_images("outputs",outputs,step)
    15. step+=1
    16. writer.close()

     输出:

    input:一个批次64张图片

    output:一个批次128张 (64*2=128)

    三、完整代码 

    1. import torch
    2. import torchvision
    3. from torch.nn import Conv2d
    4. from torch.utils.data import DataLoader
    5. # 数据集下载
    6. from torch.utils.tensorboard import SummaryWriter
    7. dataset = torchvision.datasets.CIFAR10(root=".\CIFAR10", train=False, transform=torchvision.transforms.ToTensor(),
    8. download=True)
    9. # 数据加载器
    10. dataloader = DataLoader(dataset, batch_size=64)
    11. class Maweiyi(torch.nn.Module):
    12. def __init__(self):
    13. super(Maweiyi, self).__init__()
    14. # 卷积层
    15. self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)
    16. def forward(self, x):
    17. x = self.conv1(x)
    18. return x
    19. maweiyi = Maweiyi()
    20. print(maweiyi)
    21. writer = SummaryWriter("logs")
    22. step = 0
    23. for data in dataloader:
    24. imgs, labels = data
    25. # 卷积操作
    26. output = maweiyi(imgs)
    27. print(imgs.shape)
    28. print(output.shape)
    29. writer.add_images("input", imgs, step)
    30. output = torch.reshape(output, (-1, 3, 30, 30))
    31. writer.add_images("output", output, step)
    32. step = step + 1
    33. writer.close()

  • 相关阅读:
    pat 最大公约数
    漏洞复现----37、Apache Unomi 远程代码执行漏洞 (CVE-2020-13942)
    .NET 序列化枚举为字符串
    计算机毕业设计 基于SSM的问卷调查管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
    【软考---系统架构设计师】软件架构
    安卓恶意应用识别(二)(安卓APK反编译)
    DAST 黑盒漏洞扫描器 第四篇:扫描性能
    【云原生】k8s 中的 hostNetwork 和 NetworkPolicy(网络策略)讲解与实战操作
    在Windows环境下,使用VS2013配置FFmpeg+OpenCV开发环境
    音频库-bass使用
  • 原文地址:https://blog.csdn.net/weixin_45662399/article/details/127951509
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号