人工智能学习pyTorch自建数据集及可视化结果实现过程
作者:Swayzzu 发布时间:2022-08-04 14:54:33
一、自定义数据集
现有数据如下:
5个文件夹,每个文件夹是神奇宝贝的一种。
每个图片形状、大小、格式不一。
我们训练CNN的时候需要的是tensor类型的数据,因此需要将所有的图片进行下列转换:
1.对文件夹编号,进行映射,比如妙蛙种子文件夹编号0,皮卡丘编号1等。
2.对文件夹中所有图片,进行编号的对应,这个就是标签。并保存为一个csv文件。
3.图片信息获取:分为train,val,test
4.处理图片,使其成为torch可以处理的类型
1.文件夹映射
前半部分为文件夹的映射。我们希望传入数据的时候直接传入文件夹的名字,而文件夹所在的路径就是py文件所在的路径,因此这样可以直接读取。对于路径的操作使用os.path.join进行。
2.图片对应标签
输入的filename,就是我们将图片和标签信息存储的文件。
使用glob.glob方法,可以轻松调取路径下的所有指定类型的文件。
将名字和标签对应好后,通过csv.writer,可以将信息以csv格式写入新文件。
以上是保存的部分,在这个函数中,我们还要重新读取一下这个文件,因为要在这个类中获得最终的图片,以及标签,并且返回。
3.训练及测试数据分割
这里是第一步的图片的后半部分,导入了图片之后,对其进行分割,这里是按照训练、交叉验证、测试,分别是0.6,0.2,0.2进行分割的。
分割完毕后的self.images, self.labels,就可以拿来进行tensor相关的处理了。
4.数据处理
上面几步是准备工作,接下来定义的__getitem__是为了能够使train_loader = DataLoader()这一语句实现。在这里面直接将数据进行我们希望进行的转换。比如大小、旋转、裁剪等。
最后返回处理好的图片,以及tensor化的标签。
另外,还需要定义一个__len__,使得我们可以获得数据集长度。
二、ResNet处理
我们要用ResNet对图片进行处理,因此其中的参数需要进行一定的修改。
主要的修改部分是ResNet18之中的resblock模块。因为我们希望输入的是3通道,224*224的图片,因此在这里对通道,步长进行一定的修改,并进行测试,成功之后便可以进行训练了。
三、训练及可视化
1.数据集导入
同时把GPU设备相关代码准备好,并且由于需要可视化,因此先实例化visdom,并且在终端上输入python -m visdom.server,打开visdom监视终端。
2.测试函数
先把模式改为eval(),接下来就是通过model,去训练测试集,得到标签,并统计正确率。
3.训练过程及可视化
和之前的一样,还是先实例化一个优化器,选择损失函数模式,实例化ResNet18,然后进行训练。
在这里由于要展示,因此先对损失值,交叉验证分数分别设置一个初始的线,通过append的方法,画出我们的损失曲线,以及交叉验证分数曲线。
通过torch.save方法存储我们的最优解。
最后通过把存储好的最优解调用起来,使用测试集,来测试最终的效果。
最终获得的交叉验证准确率89%,测试集准确率88%,损失值及交叉验证结果的图像如下:
来源:https://blog.csdn.net/Swayzzu/article/details/121164368
猜你喜欢
- 一、前言今天我们将用Python来创建一个属于自己的音乐播放器。为此,我们将使用三个软件包:Tkinter:用于UIPygame:播放音乐o
- 情景一: var yx01 = new function() {return "圆心"}; alert(yx01);我们
- 目录Python3 面向对象一丶面向对象技术简介对象可以包含任意数量和类型的数据。2.Python面向对象的三大特性一、继承 二、
- 我们知道在超级链接的title属性中,是不支持html代码的,我们只能使用文本来处理提示信息。当然借助js可以做出很好的效果。这里讲一下如何
- 无论何时,IE总是让页面制作者感到那么的黯然销魂,尤其是IE6,IE7次之,虽然IE8已经做了很大的改进,但由于XP用户的数量实在太大,而且
- 描述的意思是HTML为中心的前端开发也差不多是web标准的意思。1.HTML是基础2.CSS依靠选择符提供视觉;3.Javascript 依
- 在数组中搜索一个特定值,如果找到返回TRUE否则返回FALSE boolean in_array(mixed needle,array ha
- 前言常见的通知方式有:邮件,电话,短信,微信。短信和电话:通常是收费的,较少使用;邮件:适合带文件类型的通知,较正式,存档使用;微信:适合告
- 微软最近出了个 必应bing 缤纷桌面,使用下来还是不错,可以每天更换Bing首页的北京作为壁纸,但是该软件有个不好的地方是,安装后桌面上会
- 1.请实现一个装饰器,把函数的返回值+100然后返回def wapper(func):def innner(*args,**kwargs):
- 作者:Rung András原文:How To Engage Customers In Your E-Commerce Website对于我
- 当我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,尤其是在进行数据检验、净化和转换时,将会面临很大
- function chinese2unicode(Str) &nbs
- 1、授权机制的主要作用是什么?授权机制的基本作用是给某个主机上的用户对某个数据库以select,insert,update和detete的权
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 6 - Manipulating HTML通过Mo
- 代码如下:declare @cmd nvarchar(4000) set @cmd = N'exec [?].sys.sp_chan
- 简单的Python代码:用户登录注册利用业余时间,写了一个用户进行登录注册的代码,非常简单。主要实现的功能是:1、可以进行用户登录,在用户进
- 本文详细介绍了asp中如何使用sql语句删除数据库中的记录,初学asp者来看看!1,首先要明确删除哪条记录无非还就是SQL语句了,比如对应到
- 虚拟环境的创建命令行窗口中使用conda create -n 环境名 python=所需python版本即可创建虚拟环境pytorch的gp
- 导言(Introduction)这个提案描述了如何在jQuery的核心库中增加模板支持。更为特别是,这个提案描述了一个新的jQuery方法-