网站设计术语,visual composer wordpress,icp备案单位网站,邯郸营销网站建设目录
一、实验介绍
二、实验环境
1. 配置虚拟环境
2. 库版本介绍
三、实验内容
0. 导入必要的工具包
1. 二维互相关运算#xff08;corr2d#xff09;
2. 二维卷积层类#xff08;Conv2D#xff09;
a. __init__#xff08;初始化#xff09;
b. forward(前向传…目录
一、实验介绍
二、实验环境
1. 配置虚拟环境
2. 库版本介绍
三、实验内容
0. 导入必要的工具包
1. 二维互相关运算corr2d
2. 二维卷积层类Conv2D
a. __init__初始化
b. forward(前向传播函数
3. 模型训练 一、实验介绍 本实验实现了一个简单的二维卷积神经网络包括二维互相关运算函数和自定义二维卷积层类并对一个随机生成是二维张量进行了卷积操作。 二、实验环境 本系列实验使用了PyTorch深度学习框架相关操作如下
1. 配置虚拟环境
conda create -n DL python3.7
conda activate DL
pip install torch1.8.1cu102 torchvision0.9.1cu102 torchaudio0.8.1 -f https://download.pytorch.org/whl/torch_stable.htmlconda install matplotlib conda install scikit-learn
2. 库版本介绍
软件包本实验版本目前最新版matplotlib3.5.33.8.0numpy1.21.61.26.0python3.7.16scikit-learn0.22.11.3.0torch1.8.1cu1022.0.1torchaudio0.8.12.0.2torchvision0.9.1cu1020.15.2 三、实验内容
ChatGPT 卷积神经网络Convolutional Neural Network简称CNN是一种深度学习模型广泛应用于图像识别、计算机视觉和模式识别等领域。它的设计灵感来自于生物学中视觉皮层的工作原理。 卷积神经网络通过多个卷积层、池化层和全连接层组成。 卷积层主要用于提取图像的局部特征通过卷积操作和激活函数的处理可以学习到图像的特征表示。池化层则用于降低特征图的维度减少参数数量同时保留主要的特征信息。全连接层则用于将提取到的特征映射到不同类别的概率上进行分类或回归任务。 卷积神经网络在图像处理方面具有很强的优势它能够自动学习到具有层次结构的特征表示并且对平移、缩放和旋转等图像变换具有一定的不变性。这些特点使得卷积神经网络成为图像分类、目标检测、语义分割等任务的首选模型。除了图像处理卷积神经网络也可以应用于其他领域如自然语言处理和时间序列分析。通过将文本或时间序列数据转换成二维形式可以利用卷积神经网络进行相关任务的处理。 0. 导入必要的工具包
import torch
from torch import nn
import torch.nn.functional as F
torch.nnPyTorch中的神经网络模块提供了各种神经网络层和函数。torch.nn.functionalPyTorch中的函数形式的神经网络层如激活函数和损失函数等。 1. 二维互相关运算corr2d
【深度学习实验】卷积神经网络一卷积运算及其Pytorch实现一维卷积窄卷积、宽卷积、等宽卷积二维卷积_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133278425?spm1001.2014.3001.5501 如前文所示在计算卷积的过程中需要进行卷积核翻转在具体实现上一般会以互相关操作来代替卷积从而会减少一些不必要的操作或开销。
翻转指从两个维度从 上到下、从左到右颠倒次序即旋转180度。互相关和卷积的区别仅仅在于卷积核是否进行翻转因此互相关也可以称为不翻转卷积。 在神经网络中使用卷积是为了进行特征抽取卷积核是否进行翻转和其特征抽取的能力无关。特别是当卷积核是可学习的参数时卷积和互相关在能力上是等价的因此为了实现上或描述上的方便起见我们用互相关来代替卷积事实上很多深度学习工具中卷积操作其实都是互相关操作。
def corr2d(X, K): h, w K.shapeY 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输入输入张量X和卷积核张量K。输出互相关运算结果张量Y形状为(X.shape[0] - K.shape[0] 1, X.shape[1] - K.shape[1] 1)。通过两个嵌套的循环遍历输出张量Y的每个元素使用局部相乘和求和的方式计算互相关运算结果。 2. 二维卷积层类Conv2D
class Conv2D(nn.Module):def __init__(self, kernel_size, weightNone):super().__init__()if weight is not None:self.weight weightelse: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 a. __init__初始化
接受一个kernel_size参数作为卷积核的大小并可选地接受一个weight参数作为卷积核的权重。如果没有提供weight参数则会随机生成一个与kernel_size相同形状的权重并将其设置为可训练的参数nn.Parameter。定义了一个偏置项bias也将其设置为可训练的参数。 b. forward(前向传播函数 调用之前的corr2d函数对输入x和卷积核权重self.weight进行相关性计算并将计算结果与偏置项self.bias相加作为前向传播的输出。 3. 模型测试
# 由于卷积层还未实现多通道所以我们的图像也默认是单通道的
fake_image torch.randn((5,5))
# 实例化卷积算子
conv Conv2D(kernel_size(3,3))
output conv(fake_image) 创建了一个大小为(5, 5)的随机输入图像fake_image然后实例化了Conv2D类传入了卷积核大小为(3, 3)。接着调用conv对象的forward方法对fake_image进行卷积操作并将结果保存在output变量中。最后输出output的形状。 注意本实验仅简单的实现了一个二维卷积层只支持单通道的卷积操作且不包含包含训练和优化等过程欲知后事如何请听下回分解。