卷积神经网络|猫狗分类系列--导入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 os
path="E:\\3-10\\source\\train\\"
filenames=[name for name in os.listdir(path)]
j=0
k=0
catList=[]
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])
labels
tensor([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])
相关文章:

卷积神经网络|猫狗分类系列--导入kaggle猫狗数据集
解决任何真实问题的重要一步是获取数据,Kaggle提供了大量不同数据科学问题的竞赛。 我们将从 https://www.kaggle.com/competitions/dogs-vs-cats/data 下载猫狗数据集,并对其进行一定的操作,以正确的导入到我们的计算机,为接下…...
【linux 多线程并发】线程本地数据存储的两种方式,每个线程可以有同名全局私有数据,以及两种方式的性能分析
线程本地数据(TLS) 专栏内容: 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构,以及如何实现多机的数据库节点的多读多写,与传统主备,MPP的区别,技术难点的分析,数据元数据同步,多主节点的…...
2401d,d导入C的问题
原文 D中是否可用仅C头文件库? 在C语言中,我需要这样做: #define STB_DS_IMPLEMENTATION #include "stb_ds.h"在包含h文件前,必须在单个C文件中定义. 在D中试过: enum STB_DS_IMPLEMENTATION 1; import stb_ds;但它不管用.有建议吗?也许使用中间C文件会工作 ,但…...
SpringCloud GateWay实现路由限流
目录 RequestRateLimiterGatewayFilterFactory令牌桶算法实现限流 RequestRateLimiterGatewayFilterFactory Spring Cloud Gateway 内置了一个限流功能的过滤器工厂,那就是RequestRateLimiterGatewayFilterFactory ,它使用 Redis 和 Lua 脚本实现令牌桶…...
打印日期c++
给出年份 y和一年中的第 d天,算出第 d天是几月几号。 输入格式 输入包含多组测试数据。 每组数据占一行,包含两个整数 y 和 d。 输出格式 每组数据输出一行一个结果,格式为 yyyy-mm-dd。 数据范围 输入最多包含 100 组数据, 1≤y≤3000, 1≤d…...

数据结构入门到入土——链表(1)
目录 一,顺序表表/ArrayList的缺陷 二,链表 三,链表的实现 四,与链表有关的题目练习(1) 1.删除链表中等于给定值 val 的所有节点 2.反转一个单链表 3.给定一个带有头结点 head 的非空单链表…...
MySQL C API的使用
MySQL C API的使用 介绍及使用 MySQL C API(也称为 MySQL Connector/C)是用于与 MySQL 数据库交互的 C 语言 API。它提供了一组函数和结构体,允许你在 C 程序中连接到 MySQL 数据库服务器,并执行查询、插入、更新等数据库操作。…...
JavaScript防御性编程
简单聊一下防御性编程,初衷是开发人员为了防止自己被裁员,而将代码编写为只有自己能看懂。如何只有自己能看懂?方法多种多样,但不能将简单问题复杂化,比如:编写一堆无效的逻辑关系,或将业务复杂…...

微信预约小程序制作指南:从小白到专家
在当今的数字时代,微信小程序已经成为了一种非常流行的应用方式。预约功能更是成为了许多小程序的核心功能之一。如果你也想为你的小程序添加预约功能,以下步骤将会对你有所帮助。 一、进入乔拓云网后台 乔拓云网是一个在线小程序开发平台,你…...

向量数据库:Milvus
特性 Milvus由Go(63.4%),Python(17.0%),C(16.6%),Shell(1.3%)等语言开发开发,支持python,go,java接口(C,Rust,c#等语言还在开发中),支持单机、集群部署,支持CPU、GPU运算。Milvus 中的所有搜索和查询操作都在内存中执行…...
亚马逊国际商品详情 API:获取特定商品详细信息的实践
随着电子商务的飞速发展,亚马逊作为全球最大的在线零售商之一,提供了丰富的商品详情 API,使得第三方开发者能够轻松地获取亚马逊网站上的商品信息。本文将介绍如何使用亚马逊国际商品详情 API(Amazon Product Advertising API&…...

MSB30M-ASEMI小贴片整流桥MSB30M
编辑:ll MSB30M-ASEMI小贴片整流桥MSB30M 型号:MSB30M 品牌:ASEMI 封装:UMSB-4 最大平均正向电流:3A 最大重复峰值反向电压:1000V 产品引线数量:4 产品内部芯片个数:4 产品…...
Redis启动方式
redis三种启动方式 1.直接启动 进入redis根目录,执行命令: #加上‘&’号使redis以后台程序方式运行 ./redis-server & 2.通过指定配置文件启动 可以为redis服务启动指定配置文件,例如配置为/etc/redis/6379.conf 进入redis根目录&#x…...

TEMU 新手小白必看!2024入驻流程/入驻类目/入驻资料等详细流程讲解
2023 TEMU 可谓是赚足眼球,流量持续上涨,2024年相信不少卖家们已经跃跃欲试,但大陆卖家如何入驻TEMU?哪些品类适合入驻?又有哪些入驻要求和资料?别急,今天东哥就一一给大家详细讲解,…...

【C语言】数组
一维数组的创建和初始化 数组是一组相同类型元素的集合。 数组的创建 //数组的创建方式:type_t arr_name [const_n];//type_t 是指数组的元素类型//const_n 是一个常量表达式,用来指定数组的大小数组创建的实例: 数组创建ÿ…...

常见测试技术都有哪些?
测试技术是用于评估系统或组件的方法,目的是发现它是否满足给定的要求。系统测试有助于识别缺口、错误,或与实际需求不同的任何类型的缺失需求。测试技术是测试团队根据给定的需求评估已开发软件所使用的最佳实践。这些技术可以确保产品或软件的整体质量…...

Spring事务控制
1.事务介绍 1.1什么是事务? 当你需要一次执行多条SQL语句时,可以使用事务。通俗一点说,如果这几条SQL语句全部执行成功,则才对数据库进行一次更新,如果有一条SQL语句执行失败,则这几条SQL语句全部不进行执…...

swaggerUI不好用,试试这个openapiUI?
title: swaggerUI不好用,试试这个openapiUI? date: 2024-01-08 categories: [tool] tags: [openapi,工具] description: 基于swaggger2, openapi3规范的UI文档 1.背景 由于长期使用 swaggerUI 工具,它的轻量风格个人觉得还是不错的,但是它…...
嵌入式物联网项目开发实战例程-STM32F103系列之外围器件代码
开发STM32F103很好的参考例程,轻松实现各类外围器件的开发。持续更新中,欢迎关注及收藏。 0001基于STM32F103单片机GPIO实现控制LED灯闪烁的程序代码.zip 0002基于STM32F103单片机GPIO实现按键KEY的检测程序代码.zip 0003基于STM32F103单片机GPIO实现外部…...

Docker Compose--部署SpringBoot项目--实战
原文网址:Docker Compose--部署SpringBoot项目--实战-CSDN博客 简介 本文用实战介绍Docker Compose部署SpringBoot项目。 ----------------------------------------------------------------------------------------------- 分享Java真实高频面试题,…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...

rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
2025.6.9总结(利与弊)
凡事都有两面性。在大厂上班也不例外。今天找开发定位问题,从一个接口人不断溯源到另一个 接口人。有时候,不知道是谁的责任填。将工作内容分的很细,每个人负责其中的一小块。我清楚的意识到,自己就是个可以随时替换的螺丝钉&…...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...

MLP实战二:MLP 实现图像数字多分类
任务 实战(二):MLP 实现图像多分类 基于 mnist 数据集,建立 mlp 模型,实现 0-9 数字的十分类 task: 1、实现 mnist 数据载入,可视化图形数字; 2、完成数据预处理:图像数据维度转换与…...