当前位置: 首页 > backend >正文

pytorch卷积层权重之 二维互相关运算(corr2d) (亲测,已解决)

卷积神经网络(Convolutional Neural Network,简称CNN)是一种深度学习模型,广泛应用于图像识别、计算机视觉和模式识别等领域。它的设计灵感来自于生物学中视觉皮层的工作原理。卷积层、池化层和全连接层组成。
卷积层主要用于提取图像的局部特征,通过卷积操作和激活函数的处理,可以学习到图像的特征表示池化层则用于降低特征图的维度,减少参数数量,同时保留主要的特征信息。
全连接层则用于将提取到的特征映射到不同类别的概率上,进行分类或回归任务。
卷积神经网络在图像处理方面具有很强的优势,它能够自动学习到具有层次结构的特征表示,并且对平移、缩放和旋转等图像变换具有一定的不变性。这些特点使得卷积神经网络成为图像分类、目标检测、语义分割等任务的首选模型。除了图像处理,卷积神经网络也可以应用于其他领域,如自然语言处理和时间序列分析。通过将文本或时间序列数据转换成二维形式,可以利用卷积神经网络进行相关任务的处理。

torch.nn:PyTorch中的神经网络模块,提供了各种神经网络层和函数,

torch.nn.functional:PyTorch中的函数形式的神经网络层,如激活函数和损失函数等

二维互相关运算(corr2d)

如前文所示,在计算卷积的过程中,需要进行卷积核翻转,在具体实现上,一般会以互相关操作来代替卷积从而会减少一些不必要的操作或开销。
翻转指从两个维度(从 上到下、从左到右)颠倒次序,即旋转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[0]):Y[i, j] = (X[i:i + h, j:j + w] * K).sum()return Y

2.二维卷积层类(Conv2D)

class Conv2D(nn.Module):def __init__(self, kernel_size,weight = None):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_(初始化)
接受一个 kemel size 参数作为卷积核的大小,并可选地接受一个 weight 参数作为卷积核的权重。如果没有提供 weignt 参数,则会随机生成一个与 kemnel size 相同形状的权重,并将其设置为可训练的参数nn.Parameter)。
定义了一个偏置项 bias ,也将其设置为可训练的参数。
b.forward(前向传播函数)
调用之前的 corr2d 函数,对输入 x和卷积核权重 self.weint 进行相关性计算,并将计算结果与偏置项self.bias 相加,作为前向传播的输出。

3.模型测试

#由于卷积层还未实现多通道,所以图像也默认是单通道
fake_image=torch.randn((5,5))
#实例化 卷积算子
conv=Conv2D(kernel_size=(3,3))
output = conv(fake_image)
print(output)

输出结果:

http://www.xdnf.cn/news/13054.html

相关文章:

  • 华为云CAE部署spring cloud服务
  • MCU ADC硬件设计注意事项
  • Elasticsearch的索引
  • EC2安装WebRTC sdk-c环境、构建、编译
  • 在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
  • 二维数组 行列混淆区分 js
  • 中山大学GaussianFusion:首个将高斯表示引入端到端自动驾驶多传感器融合的新框架
  • NLP学习路线图(三十六): 机器翻译
  • DriveGPT4: Interpretable End-to-end Autonomous Driving via Large Language Model
  • 对象回调初步研究
  • Go 语言底层(四) : 深入 Context 上下文
  • 基于UniApp开发HarmonyOS 5.0鸿蒙汽车应用的指南
  • 医疗风险预测AI模型:机器学习与深度学习方法的深度分析与实践
  • Sklearn 机器学习 缺失值处理 获取填充失值的统计值
  • 使用docker在3台服务器上搭建基于版本redis 6.x的一主两从模式
  • ChatGPT 辅助 PyTorch 开发:从数据预处理到 CNN 图像识别的全流程优化
  • 【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
  • TripGenie:畅游济南旅行规划助手:个人工作纪实(二十三)
  • 【AI】从0开始玩转混元3D⼤模型,如何让一张静态实物图片一键转为3D实物图,大模型都表示服了,超级简单易上手,快来试试!
  • Infrastructure-Based Calibration of a Multi-Camera Rig
  • 初学 pytest 记录
  • 从物理机到云原生:全面解析计算虚拟化技术的演进与应用
  • OpenCV——图像基本操作(一)
  • ABB 605系列
  • ABP vNext + HBase:打造超高吞吐分布式列式数据库
  • C++实现分布式网络通信框架MPRPC(1)--预备知识
  • 云原生安全实战:API网关Envoy的鉴权与限流详解
  • AD学习(3)
  • 【多智能体】基于LLM自进化多学科团队医疗咨询多智能体框架
  • Redis专题-实战篇一-基于Session和Redis实现登录业务