码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • pytorch深度学习实战19


    第十九课 卷积层的填充和步幅

    目录

    理论部分

    实践部分


    理论部分

    首先看一下卷积层的填充。

    上图所示的情况会有个问题,如果卷积核不变的话(一直是5*5的卷积核),那么我的网络最多也就只能弄到第七层了,如果我想搭建更深的网络的话是不被允许的。

    那么填充就是可以解决这个问题。

    填充的基本思想是在输入的四周添加0元素,以达到输出比之前更大的目的。

    填充的行数和列数的选取是有讲究的,如下图所示,填充完毕后它的输出与填充之前的输出的形状是一样的,区别就是网络的层数会因为输入的填充而变多,卷积效果更好。

    下面看一下步幅。

    如果输入比较大的话,而且我卷积核很小的话,我需要经过很多层才会得到一个较小的输出。这个很痛苦,因为层数越多计算越复杂!

    那么这里的步幅就是解决这个问题的,他可以使输出的大小和层数是指数相关的。

    如上图所示,正常来讲的话,当卷积核做好一次卷积运算的话会往右移一个,但是设置了步幅之后,它会往右移两个或往右移多个。

    注意这里的步幅还可以设置高度,也就是说每行算完卷积后,我往下移几个。

    实践部分

    代码:

    1. #填充和步幅
    2. #在所有侧边填充1个像素
    3. import torch
    4. from torch import nn
    5. def comp_conv2d(conv2d, X):
    6. X = X.reshape((1, 1) + X.shape)#给输入矩阵添加输入和输出通道数这两个信息
    7. Y = conv2d(X)
    8. return Y.reshape(Y.shape[2:])
    9. conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1)#上下左右各填充一行
    10. X = torch.rand(size=(8, 8))
    11. print(comp_conv2d(conv2d, X).shape)#n-k+p+1=8-3+2+1=8
    12. #填充不同的高度和宽度
    13. conv2d = nn.Conv2d(1, 1, kernel_size=(5, 3), padding=(2, 1))#左右添加1列,上下添加2行
    14. print(comp_conv2d(conv2d, X).shape)#输出的行:8-5+4+1;输出的列:8-5+2+1
    15. #将高度和宽度的步幅设置为2
    16. conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1, stride=2)#stride表示步幅设为2,这是p=k-1的情况
    17. print(comp_conv2d(conv2d, X).shape)#所以(n+step-1)/s=(8+2-1)/2=4.5向下取整=4
    18. torch.Size([4, 4])
    19. #一个稍微复杂的例子
    20. conv2d = nn.Conv2d(1, 1, kernel_size=(3, 5), padding=(0, 1), stride=(3, 4))#这里p不等于k-1
    21. print(comp_conv2d(conv2d, X).shape)#所以【(n-k+p+s)/s】=[(8-3+0+3)/3]=向下取整=2
    22. #同样列数为【(8-5+1+4)/4】=2
  • 相关阅读:
    网络协议:扫盲再出发
    使用Dockerfile部署springboot项目 (入门级教程 简单易懂)
    隔离式DC/DC高压模块5V12V24V转50V110V250V300V380V600V1100V短路保护直流升压可调开关控制电源模块
    MySQL查询性能优化七种武器之索引下推
    我31岁,做美工一月8K,后面我该咋办?
    python使用pip命令安装出错:Could not fetch URL https://pypi.org/simple/selenium/
    C# iText 7 切分PDF,处理PDF页面大小
    2023 年全国大学生数学建模A题目-定日镜场的优化设计
    npcap开发指南
    正方形(c++题解)
  • 原文地址:https://blog.csdn.net/weixin_48304306/article/details/127911887
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号