当前位置:   article > 正文

神经网络之多维卷积的那些事(一维、二维、三维)

多维卷积

前言

一般来说,一维卷积用于文本数据,二维卷积用于图像数据,对宽度和高度都进行卷积,三维卷积用于视频及3D图像处理领域(检测动作及人物行为),对立方体的三个面进行卷积 。二维卷积的用处范围最广,在计算机视觉中广泛应用。

一维卷积Conv1d

一维卷积最简单,实质是对一个词向量做卷积,如下所示:
img

  • 图中的输入的数据维度为8,过滤器的维度为5。卷积后输出的数据维度为8−5+1=4
  • 如果过滤器数量仍为1,输入数据的channel数量变为16,则输入数据维度为8×16
  • 一维卷积常用于序列模型,自然语言处理领域。

Pytorch中nn.Conv1d卷积运算要求输入源是3维,输入源的三个维度分别是:第一个维度代表每个序列的个数即样本数,第二个维度代表每一个序列的通道数,第三个维度代表这个词向量序列,如下所示:

import torch
import torch.nn as nn
# 输入源:1个样本,16个通道,8个数据
a = torch.randn(1,16,8)
# 卷积:输入通道为16,输出通道为1,卷积核大小 5*5
conv = nn.Conv1d(16, 1, 5)
c = conv(a)
print('a:', a.size())
print('c:', c.size())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

output

a: torch.Size([1, 16, 8])
c: torch.Size([1, 1, 4])
  • 1
  • 2

二维卷积Conv2d

二维卷积是最常见、用途最广泛的卷积。先假定卷积核(过滤器)数量为1,图片通道数为1,卷积操作如下:
img

  • 图中的输入的数据维度为14×14,卷积核数量为1,图片通道数为1
  • 二维卷积输出的数据尺寸为8−5+1=4,即4×4

这是最简单的二维卷积的场景,现在重点来了,假定图片通道数为3,卷积核的数量为1,则卷积操作如下:
在这里插入图片描述

  • 如上图所示,输入源是6*6*3(图片大小6*6,三个通道),卷积核大小3*3,filters(卷积核数量)=1,即权重矩阵是3*3*3*1,得到的结果4*4*1(图片大小4*4,一个通道)
  • 其实就是三个3*3的卷积核分别对图片的三个通道做卷积,然后把结果相加得到一个4*4的图片。所以,这里卷积核w的参数个数是(3*3*3+1)*1,(输入通道3,卷积核大小3*3,一个偏置,输出通道1)
  • 上图卷积 Pytorch中表示为:nn.Conv2d(3,1,kernel_size=(3,3),stride=1)

到这里可能有人会问,卷积核大小为3*3,为什么变成3*3*3了?
可以细想一下,图片的大小是6*6*3(图片大小6*6,三个通道),也就是三维的图片,二维的卷积是肯定不能对其操作的,所以卷积核的维度会随着图片的输入通道改变,如果图片的输入通道是3,那么卷积核的维度也是3,如果图片的输入通道是1,那么卷积核的维度也是1,这也就是为什么Pytorch中nn.Conv2d的输入通道要与图片的输入通道保持一致的原因,否则无法进行卷积操作。

现在,假定图片通道数为3,卷积核的数量为2,则卷积操作如下

在这里插入图片描述

  • 如上图所示,输入源是6*6*3(图片大小6*6,三个通道),卷积核大小3*3,filters=2,即权重矩阵是3*3*3*2,得到的结果4*4*2
  • 上图每一个卷积核卷积参数的个数是(3*3*3+1)*2
  • 上图卷积 Pytorch中表示为:nn.Conv2d(3,2,kernel_size=(3,3),stride=2)

计算图如下所示:

在这里插入图片描述

二维卷积常用于计算机视觉、图像处理领域。

Pytorch中nn.Conv2d卷积运算要求输入源是4维,输入源的四个维度分别是:第一个维度代表图片的个数即样本数,第二个维度代表每一张图片的通道数,后面二个维度代表图片的像素矩阵,如下所示:

import torch
import torch.nn as nn
a = torch.Tensor(
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/689548
推荐阅读
相关标签
  

闽ICP备14008679号