2024/9/17 pytorch-卷积神经网络

ops/2024/9/21 8:58:01/

一、torch.nn

pytorch有很多接口,其中的torch.nn可以让我们方便的调用以便生成神经网络各层

1.torch.nn.Module

是一个构成神经网络层的一个基本类别,一般生成一个类别来继承nn.module

torch.tensor(a)将a初始化为一个tensor类型数据

一般这种已经固定写好的类别调用其中方法时可直接对生成的类别对象传参

二、卷积操作

1.基本概念

为使图片的维度不进行压缩,出现了卷积神经网络

卷积神经网络神经网络的基础上增加了卷积层和池化层

卷积层数据与滤波器(卷积核)之间的运算相当于神经网络中数据与权重之间的运算

卷积核相当于权重

偏置(bias):

填充(padding):

在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据(比0等),这称为填充

填充默认值为0,填充是为了调整输出的大小

步幅(stride):

应用滤波器的位置间隔称为步幅(stride)。增大步幅后,输出大小会变小。而增大填充后,输出大小会变大.这里,假设输入大小为(H, W),滤波器大小为(FH, FW),输出大小为 (OH, OW),填充为P,步幅为S。此时,输出大小可进行计算:

2.利用代码进行卷积操作

步骤:

生成tensor型的输入数据和卷积核:

此时input (5,5)  weight(3,3)都是二维

我们要用到的卷积函数 torch.nn.functional.conv2d

所以要将input和weight都转化为4维,说明选取的数据个数,通道数,高,宽

调用函数输出:

2.构建一个卷积层

获取数据集,并使用dataloader读取数据

构建卷积层及前向操作

卷积层要求输入通道为3,输出通道为6,卷积核为3*3

实例化层对象,调用卷积层,实现输入转输出

使用tensorboard进行可视化:

由于out图片通道数过高无法使用add_image,使用torch.reshape将其维度做出改变

高和宽不变,将其通道数变为3,使用占位符-1,让计算机自行计算剩余像素位

可看vgg16模型

注:

torch.nn里面的Conv2d类和torch.nn.functional里的conv2d方法要进行一个区分

两个东西所要 设置的参数不同,用法也不同

要在类里设置一个卷积层一般使用的是Conv2d类

单纯为了完成一个卷积操作可以只调用方法

三、池化层

1.基本概念

池化是缩小高,长空间上的运算

池化是为了在保留数据特征的同时,缩小数据量

一般选用最大池化,池化也会有个池化核,池化核的窗口大小一般与步幅相同

池化只在窗口内选取数据,不做其他操作,不改变通道数

最常用的池化类:torch.nn.MaxPool2d

MaxPool2d — PyTorch 2.4 documentation

一般只设置第一个参数

关于ceil_mode:这个参数的设计是关于如何处理剩余数据,当池化窗口无法填满时,已填的数据称为剩余数据

2.构建一个池化层

获取数据集,从数据集中选取数据

书写池化层类及其方法

实例化池化层对象,使用tensorboard将数据可视化

非线性变换的主要目的是给神经网络赋予更多非线性特征,非线性特征越多越能训练出符合各种曲线的模型

四、非线性激活层

1.ReLu函数

特征:输入大于0,则照常输出;输入小于0则输出0

只有一个参数inplace,将这个参数设置为Ture则新值取代旧值;设置为False则生成一个新元素

2.sigmoid函数

获取图片数据集,使用sigmoid函数对其进行非线性变换

五、线性层

模型经过前期的变换最后一般会进行一些线性变换,旨在将多数的输入通过变换为少数的输出

即1x1x4096-->1x1x1000这段

线性变换要求输入的每个数据特征都是一维的可以输入多个,但每个数据都是独立的一维

这就要将前面的多维数据排列压缩为一维,使用torch.flatten方法

获取数据:

创建线性层:

要将每一批数据进行线性运算,首先使用torch.flatten将数据的维度变为一维,再对变换后的数据进行线性运算要将每一批数据进行线性运算

输入的特征长度是由将多维度数据变换为一维数据变换而来

对每批数据的维度进行比较:

比较三种:初始多维度数据,压缩后的一维数据,线性变换后的一维数据

六、构造CIFAR10模型

CIFAR10中每个图片维度为 (3,32,32)

该模型中有三个卷积层,三个池化层,一个flatten层,两个线性层

数据在卷积过后H和W无变化,需合理设计padding,根据公式将padding=2,stride=1

方法1:分开写每一层,分别调用

方法2:将所有的层都利用sequential放入一个模型中,直接使用模型

生成一个类似数据集的数据对模型进行验证

64是因为输入了64个数据


http://www.ppmy.cn/ops/113695.html

相关文章

系统优化工具 | Windows Manager v2.0.5 便携版

Windows Manager 是一款专为Microsoft Windows 10/11设计的系统优化和管理软件。它集成了多种实用程序,旨在帮助用户更好地管理和优化Windows操作系统。该软件的功能包括系统清理、系统优化、系统修复、硬件信息查看和系统设置调整等。 系统清理:Window…

通用大建模VS垂直大建模

通用大建模和垂直大建模是两种不同的建模方法,用于描述和分析不同类型的系统或问题。下面是对这两种建模方法的解释和比较: 1. 通用大建模(General Modeling): 通用大建模是一种广义的建模方法,适用于各种…

机器学习(西瓜书)第 10 章 降维与度量学习

10.1 k近邻学习kNN k 近邻(k-Nearest Neighbor,简称kNN)学习是一种常用的监督学习方法,其工作机制非常简单:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个 “邻居”的信息来进行预测.通常,在…

IPv6(四)

文章目录 Path MTUIPv6配置 Path MTU IPv4 对于数据过大的数据包会执行切片操作,但是切片有可能会造成设备性能的降低 IPv6使用Path MTU来传递数据过大的数据包 依次会协商最小的 MTU 单元为了减少中间转发设备的压力,中间转发设备不对 IPv6 报文进行分片…

一文搞懂YOLO系列目标检测:从YOLOv5到YOLOv10

YOLO(You Only Look Once)系列目标检测算法自2015年首次提出以来,已经成为计算机视觉领域中最受欢迎的目标检测框架之一。YOLO的核心优势在于其速度快、易于训练,并且能够实现实时目标检测。本文将详细介绍YOLO系列的发展&#xf…

炉石传说服务器排队怎么解决?GameViewer远程炉石传说回归远程排队攻略!

《炉石传说》国服将于9月25日回归,没想到登录就送2023年错过的全部卡牌,还有皮肤、表情和特效。 不管是老玩家和新玩家已经迫不及待了吧?要是开服刚好遇上在外面没法回家待在电脑前,又担心服务器太火爆,排队太慢&#…

BUUCTF-MISC-隐藏的钥匙

下载题目文件,获得了一张格式为jpg的路飞图片 按照习惯,首先使用十六进制编译器打开文件,这里我使用winhex打开文件 首先考虑有没有flag直接隐写在文件中,按照图示步骤查找flag字段 我们查到了flag,通过经验和图中base…

【GVINS】

【GVINS】 1. GVINS的系统特点2. GVINS的融合导航存在问题3. GVINS的信号的组成4. GVINS的信号的组成 原理推导知乎 1. GVINS的系统特点 概述了一种名为GVINS的系统,它旨在解决视觉-惯性里程计(VIO)在长时间运行时出现的漂移问题。GVINS通过…