卷积神经网络|猫狗分类系列--导入kaggle猫狗数据集

解决任何真实问题的重要一步是获取数据,Kaggle提供了大量不同数据科学问题的竞赛。

图片

我们将从

https://www.kaggle.com/competitions/dogs-vs-cats/data

下载猫狗数据集,并对其进行一定的操作,以正确的导入到我们的计算机,为接下来的模型训练做准备。

数据集(带有标号的)包含25000张图片,猫狗各一半,图片格式如下:

类别.序号.jpg,比如

  • cat.1.jpg,cat.2.jpg,cat.3.jpg,....cat.12449.jpg

  • dog.1.jpg,dog.2.jpg,dog.3.jpg,.....dog.12499.jpg

共计25000张。

图片

直接将其导入计算机显然是不行的,我们必须对图片名进行处理,接着构建自己的Dataset类

首先对图片名进行处理:

import ospath="E:\\3-10\\source\\train\\"filenames=[name for name in os.listdir(path)]j=0k=0catList=[]dogList=[]for i,filename in enumerate(filenames):    src=path+filename    namelist=filename.split('.')    if namelist[0]=='cat':        j=j+1        dst=namelist[0]+str(j)+'.0'+'.'+namelist[2] #猫标签设置为0        catList.append(dst)#获得cat的图片名集合    else:        k=k+1        dst=namelist[0]+str(k)+'.1'+'.'+namelist[2] #狗标签设置为1        dogList.append(dst)#获得dog的图片名集合    dst=path+dst    os.rename(src,dst)

注:path为下载的数据集图片的路径

在这步操作后,cat和dog的图片名则变为了下列格式:

  • cat1.0.jpg,

  • cat2.0,jpg

  • cat3.0.jpg

  • ....

  • cat12500.0.jpg

  • dog1.1.jpg,

  • dog2.1.jpg

  • ....

  • dog12500.1.jpg

需要强调的是这里的cat1,dog1...,jpg格式仅仅是一个习惯,没有太多的含义,真正重要的是0,1,...,这是个标签,指明了这张图片的类别,并在构建Dataset类时发挥作用。0代表cat,而1代表dog。

同时,catList和dogList还分别存储了猫和狗的图片路径名程,就像这样。

  • ['cat1.0.jpg', 'cat2.0.jpg', 'cat3.0.jpg', 'cat4.0.jpg', 'cat5.0.jpg'...]

  • ['dog1.1.jpg', 'dog2.1.jpg', 'dog3.1.jpg', 'dog4.1.jpg', 'dog5.1.jpg'...]

之所以这样处理,是因为为了易于划分训练集和测试集

接着,实现自己的Dataset类​​​​​​​

import torch import os from torch.utils.data import Dataset from torchvision import transforms from PIL import Image import numpy as np 
class MyDataset(Dataset):     def __init__(self,path_file,namelists,transform=None):         self.path_file=path_file        self.imgs=namelists         self.transform=transform     def __len__(self):         return len(self.imgs)     def __getitem__(self, idx):         #get the image         img_path = os.path.join(self.path_file,self.imgs[idx])        image=Image.open(img_path)         image=image.resize((28,28))#修改图片大小,默认大小         if self.transform:             image = self.transform(image)         #get the label
        str1=self.imgs[idx].split('.')         label=eval(str1[1])         return image, label

train_data=MyDataset(path,catList[0:10000]+dogList[0:10000],transform=transforms.Compose([transforms.ToTensor(),                                                                                     transforms.Resize((224,224))]) ) test_data=MyDataset(path,catList[10000:12500]+dogList[10000:12500],transform=transforms.Compose([transforms.ToTensor(),                                                                                            transforms.Resize((224,224))]) )

训练集和测试集按8:2的比例划分

导入DataLoader:​​​​​​​

train_loader=torch.utils.data.DataLoader(train_data, batch_size=32, shuffle=True) test_loader=torch.utils.data.DataLoader(test_data, batch_size=32, shuffle=True)

测试:​​​​​​​

#测试len(train_data)20000
len(test_data)5000
imgs,labels=next(iter(train_loader))
imgs.size()torch.Size([32, 3, 224, 224])
labels.size()torch.Size([32])
labelstensor([0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1,        1, 0, 0, 0, 0, 1, 0, 0])

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

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

相关文章

python+playwright 学习-1.环境准备与快速开始

前言 说到 web 自动化,大家最熟悉的就是 selenium 了,selenium 之后又出现了三个强势的框架Puppeteer、CyPress、TestCafe, 但这3个都需要掌握 JavaScript 语言,所以只是少部分人在用。 2020年微软开源一个 UI 自动化测试工具 P…

使用openssl 生成pfx格式证书时报错:unable to load certificates

问题现象包如下: 之前在centos上使用openssl部署证书服务器以及颁发证书的时候遇到的问题,在进行个人证书生成之后需要形成pfx格式证书,结果过程中报错了。网上类似资料比较少,做个记录。 生成pfx格式证书的命令: o…

Eureka的自我保护机制

一:Eureka的自我保护机制是什么? 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不…

springCould中的Hystrix【下】-从小白开始【8】

目录 🧂1.熔断机制❤️❤️❤️ 🌭2.修改8001服务 ❤️❤️❤️ 🥞3.测试 ❤️❤️❤️ 🥓4. 服务监控hystrixDashboard❤️❤️❤️ 🌭5.仪表盘❤️❤️❤️ 🧂6.仪表盘的使用 ❤️❤️❤️ 1.熔断机…

LibVLC中播放、录制

video 1:首先官网下载vlc库 2:将下载的库添加到工程目录 3:添加功能接口 bool QtVLCWidget::playMedia(const char* url, PlayType type) {if (type PT_Url){m_media libvlc_media_new_location(url);}else if (type PT_LocalFile){m_med…

设计模式④ :分开考虑

一、前言 有时候不想动脑子,就懒得看源码又不像浪费时间所以会看看书,但是又记不住,所以决定开始写"抄书"系列。本系列大部分内容都是来源于《 图解设计模式》(【日】结城浩 著)。该系列文章可随意转载。 …

实验二 Linux文件编程

一、实验目的与任务 目的:了解掌握文件系统特点与功能,学会借助文件系统的功能函数进行编程。 任务:利用C语言指令编写程序调用文件系统函数,完成相应功能。 二、实验设备 装有Linux操作系统的计算机一台。 三、实验要求 1&…

电源芯片浪涌电流如何产生?该怎么测试?

对于电源芯片的设计和制造商来说,防止芯片受到电源干扰是非常重要的。为了保障芯片能正常稳定运行,浪涌测试无疑是必要的。本篇文章将全方位为你介绍浪涌电流如何产生以及如何测试的过程。 电源芯片浪涌电流的产生原因 1.开关电源切换和电压突变 在电源开…

Golang : Bson\Json互转

代码 package bson_jsonimport ("encoding/json""errors""fmt""gopkg.in/mgo.v2/bson""os""testing" )type User struct {Name string json:"name,omitempty" bson:"name,omitempty"CSD…

软件测试|MySQL主键约束详解:保障数据完整性与性能优化

简介 主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。 MySQL是一种广泛使用的开源关系型数据库管理系统&am…

轻松实现Word转PPT!别说你还不知道这个办公神器!

在日常的学习和工作中,Microsoft Word和PowerPoint是我们最常使用的2款办公软件。Word,拥有出色的文字处理功能,让我们能够轻松编辑各种文档,而PowerPoint,可以让我们轻松地进行各种演示文稿的创建和播放。 在实际使用…

Unity 3D GridLayoutGroup3D 让子物体对齐,调整子物体间距

Unity 3D GridLayoutGroup3D 让子物体对齐,调整子物体间距 效果 介绍 GridLayoutGroup3D 脚本是一个用于在 Unity 3D 编辑器中创建 3D 网格布局的实用工具。主要用于在 Unity 编辑器中提供一种可视化的方式来设置和调整子物体的位置,同时支持删除脚本时…

BabylonJS 6.0文档 Deep Dive 摄像机(二):摄像机碰撞

摄像机、网格碰撞和重力 你玩过第一人称射击游戏(FPS)吗?在本教程中,我们将模拟FPS的摄影机移动:摄影机位于地板上,与地面碰撞,并可能与场景中的任何对象碰撞。 如何实现? 为了实现这一功能,我们必须执…

CodeWave智能开发平台--03--目标:应用创建--07供应商数据表格02

摘要 本文是网易数帆CodeWave智能开发平台系列的第10篇,主要介绍了基于CodeWave平台文档的新手入门进行学习,实现一个完整的应用,本文主要完成07供应商数据表格下 CodeWave智能开发平台的10次接触 CodeWave参考资源 网易数帆CodeWave开发…

Hello 2024(A~D,F1)

新年坐大牢 A - Wallet Exchange 题意:共有俩钱包,每回合从其中一个钱包中拿走一块钱,谁拿走最后一块钱谁赢。 思路:奇偶讨论即可。 // Problem: A. Wallet Exchange // Contest: Codeforces - Hello 2024 // URL: https://cod…

josef 约瑟 数字式时间继电器 JS14P 0~20S AC220V 通电延时

JS14P系列时间继电器 JS14P系列数字式时间继电器是JS14、JS20等的更新换代产品采用集成电路,数字按键开关预置,它具有体积小、重量轻、精度高、寿命长、通用性强等优点,适用于交流50Hz,电压380V及以下和直流220w以下的自动控制电…

Pycharm安装numpy库失败解决办法

一、出现错误(以matplotlib为例): 二、解决办法: 方法一(失败):PyCharm中有一个安装库的方法是:Settings>>Python Interpreter>>点击右侧的加号 第二个图 失败原因&am…

C++每日一练(14):对称矩阵的判定

题目描述 输入矩阵的行数&#xff0c;再依次输入矩阵的每行元素&#xff0c;判断该矩阵是否为对称矩阵&#xff0c;若矩阵对称输出“yes"&#xff0c;不对称输出”no“。 输入 第一行输入一个正整数N&#xff08;N<20&#xff09;&#xff0c;表示矩阵的行数&#xff0…

深入了解pnpm:一种高效的包管理工具

✨专栏介绍 在当今数字化时代&#xff0c;Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序&#xff0c;就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术&#xff0c;以及各种框架、库和工具…

Python笔记03-判断和循环

文章目录 比较运算符if-else语句while语句for循环循环中断 比较运算符 字面量True表示真&#xff0c;字面量False表示假 if-else语句 if语句判断条件的结果一定要是布尔类型 不要忘记判断条件后的&#xff1a; 归属于if语句的代码块&#xff0c;需在前方填充4个空格缩进 age…