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

news2024/11/16 1:21:15

一、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.coloradmin.cn/o/2142464.html

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

相关文章

攻防世界--->hackme

学习笔记。 下载 查壳。 64ida打开。 进入main&#xff1a; 跟进&#xff1a; 这是密文 咋一看这程序感觉很复杂&#xff0c;很复杂&#xff1a; 脚本&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h>int main() {unsigned char …

Qt --- 信号和信号槽

前言 Linux信号Signal&#xff0c;系统内部的通知机制&#xff0c;进程间通信方式。 信号源&#xff1a;谁发的信号。 信号的类型&#xff1a;哪种类别的信号。 信号的处理方式&#xff1a;注册信号处理函数&#xff0c;在信号被触发的时候自动调用执行。 Qt中的信号和Lin…

Bugku---密码学---乐谱密码

题目出处&#xff1a;首页 - Bugku CTF ✨打开后发现是一张乐符图 ✨一般我们所熟悉的「Do Re Mi Fa Sol La Si」&#xff0c;若写成音名&#xff0c;即是「C D E F G A B」。不过德国人习惯使用的音名则是「C D E F G A H」&#xff0c;「B」代表 音名B♭ 。 C也就是后面的4&…

Rust练手项目,写个有趣的小工具定时从一言网获取一段有趣的话并推送通知

Rust练手项目&#xff0c;写个有趣的小工具 代码 继续练习Rust, 写个小工具定时从一言网获取一段有趣的话并提示&#xff0c;如下 练习以下Rust点 并发编程 Mutex, Arc指针使用HTTP请求Windows Gui 代码 Cargo.toml [package] name "funny_word" edition "20…

YOLOv8目标检测模型——遥感小目标检测经验分享

小目标检测——YOLOV8 一、引言 背景介绍 &#xff08;1&#xff09;目标检测的重要性 目标检测在许多领域都具有极其重要的作用。在自动驾驶中&#xff0c;目标检测能够识别道路上的障碍物和行人&#xff0c;确保行车安全。在视频监控中&#xff0c;目标检测能够实时发现异…

【matlab】生成 GIF 的函数(已封装可直接调用)

文章目录 前言一、函数输入与输出二、函数代码三、例程&#xff08;可直接运行&#xff09;参考文献 前言 生成 gif 图片时遇到的问题&#xff0c;为了后续调用方便&#xff0c;封装为函数 一、函数输入与输出 输入&#xff1a; cell_figure: cell 数组&#xff0c;数组元素是…

Chainlit集成LlamaIndex并使用通义千问模型实现AI知识库检索网页对话应用增强版

前言 之前使用Chainlit集成LlamaIndex并使用通义千问大语言模型的API接口&#xff0c;实现一个基于文档文档的网页对话应用。 可以点击我的上一篇文章《Chainlit集成LlamaIndex并使用通义千问模型实现AI知识库检索网页对话应用》 查看。 本次针对上一次的代码功能进一步的完善…

Cursor与Copilot:编程界的双雄对决

引子 在技术快速发展的当下&#xff0c;编程几乎成为了现代社会的基础能力。Cursor与Copilot作为当前备受瞩目的编程助手&#xff0c;各自展现出了独特的魅力。它们不仅改变了程序员的工作方式&#xff0c;更是提升了代码编写的效率&#xff0c;成为了编程界的“双雄”。 Curs…

软件安全、逆向分析、加密与解密--crackme2详解

本次使用到的软件有&#xff1a;PEiD、IDA、X32dbg 刚学逆向不久&#xff0c;可能有些地方会有错误&#xff0c;欢迎各位大佬指导 执行 运行程序 点击About 点击确定&#xff0c;输入如图数据 点击try Now 点击确定&#xff0c;回到主界面 点击Exit&#xff0c;退出 查壳&a…

Docker:SpringBoot项目创建Docker镜像并推送到阿里云容器镜像仓库

0. 准备工作 os&#xff1a;macos 15.0 jdk&#xff1a;1.8 docker&#xff1a;26.0.0 1. 阿里云容器镜像服务创建实例 创建个人版 个人实例创建成功 个人镜像加速器地址 2. 安装Docker Desktop Docker Desktop是Docker的一个集成工具&#xff0c;非必须&#xff0c;过程…

指纹与指甲检测系统源码分享

指纹与指甲检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

这个时代唯一“不变“的又是{变}

这个时代唯一不变的就是“变”&#xff0c;所以每个人都得有规划意识&#xff0c;首先要对自己的价值有清晰的认知&#xff0c;你核心卖点是什么。第二&#xff0c;你取得的成绩是通过平台成就的还是通过自身努力取得的&#xff0c;很多人在一家平台待久了之后&#xff0c;身上…

在Unity UI中实现UILineRenderer组件绘制线条

背景介绍 在Unity的UI系统中&#xff0c;绘制线条并不像在3D世界中那样直观(使用Unity自带的LineRender组件在UI中连线并不方便,它在三维中更合适)。没有内置的工具来处理这种需求。如果你希望在UI元素之间绘制连接线&#xff08;例如在UI上连接不同的图标或控件&#xff09;&a…

26. 构建一个矩形平面几何体

定义矩形几何体顶点坐标 一个矩形平面&#xff0c;可以至少通过两个三角形拼接而成。而且两个三角形有两个顶点的坐标是重合的。 注意三角形的正反面问题&#xff1a;保证矩形平面两个三角形的正面是一样的&#xff0c;也就是从一个方向观察&#xff0c;两个三角形都是逆时针…

Docker 消息队列RabbitMQ 安装延迟消息插件

介绍 RabbitMQ的官方推出了一个插件&#xff0c;原生支持延迟消息功能。该插件的原理是设计了一种支持延迟消息功能的交换机。当消息投递到交换机后可以暂存一定时间&#xff0c;到期后再投递到队列。 查看版本号 docker exec rabbit名字 rabbitmqctl version根据版本下载 插…

neo4j(spring) 使用示例

文章目录 前言一、neo4j是什么二、开始编码1. yml 配置2. crud 测试3. node relation 与java中对象的关系4. 编码测试 总结 前言 图数据库先驱者 neo4j&#xff1a;neo4j官网地址 可以选择桌面版安装等多种方式,我这里采用的是docker安装 直接执行docker安装命令: docker run…

一键更换软件源的工具——chsrc

前言 经常用pip&#xff0c;ubuntu的apt&#xff0c;或者centos的yum等包下载工具的人不可避免的一件事就是——“更换软件源”&#xff0c;因为以上三个包下载工具的软件源一般都是默认为国外的官方网站&#xff0c;由于国情问题&#xff0c;下载速度就会非常慢&#xff0c;所…

华为OD机试 - 最大矩阵和 - 卡德恩算法(动态规划)(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

线性代数(宋浩版)(4)

2.4逆矩阵 &#xff08;不要把矩阵放在分母上&#xff09; 方阵的行列式 性质1 性质2 性质3 伴随矩阵&#xff08;只有方阵才有&#xff09; 1.求出所有元素的代数余子式&#xff08;矩阵先求行列式&#xff09;。 2.按行求的代数余子式按列放。 定理1&#xff08;重要&…

MySQL篇(窗口函数/公用表达式(CTE))

目录 讲解一&#xff1a;窗口函数 一、简介 二、常见操作 1. sumgroup by常规的聚合函数操作 2. sum窗口函数的聚合操作 三、基本语法 1. Function(arg1,..., argn) 1.1. 聚合函数 sum函数&#xff1a;求和 min函数 &#xff1a;最小值 1.2. 排序函数 1.3. 跨行函数…