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.mfbz.cn/a/879121.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 内置应用裁剪

文章目录 查询目标 APK 的 Android.mk(或 Android.bp)文件apk裁剪方式1.注释或删除.mk/.bp文件2.将 APK 名称加入“OVERRIDES”配置项中3.自定义“PRODUCT_PACKAGES_REMOVE”配置项 查询目标 APK 的 Android.mk(或 Android.bp)文件…

一、Numpy使用

1、numpy的简单使用 import numpy as np #利用as给numpy起一个别名np# 使用array来承接这个数组 array np.array([[1,2,3],[2,3,4]])print(array) print("number of dim:", array.ndim) # ndim 数组维度 print("shape:", array.shape) # 数组的形…

VoIP协议

VoIP协议是VoIP业务的规范标准。我们都知道VoIP业务有着压倒性的优势。随着网络应用的多元化和低成本化发展,VoIP业务直接冲击着传统通信市场,那么目前VoIP协议目前常用的协议,如H.323、SIP、MEGACO和MGCP。 H.248 H.248是定义网关控制协议的ITU建议书…

71、哪吒开发板试用结合oak深度相机进行评测

基本思想:收到intel的开发板-小挪吒,正好手中也有oak相机,反正都是openvino一套玩意,进行评测一下,竟然默认是个window系统,哈哈

动态内存管理之malloc,free,calloc和realloc函数

Hello,各位小伙伴们,小编在这里祝福各位中秋佳节快乐呀,今天让我们来学习一下动态内存管理吧! 引言 像我们之前在开辟一段空间的时候你可能会使用整型变量来申请一块空间,或者使用数组来申请一段连续的空间&#xff…

网络安全学习(五)Burpsuite实战

bp功能确实强大,记录一个bp手机验证码的实例。 当然,首先要打开bp,设置好浏览器的代理。 浏览器访问实例网址www.xxx.com(隐藏真实网址)。 真实网址有个注册功能,需要手机验证码。 好的,我们…

国产GPU距离“平替”英伟达还有多远?

在8月的尾声,一则关于象帝先计算技术(重庆)有限公司的消息如同惊雷般炸响在科技界,不仅让公司员工措手不及,也让整个市场陷入了深思。据传,这个曾被誉为国产GPU领域新星的独角兽企业,在最后一个…

力扣题解815

大家好,欢迎来到无限大的频道。祝大家中秋节快乐​。 今日继续给大家带来力扣题解。 题目描述(困难)​: 公交路线 给你一个数组 routes ,表示一系列公交线路,其中每个 routes[i] 表示一条公交线路&…

【Linux】探索文件I/O奥秘,解锁软硬链接与生成动静态库知识

目录 1、C文件接口 1.1什么是当前路径? 1.2程序默认打开的文件流: 2、系统文件I/O 2.1.接口介绍: 2.1.1open: 参数讲解; flags如何实现一个参数就可以有多个参数传参的效果? open函数的返回值: 3…

SLAM面经1(百度)

百度面经 百度共三面,如果面试效果俱佳,会增加一个hr面。前二面主要是技术面,分为在线coding+代码知识+专业知识+工程能力。第三面是主管面,偏向于管理方面,和hr面相似。 一面 1)在线coding 在线coding的考试内容为下面力扣的变种。 2)专业面 (1)VINS-FUSION与ORB…

html+css+js网页设计 旅游 龙门石窟4个页面

htmlcssjs网页设计 旅游 龙门石窟4个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…

SpringBoot3核心特性-核心原理

目录 传送门前言一、事件和监听器1、生命周期监听2、事件触发时机 二、自动配置原理1、入门理解1.1、自动配置流程1.2、SPI机制1.3、功能开关 2、进阶理解2.1、 SpringBootApplication2.2、 完整启动加载流程 三、自定义starter1、业务代码2、基本抽取3、使用EnableXxx机制4、完…

eclipse使用 笔记02

创建一个项目: 【File-->New-->Dynamic Web Project】 进入页面: Project name为项目命名 Target runtime:选择自己所对应的版本 finish创建成功: 创建成功后的删除操作: 创建前端界面: 【注意&a…

第十一章 【后端】商品分类管理微服务(11.1)——创建父工程

第十一章 【后端】商品分类管理微服务 11.1 创建父工程 项目名称:EasyTradeManagerSystem:Easy 表示简单易用,Trade 表示交易,Manager 表示管理,System 表示系统,强调系统在商品交易管理方面的便捷性,简称 etms。 新建工程 yumi-etms yumi-etms 作为所有模块的父工程,…

TortoiseSVN图标不显示的解决

解决办法一:修改svn软件的图标设置 1、选中一个文件夹或在桌面空白处,右击进入svn的setting 2、进入setting->Icon Overlays,Status cache选择Default或shell,然后点击应用 3、查看文件,图标可以正常显示 解决办法二:修改注册表的文件夹顺序 问题现象: 1、svn一直…

linux驱动开发-arm汇编基础

目录 写在前面 1、Cortex-A7 处理器有 9 种处理模式 2、Cortex-A 寄存器组 通用寄存器 1、汇编语法 2、Cortex-A7 常用汇编指令 2.1 处理器内部数据传输指令 2.1.1 传输数据操作类型 1、MOV指令 2、MRS指令 3、MSR指令 2.2、存储器访问指令 2.2.1 LDR指令 2.2.2 …

行车记录仪内存卡无法读取:问题解析与高效数据恢复策略

在智能出行的时代,行车记录仪作为车辆安全的守护者,其重要性不言而喻。然而,当行车记录仪的内存卡遭遇无法读取的困境时,不仅会影响行车记录仪的正常工作,更可能导致关键证据和美好回忆的丢失。本文将深入探讨行车记录…

基础 Web 开发

1. 构建项目&#xff1a; 2.添加依赖 <dependencies> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupI…

Vue3 : ref 与 reactive

目录 一.ref 二.reactive 三.ref与reactive的区别 四.总结 一.ref 在 Vue 3 中&#xff0c;ref 是一个用于创建可读写且支持数据跟踪的响应式引用对象。它主要用于在组件内部创建响应式数据&#xff0c;这些数据可以是基本类型&#xff08;如 number、string、boolean&…

【卷起来】VUE3.0教程-09-整合Element-plus

最后一次课了&#xff0c;给个关注和赞呗 &#x1f332; 简介 Element Plus 是一个基于 Vue 3 的高质量 UI 组件库。它包含了丰富的组件和扩展功能&#xff0c;例如表格、表单、按钮、导航、通知等&#xff0c;让开发者能够快速构建高质量的 Web 应用。Element Plus 的设计理念…