码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 卷积操作的不同类型


    文章目录

    • 1. 一维卷积
    • 2. 二维卷积
    • 3. 三维卷积
    • 4. 扩张卷积
    • 5. 空洞卷积
    • 6. 分组卷积

      一般而言,一维卷积用于文本数据;二维卷积用于图像数据,对宽度和高度都进行卷积;三维卷积用于视频及3D图像处理领域,对立方体的三个面进行卷积。

    1. 一维卷积

      对一个词向量做一维卷积

    上图输入词向量的维度为 8,卷积核的维度为 5,输出长度为 8−5+1=4。PyTorc使用torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride, padding, dilation, groups, bias=True)实现一维卷积操作。

    import torch
    import torch.nn as nn
    
    a = torch.randn(1,16,8)  # input:(样本数, 通道数, 词向量维度)
    conv = nn.Conv1d(16, 1, 5)  # Conv1d:(in_channels, out_channels, kernel_size)
    c = conv(a)
    
    print('a:', a.size())  # torch.Size([1, 16, 8])
    print('c:', c.size())  # torch.Size([1, 1, 4])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2. 二维卷积

      二维卷积是最常见、用途最广泛的卷积。下图展示了二维卷积操作示意图

    图中输入为 RGB 三通道的图片,图片大小为6*6。卷积核大小为3*3,卷积核数量为1。输出特征图大小为4*4,输出特征图数量为1。PyTorc使用torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, dilation, groups, bias=True)。

    import torch
    import torch.nn as nn
    
    a = torch.Tensor([[[[1,2,3,4],
                    [5,6,7,8],
                    [9,10,11,12],
                    [13,14,15,16]]],
                   [[[1,2,3,4],
                    [5,6,7,8],
                    [9,10,11,12],
                    [13,14,15,16]]]])
    print('a:',a.size())  # torch.Size([2, 1, 4, 4])
    
    conv = nn.Conv2d(1,6,2)  # Conv2d:(in_channels, out_channels, kernel_size)
    c = conv(a)
    print('c:',c.size())  # torch.Size([2, 6, 3, 3])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3. 三维卷积

      三维卷积示意图如下,一个3*3*3的卷积核在立方体上进行卷积,得到输出。

    在二维卷积中,作用在不同通道上的卷积核参数是不同的。而在三维卷积中,则共用一个 3D 的卷积核,3D 卷积核的参数在整个图像上权重共享。三维卷积核比二维卷积核多了一个depth维度。这个深度可能是视频上的连续帧,也可能是立体图像中的不同切片。PyTorc使用torch.nn.Conv3d(in_channels, out_channels, kernel_size, stride, padding, dilation, groups, bias=True)。

    import torch
    import torch.nn as nn
    
    input = torch.randn(32, 3, 10, 224, 224)  # input:(N, C, D, H, W)
    
    # 每一维度相同参数配置
    conv1 = nn.Conv3d(3, 64, kernel_size=3, stride=2, padding=1)
    output = conv1(net_input)
    print(output.shape)  # shape:[32, 64, 5, 112, 112]
    
    # 每一维度不同参数配置
    conv2 = nn.Conv3d(3, 64, (2, 3, 3), stride=(1, 2, 2), padding=(0, 1, 1))
    net_output = conv2(net_input)
    print(net_output.shape) # shape:[32, 64, 9, 112, 112]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    4. 扩张卷积

    5. 空洞卷积

    6. 分组卷积

    【参考】

    1. 神经网络之多维卷积的那些事 (一维、二维、三维);
    2. 3D 卷积神经网络详解;
    3. [pytorch][基础模块] torch.nn.Conv3D 使用样例与说明;
    4. 官方文档:TORCH.NN;
  • 相关阅读:
    Redis篇之设置外网可访问redis的方法
    React Native 0.70 版本发布,Hermes 成为默认引擎
    备战数学建模47-数模常规算法之图论(攻坚站12)
    程序性能优化
    0.前期准备-后台管理系统
    复杂数据没头绪?
    高速DSP系统设计参考指南(一)高速DSP设计面临的挑战
    6个可解释AI (XAI)的Python框架推荐
    循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(12) -- 使用代码生成工具Database2Sharp生成WPF界面代码
    stm32|esp8266|阿里云平台|温湿度
  • 原文地址:https://blog.csdn.net/qq_41731861/article/details/127923812
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号