一、实验介绍
本文主要介绍了卷积运算及其Pytorch实现,包括一维卷积(窄卷积、宽卷积、等宽卷积)、二维卷积。
二、实验环境
本系列实验使用了PyTorch深度学习框架,相关操作如下:
1. 配置虚拟环境
代码语言:javascript复制conda create -n DL python=3.7
代码语言:javascript复制conda activate DL
代码语言:javascript复制pip install torch==1.8.1 cu102 torchvision==0.9.1 cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
代码语言:javascript复制conda install matplotlib
代码语言:javascript复制 conda install scikit-learn
2. 库版本介绍
软件包 | 本实验版本 | 目前最新版 |
---|---|---|
matplotlib | 3.5.3 | 3.8.0 |
numpy | 1.21.6 | 1.26.0 |
python | 3.7.16 | |
scikit-learn | 0.22.1 | 1.3.0 |
torch | 1.8.1 cu102 | 2.0.1 |
torchaudio | 0.8.1 | 2.0.2 |
torchvision | 0.9.1 cu102 | 0.15.2 |
三、实验内容
ChatGPT:
卷积神经网络(Convolutional Neural Network,简称CNN)是一种深度学习模型,广泛应用于图像识别、计算机视觉和模式识别等领域。它的设计灵感来自于生物学中视觉皮层的工作原理。 卷积神经网络通过多个卷积层、池化层和全连接层组成。
- 卷积层主要用于提取图像的局部特征,通过卷积操作和激活函数的处理,可以学习到图像的特征表示。
- 池化层则用于降低特征图的维度,减少参数数量,同时保留主要的特征信息。
- 全连接层则用于将提取到的特征映射到不同类别的概率上,进行分类或回归任务。
卷积神经网络在图像处理方面具有很强的优势,它能够自动学习到具有层次结构的特征表示,并且对平移、缩放和旋转等图像变换具有一定的不变性。这些特点使得卷积神经网络成为图像分类、目标检测、语义分割等任务的首选模型。除了图像处理,卷积神经网络也可以应用于其他领域,如自然语言处理和时间序列分析。通过将文本或时间序列数据转换成二维形式,可以利用卷积神经网络进行相关任务的处理。
1. 一维卷积
a. 概念
一维卷积是指在一维输入数据上应用滤波器(也称为卷积核或核)的操作。一维卷积在信号处理、自然语言处理等领域中有广泛的应用。
假设我们有一个长度为n的输入向量和一个长度为m的卷积核。一维卷积的计算过程如下:
- 将卷积核与输入向量的第一个元素对齐,进行元素相乘并求和。这个求和结果将作为卷积操作的输出值的第一个元素。
- 将卷积核向右移动一个位置,再次进行相乘求和的操作。重复这个过程,直到卷积核覆盖完整个输入向量。
- 输出向量的长度将是 M - K 1,其中 M 是输入向量的长度,K 是卷积核的长度。
b. 示例
假设我们有一个输入向量 [1, 1, -1, 1, 1, 1, -1, 1, 1],和一个卷积核[1, -2, 1]。我们可以按照以下步骤进行一维卷积(窄卷积)计算:
- 第一个元素的计算:(1 * 1) (1 * -2) (-1 * 1) = -2
- 第二个元素的计算:(1 * 1) (-1 * -2) (1 * 1) = 4
- 第三个元素的计算:(-1 * 1) (1 * -2) (1 * 1) = -2
- ………………
c. 分类
卷积的结果按输出长度不同可以分为三类:
- 窄卷积(Narrow Convolution)
- 步长
- 步长