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

一、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.xdnf.cn/news/142902.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

09_Python流程控制_分支

流程控制 流程控制是管理程序执行顺序的重要组成部分。分支(也称为条件语句)是流程控制的一种形式,它允许程序根据某些条件的真假来选择执行不同的代码路径。 顺序结构:按部就班执行选择结构:根据条件不同执行循环结…

【图像匹配】基于‌墨西哥帽小波(Marr小波)算法的图像匹配,matlab实现

博主简介:matlab图像代码项目合作(扣扣:3249726188) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于‌墨西哥帽小波(Marr小波)算法的图像匹配,用…

代码随想录训练营 Day62打卡 图论part11 Floyd 算法 A * 算法

代码随想录训练营 Day62打卡 图论part11 Floyd 算法 例题:卡码97. 小明逛公园 题目描述 小明喜欢去公园散步,公园内布置了许多的景点,相互之间通过小路连接,小明希望在观看景点的同时,能够节省体力,走最短…

MOE论文汇总2

TASK-CUSTOMIZED MASKED AUTOENCODER VIA MIXTURE OF CLUSTER-CONDITIONAL Experts 这篇论文提出了一种新颖的自监督学习方法,名为“Mixture of Cluster-conditional Experts (MoCE)”,旨在解决传统Masked Autoencoder (MAE)在不同下游任务中可能遇到的负…

Linux基础3-基础工具4(git,冯诺依曼计算机体系结构)

上篇文章:Linux基础3-基础工具3(make,makefile,gdb详解)-CSDN博客 本章重点: 1. git简易使用 2. 冯诺依曼计算机体系结构介绍 一. git使用 1.1 什么是git? git是用于管理代码版本的一种工具,我们在如GitHub&#xf…

并发带来的对象一致性问题

多线程操作带来数据不一致情况分析,简单demo。 public class Object_IS {private Student_Object so new Student_Object("张三", 123);public static void main(String[] args) throws InterruptedException {Object_IS os new Object_IS();os.test1(…

利用语义搜索和混合查询策略提升RAG系统的准确性

人工智能咨询培训老师叶梓 转载标明出处 在构建基于大模型(LLM)的生成式问答系统(Generative Q&A)时,检索增强生成(Retrieval-Augmented Generation, RAG)方法被广泛采用。RAG通过结合检索…

Leetcode—删除有序数组的重复项

题目描述 思路 思路:定义两个指针/变量,dst指向第一个位置,scr指向下一个位置,判断scr和dst位置的数据。 case1:相等,scr; case2: 不相等,dst,nums[dst]nums[scr],scr; 画图解释 定义两个指针…

基于SpringBoot+Vue+MySQL的社区医院管理系统

系统展示 系统背景 在当前医疗体系日益完善的背景下,社区医院作为基层医疗服务的重要一环,其管理效率和服务质量直接关系到居民的健康福祉。为了提升社区医院的管理水平,优化患者就医体验,我们设计了一套基于SpringBoot、Vue.js与…

09年408考研真题解析-计算机网络

[题34]在无噪声情况下,若某通信链路的带宽为3kHz,采用4个相位,每个相位具有4种振幅的QAM调制技术,则该通信链路的最大数据传输速率是(B) A.12 kbps B.24 kbps C.48 kbps D.96 kbps 解析&#xff…

主流的Java的webapi接口模板特点分析

Java 作为一种广泛应用于企业级开发的编程语言,其在 Web API 开发中具有重要的地位。随着 Java 生态系统的不断发展,市面上涌现了多种不同的 Web API 框架和设计模式。不同的 Web API 模板在设计上各有特点,适合不同类型的开发需求。本文将详…

从0-1 用AI做一个赚钱的小红书账号(不是广告不是广告)

大家好,我是胡广!是不是被标题吸引过来的呢?是不是觉得自己天赋异禀,肯定是那万中无一的赚钱天才。哈哈哈,我告诉你,你我皆是牛马,不要老想着突然就成功了,一夜暴富了,瞬…

【Java 优选算法】双指针(下)

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 有效三角形的个数 题目链接 解法 解法1:暴力枚举--->O(n^3) 解法2:利用单调性,使用双指针来解决---->O(n^2) 优化:对整个数组进行排序先固定最大数在最大数的左…

微服务_入门1

文章目录 一、 认识微服务二、 微服务演变2.1、 单体架构2.2、 分布式架构2.3、 微服务2.4、 微服务方案对比 三、 注册中心3.1、 Eureka3.2、 Nacos3.2.1、服务分级存储模型3.2.2、权重配置3.2.3、环境隔离 一、 认识微服务 二、 微服务演变 随着互联网行业的发展,…

Spark Streaming基础概论

1. 简介 1.1 什么是 Spark Streaming? Spark Streaming 是 Apache Spark 的一个扩展模块,专门用于处理实时数据流。它通过将数据流切分为一系列小批次(微批次)进行处理,使得开发者能够使用与批处理相同的 API 来处理…

【MRI基础】混叠伪影

基本概念 混叠(aliasing),也称为环绕伪影(wrap around artifacts),是一种常见的伪影,当视场 (FOV) 小于实际成像物体时,可能会在磁共振成像 (MRI) 中出现。空间定位由选定组织样本内的自旋频率决定。选定视…

正点原子阿尔法ARM开发板-IMX6ULL(六)——通过官方SDK完成实验

文章目录 一、引言1.1 cc.h1.2 main.c1.2 fsl_common.h、MCIMX6Y2.h、fsl_iomuxc.h1.3 对于宏定义能多个参数 其他 一、引言 在开发过程中,如果一个人来写寄存器、汇编等东西,会变得特别繁琐,好在官方NXP官方给出了SDK包, 1.1 c…

解决IDEA每次创建新项目时都要指定Maven仓库和Maven配置文件的问题

文章目录 0. 前言1. 打开新项目的设置2. 搜索 Maven 相关的配置3. 更改Maven主路径、配置文件、本地仓库4. 更改新项目的Maven配置后没生效 0. 前言 在 IDEA 中每次创建新项目时,使用的都是默认的 Maven 仓库和默认的配置文件,需要我们手动修改&#xf…

对称密码中的密钥是如何实现安全配送的?

对称密码在设计时就存在一个天然的缺陷,就是要求通信双方都要持有相同的密钥。确保密钥的安全传输和防止密钥泄露,往往比加密算法本身更为复杂和困难。一旦密钥被第三方获取,通信的安全性就会受到严重威胁,从而可能暴露敏感信息。…

网络协议全景:Linux环境下的TCP/IP、UDP

目录 1.UDP协议解析1.1.定义1.2.UDP报头1.3.特点1.4.缓冲区 2.TCP协议解析2.1.定义2.2.报头解析2.2.1.首部长度(4位)2.2.2.窗口大小2.2.3.确认应答机制2.2.4.6个标志位 2.3.超时重传机制2.4.三次握手四次挥手2.4.1.全/半连接队列2.4.2.listen2.4.3.TIME_…