Pytorch深度学习【十二】

news2025/1/15 12:45:28

填充和步幅

  • 卷积核带来的问题—输入形状不断减小
  • 更大的卷积核可以更快的减小输出大小
    • 形状从 n h ∗ n w n_h * n_w nhnw减少到
      ( n h − k h + 1 ) ∗ ( n w − k w + 1 ) (n_h-k_h+1)*(n_w-k_w+1) (nhkh+1)(nwkw+1)
  • 解决方案
    • 填充—在输入周围添加额外的行/列—一般用0填充
    • 理论依据
      • 填充 p h p_h ph p w p_w pw列,输出形状为
        ( n h − k h + p h + 1 ) ∗ ( n w − k w + p w + 1 ) (n_h-k_h+p_h+1)*(n_w-k_w+p_w+1) (nhkh+ph+1)(nwkw+pw+1)
      • 为了保证输出结构的不变化我们一般取
        p h = k h − 1 , p w = k w − 1 p_h = k_h - 1,p_w = k_w - 1 ph=kh1,pw=kw1
    • 步幅—每次卷积核移动的步数
    • 输入大小比较大的时候,输出可以成倍减少
    • 理论依据
      • 给定高度 s h s_h sh和宽度 s w s_w sw的步幅,输出形状是
        ⌊ ( n h − k h + p h + s h ) / s h ⌋ ∗ ⌊ ( n w − k w + p w + s w ) / s w ⌋ \lfloor(n_h-k_h+p_h+s_h)/s_h\rfloor*\lfloor(n_w-k_w+p_w+s_w)/s_w\rfloor ⌊(nhkh+ph+sh)/sh⌊(nwkw+pw+sw)/sw
      • 如果 p h = k h − 1 p_h=k_h-1 ph=kh1, p w = k w − 1 p_w=k_w-1 pw=kw1
        ⌊ ( n h + s h − 1 ) / s h ⌋ ∗ ⌊ ( n w + s w − 1 ) / s w ⌋ \lfloor(n_h+s_h-1)/s_h\rfloor*\lfloor(n_w+s_w-1)/s_w\rfloor ⌊(nh+sh1)/sh⌊(nw+sw1)/sw
      • 如果输入高度和宽度可以被步幅整除
        ( n h / s h ) ∗ ( n w / s w ) (n_h/s_h)*(n_w/s_w) (nh/sh)(nw/sw)
  • 总结
    • 填充和步幅是卷积层的超参数
    • 填充在输入周围添加额外的行/列,来控制输出形状的减少量
    • 步幅是每次滑动核窗口时到行/列的步长,可以成倍的减少输出形状
  • 代码实现
import torch
from torch import nn
def com_conv2d(conv2d, X):
  X = X.reshape((1, 1)+X.shape)
  Y = conv2d(X)
  return Y.reshape(Y.shape[2:])
conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1)
# padding就是填充
conv2d = nn.Conv2d(1, 1, kernel_size(5, 3), padding=(2, 1))
# 上下填充2*2行左右填充1*2
nn.Conv2d(1, 1, kernel_size=(3, 5), padding=(0, 1), stride=(3, 4))
# 上下填充0*2行左右填充1*2行,行间步长为3,列间为4

多输入输出通道

  • 多个输入通道

    • 彩色图像可能有RGB三个通道
    • 转换为灰度会丢失信息
    • 每个通道都有一个对应的卷积层,结果是所有通道卷积结果的和—卷积有多通道融合性能
      在这里插入图片描述
  • 多个输出通道

    • 无论有多少输入通道,到目前为止我们只用到单输出通道
    • 我们可以有多个三维卷积核,每个核生成一个输出通道
      在这里插入图片描述
  • 多个输入和输出通道

    • 每个输出通道可以识别特定模式
    • 输入通道核识别并组合输入的模式
  • 1*1卷积层

    • 它不识别空间模式,只是通道融合功能
    • 相当于输入形状为 n h n w ∗ c i n_hn_w*c_i nhnwci,权重为 c o ∗ c i c_o*c_i coci的全连接层
  • 总结

    • 输出通道是卷积层的超参数
    • 每个输入通道有独立的二维卷积核,所有通道结果相加得到一个输出通道结果
    • 每个输出通道有独立的三维卷积核
    • 我们可以理解每一层卷积层都是将上一层识别出来的小模式放入本层,进行更大面积的模式识别,就像识别一个猫,可以首先识别其眼睛而后到头部,最后得到全部特征
  • 代码实现多输入输出

    • 从零实现
    import torch
    from d2l import torch as d2l
    # 定义多通道输入
    def corr2d_multi_in(X, K):
        return sum(d2l.corr2d(x, k) for x, k in zip(X, K))
        # 将不同通道的进行卷积操作,而后进行融合
    X = torch.tensor([[[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]],
                      [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]])
    K = torch.tensor([[[0.0, 1.0], [2.0, 3.0]], [[1.0, 2.0], [3.0, 4.0]]])
    # 定义多通道输出
    corr2d_multi_in(X, K)
    def corr2d_multi_in_out(X, K):
        return torch.stack([corr2d_multi_in(X, k) for k in K], 0)
    # k是将K中的四维取出三个维度与输入进行卷积而后形成一个卷积后的列表 在dim=0维度上堆积起来
    # k in K就是遍历每一层卷积核
    K = torch.stack((K, K + 1, K + 2), 0)
    K.shape
    corr2d_multi_in_out(X, K)
    # 利用全连接实现1*1的卷积
    def corr2d_multi_in_out_1x1(X, K):
        c_i, h, w = X.shape
        c_o = K.shape[0]
        X = X.reshape((c_i, h * w))
        K = K.reshape((c_o, c_i))
        Y = torch.matmul(K, X)
        return Y.reshape((c_o, h, w))
    
    X = torch.normal(0, 1, (3, 3, 3))
    K = torch.normal(0, 1, (2, 3, 1, 1))
    
    Y1 = corr2d_multi_in_out_1x1(X, K)
    Y2 = corr2d_multi_in_out(X, K)
    assert float(torch.abs(Y1 - Y2).sum()) < 1e-6
    
    • 调用pytorch实现
    net = nn.Conv2d(1, 2, kernel_size=3, padding=1, stride=2)
    # 输出通道为2输入通道为1
    

池化层

  • 卷积层的不足
    • 具有良好的特征提取功能但对位置太敏感
  • 池化层—需要一定程度的平移不变性—弱化位置的敏感性
  • 池化层的两种常见形式
    • 最大池化
      • 2*2的池化面积— m a x ( 0 , 1 , 2 , 3 ) = 3 max(0,1,2,3) = 3 max(0,1,2,3)=3
    • 均值池化
      • 2*2的池化面积—求解对应区间的均值
  • 填充、步幅和多个通道
    • 池化层和卷积层类似,都具有填充、步幅和窗口大小这三类超参数
    • 缓解卷积层带来的位置高度敏感性
    • 没有可学习参数
    • 在每个输入通道应用池化层以获得相应的输出通道—不会和卷积一样进行同一维度多通道融合
    • 输出池化层的通道数=输入池化层的通道数
  • 代码实现
    • 从零实现
    import torch
    from torch import nn
    from d2l import torch as d2l
    def pool2d(X, pool_size, model='max'):
      p_h, p_w = pool_size
      Y = torch.zeros((X.shape[0] - p_h + 1, X.shape[1] - p_w + 1))# 生成输出大小
      for i in range(Y.shape[0]):
        for j in range(Y.shape[1]):
          if model == 'max':
            Y[i, j] = X[i:i+p_h, j:j+p_w].max()
          elif model == 'avg':
            Y[i, j] = X[i:i+p_h, j:j+p_w].mean()
      return Y
    
    • 调用pytorch实现
    pool2d = nn.MaxPool2d(3) # 默认是一个3*3的窗口步幅也是3
    pool2d = nn.MaxPool2d((2, 3), padding=(1,1), stride=(2, 3))
    # 根据通道的输入会时生成多个通道的池化层
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/162609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Odoo 16 企业版手册 - 库存管理之报告

报告 正确监控库存操作将帮助您轻松分析和理解库存管理的工作流程。Odoo可以为您提供一个专用平台&#xff0c;特别是用于为您的组织中完成的库存操作生成报告&#xff0c;并在图形和表格视图中准确表示数据。您可以实时自定义报告&#xff0c;以根据您的要求获得细致的报告。在…

Nvm,Nrm使用教程

NVM介绍 NVM全称node.js version management &#xff0c;专门针对node版本进行管理的工具&#xff0c;通过它可以安装和切换不同版本的node.js 使用场景 我目前的公司有很多项目&#xff0c;其中有一些老项目用的是vue2.5左右了webpack版本也比较低&#xff0c;只能使用10.16.…

[前端笔记——WEB基础] 1.WEB基本概念

[前端笔记——WEB基础] 1.WEB基本概念基本概念1.资源 resourse2.链接3.HTTP 协议4.网页的真实样子&#xff1a;HTML静态网页与动态网页1.静态网页2.动态网页现代网站架构1.网站架构当我们访问一个网站时&#xff0c;后台都会发生什么事情捏?www——万维网 www&#xff1a;Worl…

Android系统启动(三) — SystemServer处理过程

system_server 进程主要是用于创建系统服务&#xff0c;AMS、WMS、PMS 都是由它创建的。 具体来说&#xff0c;SystemServer 进程被创建后&#xff0c;主要做了以下工作&#xff1a; 启动 Binder 线程池&#xff0c;这样就可以与其他进程进行通信&#xff1b;创建 SystemServi…

JDK9下载、安装和配置环境变量图解

下载 1.输入&#xff1a;https://www.oracle.com/ 2.选择“java download” 3.点击“java archive” 下拉找到 java9 4.点击进入&#xff0c;选择windows版本 5.勾选&#xff0c;下载。需要账号下载 安装 1.双击安装包&#xff0c;下一步 2.选择安装路径&#xff0c;…

旅游景区官网(网站、小程序)小开发可以实现哪些功能?

伴随着我们生活水平的提升和手上的余钱愈来愈多&#xff0c;绝大多数人一定会选取去不同地方开展旅游&#xff0c;旅游也成為了经济发展的一大支撑。将来便捷用户和旅游业的发展趋势&#xff0c;打造出旅游景区官网&#xff08;网站、H5、小程序等&#xff09;开发设计是十分关…

【UE4 第一人称射击游戏】50-用另一种方法实现僵尸随机漫游 僵尸攻击玩家时造成伤害

上一篇&#xff1a;【UE4 第一人称射击游戏】49-僵尸攻击动画本篇效果&#xff1a;使用另一种逻辑实现了僵尸的随机漫游僵尸攻击玩家时会对玩家造成实质上的伤害步骤&#xff1a;打开“SimpleAI”&#xff0c;当僵尸看见玩家时&#xff0c;设置变量“CanSeePlayer”为False我们…

深入了解 LinkedBlockingQueue阻塞队列,分析扩容机制以及小顶堆原理

1. 前言 今天的目的是为了深入了解下优先队列的机制。不过优先队列是基于大小顶堆实现的&#xff0c;但是其本质就是一个二叉树&#xff0c;所以今天会讲一些铺垫知识&#xff0c;好了&#xff0c;废话不多说了&#xff0c;让我们开始吧 2. 前置知识 2.1 大顶堆 完全二叉树&am…

1.2、操作系统的特征

1、并发 并发\color{red}并发并发&#xff1a;指两个或多个事件在同一时间间隔内发生。 这些事件宏观上是同时发生\color{red}宏观上是同时发生宏观上是同时发生的&#xff0c;但微观上是交替发生\color{red}微观上是交替发生微观上是交替发生的。 并行\color{red}并行并行&am…

STM32F103学习笔记(10)——I2C多路复用器TCA9548A使用

一、简介 TCA9548A 器件配有八个可通过 I2C 总线控制的双向转换开关。串行时钟/串行数据 (SCL/SDA) 上行对可扩展为 8 个下行对或通道。根据可编程控制寄存器的内容&#xff0c;可选择任一单独 SCn/SDn 通道或者通道组合。这些下游通道可用于解决 I2C 从器件地址冲突。例如&…

高精度加法【c++实现】超详细讲解

高精度存在的意义 大家一定都知道int和long long是有极限的&#xff08;如下表&#xff09;&#xff0c;如果超了就无法计算正确结果了&#xff0c;那该用什么方法来计算呢&#xff1f;这就是我们今天要说的算法———高精度算法。&#xff08;本文只讲加法&#xff09; 类型…

超级浏览器的防关联效果怎么样?

很多从事跨境电商业务的朋友&#xff0c;都尝试用各种手段来防止账号关联&#xff0c;现在有很多不要钱的超级浏览器可以下载使用&#xff0c;但是很多人却不敢把高价值的账号放在超级浏览器上面&#xff0c;今天我们就来详细聊聊这个问题。说超级浏览器之前&#xff0c;我们先…

抖音世界杯直播的低延迟是怎么做到的?

动手点关注干货不迷路世界杯已经结束了&#xff0c;梅西带领阿根廷时隔三十六年之后终于如愿捧杯。抖音直播提供的 4K 超高清超低延迟看播能力给亿万观众留下了深刻的印象&#xff0c;决赛的 PCU 达到 3700w&#xff0c;在这样大规模并发下&#xff0c;如何能稳定流畅地做到更低…

GO语言配置和基础语法应用(一)

一、golang的下载和安装 这一步比较简单&#xff0c;直接打开go的官网&#xff0c;点击download即可&#xff0c;个别人打开慢可以用中国的镜像网站&#xff0c;之后访问的速度和下载第三方库的速度会快很多&#xff0c;之后傻瓜式安装一路到底即可。 配置环境变量 注意&#…

经典文献阅读之--Multi-modal Semantic SLAM(多模态语义SLAM)

0. 简介 在复杂动态环境下&#xff0c;如何去建立一个稳定的SLAM地图是至关重要的。但是现在当前的SLAM系统主要是面向静态场景。目前相较于点云的分类与分割而言。视觉的识别与分割会更加容易。这就可以根据语义信息提高对环境的理解。文章《Multi-modal Semantic SLAM for C…

JavaScript 如何正确的读懂报错信息

文章目录前言一、查看报错1.控制台报错2.终端报错二、查找错误演示总结前言 一、查看报错 如何阅读报错信息, 根据信息快速锁定错误. 1.控制台报错 红色报错信息格式: xxxx Error: xxxxx报错信息xxxxx 最终报错文件:行编号 at 最终报错方法名 (最终报错文…

PySpark中RDD的数据输出详解

目录 一. 回顾 二.输出为python对象 collect算子 演示 reduce算子 演示 take算子 演示 count算子 演示 小结 三.输出到文件中 savaAsTextFile算子 演示 配置Hadoop依赖 修改rdd分区为1个 小结 四.练习案例 需求&#xff1a; 代码 一. 回顾 数据输入: sc.paralle…

Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context_学习笔记

Transformer-XL学习笔记 一、Transformer-XL出现的原因 首先说明Transformer的变形版本Transformer-XL出现的原因&#xff1a; transformer作为一种特提取器&#xff0c;在NLP中有广泛的应用&#xff0c;但是transformer需要对输入的序列设置固定的长度&#xff0c;例如在Ber…

(考研湖科大教书匠计算机网络)第一章概述-第四节:计算机网络的性能指标

文章目录&#xff08;1&#xff09;速率&#xff08;2&#xff09;带宽&#xff08;3&#xff09;吞吐量&#xff08;4&#xff09;时延①&#xff1a;基本概念②&#xff1a;计算公式&#xff08;5&#xff09;时延带宽积&#xff08;6&#xff09;往返时间RTT&#xff08;7&a…

dp(六) 线性dp整合 最长(公共子串、公共子序列、上升子序列、回文子串)

1、最大公共子串_牛客题霸_牛客网​编辑 2、最长上升子序列(一)_牛客题霸_牛客网 3、最长回文子串_牛客题霸_牛客网 4、最长公共子序列(二)_牛客题霸_牛客网 #include <iostream> using namespace std; #include<vector>int main() {string str1,str2;cin>>…