PyTorch框架:(3)使用PyTorch框架构构建神经网络分类任务

news/2024/9/20 14:58:55

目录

0、背景

1、分类任务介绍:

 2、网络架构

 3、手写网络

3.1、读取数据集

3.2、查看数据集

3.3将x和y转换成tensor的格式

3.4、定义model


0、背景

其实分类和回归本质上没有太大区别,只是说最终得到的结果是不同的,以及使用的损失函数是不同的,中间的网络架构相对于来说是比较固定的。

1、分类任务介绍:

 分类任务中标签的设计稍微不同,比如上图中的9他预测出来就是123456789中的哪一个,不是这样的,而是我们的标签他也是一个one_hot encoding的编码,这个one_hot encoding的编码我们要得到的最终他预测的一个结果不是一个值而是10个值(0到9这10个数),我们得到的是当前这个输入它属于0到9各自的可能性(比如上图0.12表示属于1的概率是12%,属于9的概率是87%);最终在分类任务当中得到的一个结果是:比如说你做10分类,最终得到的结果是10个概率值,表示他分别属于每一个类的概率值,那么100分类的话就会得到100个概率值,这个就是基于当前输入,得到我最终结果的一个过程。结果是这样的概率值,所以标签我得是跟结果一致的条件才行,如果说在这里我们拿到的标签他不是一个50000x10的,需要再把它做一个one_hot encoding,对标签来说是一样的,如果标签是9的话,那我one_hot encoding就是(0000000001),所以意思就是我们的结果是one_hot encoding编码那么我们的标签也要相应的转化成one_hot encoding编码的形式。

 2、网络架构

 3、手写网络

3.1、读取数据集

 

会判断你有没有下载过Mnist数据集,如果没下载过,他会自动帮你下载。

 解压文件。

3.2、查看数据集

 读进来一张图像,50000是样本数,784=28x28x1=h x w x c(长宽高和颜色通道),Mnist数据集是黑白图,他只有一个颜色通道,可以把784当做特征数。

3.3将x和y转换成tensor的格式

3.4、定义model

介绍functional的方法:

有时间使用nn.Module,有时间使用nn.functional的方法?Module里边有的,functional里边也有,如何选择? 

所以一般是模型中有带学习参数的,比如说一些卷积层和一些全连接层,但凡带参数的我们使用nn.Module;一些激活函数或者是一些损失函数,但凡这些不带参数的没有w和b的我们就用nn.functional里边的方法,这样更直接一些。

 分类问题一般使用交叉熵损失函数,所以这里直接调用functional里边的cross_entropy(所以这里就是在functional当中有很多不带参数类似于激活函数,损失函数这些都是直接拿functiuonal当中的直接调用)。

指定batch_size=64,将x_batch和y_batch全部取出来,定义偏执参数。然后就是如何得到一个损失值,直接把loss_func拿到手,里边需要传进来的是当前的一个预测值和标签值,定义的model函数就是预测值,yb就是标签值,预测和标签都有了就可以得到他实际的损失值,所以通过function当中调用的一些函数,我们是可以直接拿过来进行计算的。

介绍Module的方法: 

这个方法用的比较多,在一些正规的项目或者是比较大型的项目中用的比较多,比如是这样构建自己的网络的:

 

 先把nn导进来,定义一个类构建自己的网络,一定要去继承不只是光定义一个类,继承的就是你导进来的nn,nn.module一定要去继承,不做继承后边写的东西都没用,都白写,因为很多核心功能都是在这个里边写好了,我们直接继承过来就行了,不光要去继承,还得把他的构造函数给拿出来,先定义一个方法def __init__(self),里边继承一下人家的构造函数,super.__init__(),接下来定义自己的模块,隐层和输出层,这里边只是定义有哪些层,我们一会是要用到,。

用到的时候怎么用,就要下边再写一个方法,再定义一个forward方法,forward方法的意思就是在这里你不用去写反向传播了,反向传播是pytorch框架人家自动帮你去做的,只要你把前向传播定义好,整个网络图就有了,有了网络图之后,人家会自动的帮你计算反向传播,所以这里不用麻烦的再写一个反向传播,只用写一个前向传播就可以了,def forward(self,x)前向传播里边有一个输入,这些参数可以随意写,有哪些输入,这里有了输入,先通过哪个层就是我们之前定义的层,第一个是定义的hidden层,x输入进去传进到hidden层,调用F里边的激活函数;将第一个隐层结果传入到第二个隐层,第三步再传到我的输出层得到最终的一个结果,再把结果return回去就可以了。

PS:实际在做神经网络或者模型的时候,最主流的方法就是我自己定义一个类,在这个类里边继承nn.Module模块,写好继承构造函数,然后写好有哪些层,这是初始化方法;初始完之后,写一个前向传播,前向传播里边写一个输入,基于输入一步步的去走,看得到的结果,然后返回回去就完事了,这个就是前向传播,反向传播我们不用自己去写,它会自动的帮我们完成这样一件事;

定义完网络之后,我们可以查看这个网络里边都有什么东西,所以首先把这个类给他实例化出来,net表示我们刚才构造好的这个网络,打印net看一下。

  net是定义好的网络,写一个循环展示一下网络当前的名字以及参数,把所有的参数全部进行一个打印:(所以可以看出我们定义好net网络之后,人家已经自动的帮我们初始化了w和b)

 

 

 

 ---------------------上述就是如何去构建一个网络-------- 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/17761.html

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

相关文章

PyTorch框架:(4)如何去构建数据

接PyTorch框架:(3) 1、最基本的方法 (1)使用模块 模块1:TensorDataset、模块2:DataLoader 自己去构造数据集,然后一个batch一个batch的取数据,自己去写构造数据太麻烦…

使用Python,OpenCV进行银行支票数字和符号的OCR

使用Python,OpenCV进行银行支票数字和符号的OCR(第一部分)1. 效果图2. 原理2.1 MICR E-13B字体2.2 从MICR E-13B参考图像中提取数字和符号3. 源码3.1 MICR E-13B符号和数字提取3.2 银行支票数字和符号OCR参考上一篇介绍了:使用Pyh…

Jquery php 点击td变成input,修改后失去焦点发送数据

html部分 <Td><?php echo $row[bigclassid]?></Td> <td height"25" width"241" class"bigclassname"><?php echo $row[bigclassname]?></a></td> Js部分 <script> /**//* * 说明&#xff1…

PyTorch框架:(5)使用PyTorch框架构建卷积神经网络

基于pytorch构建一个非常简单的卷积神经网络&#xff0c;以Mnist数据集为例演示基本的流程 1、导工具包 2、读取数据 &#xff08;把该写的超参数全部写出来&#xff09; PS&#xff1a;当前输入图像的大小&#xff0c;注意这里使用卷积网络处理Mnist数据他就不是一个一个像素…

使用Python,OpenCV进行基本的图像处理——提取红色圆圈轮廓并绘制

使用Python&#xff0c;OpenCV进行基本的图像处理——提取红色圆圈轮廓并绘制1. 效果图1.1 形态学图像处理效果图1.2 转换HSV色彩空间提取2. 源码2.1 形态学图像处理提取源码2.2 转换HSV色彩空间提取源码写这篇博客源于博友的提问&#xff0c;想提取图片中的红色圆圈坐标&#…

PyTorch框架:(6)图像识别实战常用模块解读

1、TorchVision 官网&#xff1a;torchvision — Torchvision 0.10.0 documentation 在torchvision这个模块当中&#xff0c;包含了很多后续需要的功能&#xff1a; 需要自己安装这个模块pip install torchvision。安装完之后我们就可以使用这里边的三大核心模块了。 &…

Java 使用itextPdf7操作pdf,写入照片这一篇就够了

Java 使用itextPdf7操作pdf&#xff0c;写入照片这一篇就够了1. 效果图1.1 M*N列图片&#xff08;无边界&有边界&#xff09;1.2 图片重叠1.3 文字背景图片1.4 图片与文字相邻 & 图片文字Rowspan样式1.5 一个单元格多图片 & 多图片文本内容1.6 单元格中文本图片位置…

Flash气泡回弹效果

好久没有碰过Flash了&#xff0c;今天温习一下AS3.0&#xff0c;做了一个回弹效果&#xff0c;气泡回弹本想着怎么可以定义气泡的不同颜色&#xff0c;这样可以做出更绚丽的效果&#xff0c;或者更进步一&#xff0c;气泡和气泡直接回弹&#xff0c;想了老半天没有想出来&#…