Python深度学习pytorch神经网络图像卷积运算详解

作者:Supre_yuan 时间:2021-08-04 12:19:49 

由于卷积神经网络的设计是用于探索图像数据,本节我们将以图像为例。

互相关运算

严格来说,卷积层是个错误的叫法,因为它所表达的运算其实是互相关运算(cross-correlation),而不是卷积运算。在卷积层中,输入张量和核张量通过互相关运算产生输出张量。

首先,我们暂时忽略通道(第三维)这一情况,看看如何处理二维图像数据和隐藏表示。下图中,输入是高度为3、宽度为3的二维张量(即形状为 3 × 3 3\times3 3×3)。卷积核的高度和宽度都是2。

Python深度学习pytorch神经网络图像卷积运算详解

注意,输出大小略小于输入大小。这是因为我们需要足够的空间在图像上“移动”卷积核。稍后,我们将看到如何通过在图像边界周围填充零来保证有足够的空间移动内核,从而保持输出大小不变。


def corr2d(X, K):
"""计算⼆维互相关运算。"""
h, w = K.shape
Y = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1))
for i in range(Y.shape[0]):
for j in range(Y.shape[1]):
Y[i, j] = (X[i:i + h, j:j + w] * K).sum()
return Y

卷积层

卷积层对输入和卷积核权重进行互相关运算,并在添加标量偏置之后产生输出。所以,卷积层中的两个被训练的参数是卷积核权重核标量偏置。就像我们之前随机初始化全连接层一样,在训练基于卷积层的模型时,我们也随机初始化卷积核权重。

基于上面定义的corr2d函数实现二维卷积层。在__init__构造函数中,将weight和bias声明为两个模型参数。前向传播函数调用corr2d函数并添加偏置。


class Conv2D(nn.Module):
def __init__(self, kernel_size):
super().__init__()
self.weight = nn.Parameter(torch.rand(kernel_size))
self.bias = nn.Parameter(torch.zeros(1))

def forward(self, x):
return corr2d(x, self.weight) + self.bias

高度和宽度分别为 h和 w的卷积核可以被称为 h × w 卷积或 h × w 卷积核。我们也将带有 h × w 卷积核的卷积层称为 h × w 卷积层。

特征映射

下图中输出的卷积层有时被称为特征映射(Feature Map),因为它可以被视为一个输入映射到下一层的空间维度的转换器。在CNN中,对于某一层的任意元素 x x x,其感受野(Receptive Field)是指在前向传播期间可能影响 x x x计算的所有元素(来自所有先前层)。

Python深度学习pytorch神经网络图像卷积运算详解

注意,感受野的覆盖率可能大于某层输入的实际区域大小。

例如上图:给定 2 × 2 卷积核,阴影输出元素值19的接收域是阴影部分的四个元素。假设之前输出为 Y ,其大小为 2 × 2 ,现在我们再其后附加一个卷积层,该卷积层以 Y 为输入,输出单个元素 z。再这种情况下, Y上的  z的接收字段包括 Y 的所有四个元素,而输入的感受野包括最初所有九个输入元素。
因此,当一个特征图中的任意元素需要检测更广区域的输入特征时,我们可以构建一个更深的网络。

来源:https://blog.csdn.net/weixin_43880225/article/details/120617288

标签:pytorch,神经网络,图像卷积,运算
0
投稿

猜你喜欢

  • Anaconda之conda常用命令介绍(安装、更新、删除)

    2021-06-11 22:52:03
  • python通过pillow识别动态验证码的示例代码

    2023-08-27 02:29:21
  • 从git仓库中删除.idea文件夹的小妙招

    2022-10-29 04:12:00
  • Python中处理无效数据的详细教程

    2021-11-18 06:11:07
  • python 面向对象之class和封装

    2021-10-01 18:01:21
  • python使用tkinter库实现五子棋游戏

    2021-07-25 20:35:17
  • FireFox浏览器使用Javascript上传大文件

    2023-11-17 09:49:27
  • Python格式化输出--%s,%d,%f的代码解析

    2022-10-31 06:26:44
  • MySQL命令终端有beep声

    2009-02-26 15:27:00
  • 一篇文章搞懂:词法作用域、动态作用域、回调函数及闭包

    2022-10-01 00:21:05
  • Python采集股票数据并制作可视化柱状图

    2023-01-10 12:34:27
  • Node.js系列之连接DB的方法(3)

    2024-05-03 15:55:26
  • MySQL5.7更改密码时出现ERROR 1054 (42S22)的解决方法

    2024-01-23 12:12:47
  • Python机器学习NLP自然语言处理基本操作词袋模型

    2023-08-20 06:23:30
  • 人脸检测实战终极之OpenCV+Python实现人脸对齐

    2023-10-01 02:03:07
  • 安装MySQL 5后无法启动(不能Start service)解决方法小结

    2024-01-23 07:29:29
  • MySQL数据库执行Update卡死问题的解决方法

    2024-01-15 16:06:50
  • Oracle中instr函数使用方法

    2023-07-23 19:14:06
  • 浅谈Python中os模块及shutil模块的常规操作

    2022-05-02 21:42:50
  • 解决vue热替换失效的根本原因

    2024-04-30 10:25:57
  • asp之家 网络编程 m.aspxhome.com