CIFAR10图像分类学习笔记(三)---数据加载load_cifar10

news2025/4/25 22:36:13

新创建一个load_cifar10源文件

需要导入的包

import glob
from torchvision import transforms
from torch.utils.data import DataLoader ,Dataset
import os
#读取工具
from PIL import Image
import numpy as np

 01同样定义10个类别的标签名数组

label_name = ["airplane",
              "automobile",
              "bird",
              "cat",
              "deer",
              "dog",
              "frog",
              "horse",
              "ship",
              "truck"
              ]

02将类别存放到字典label_dict中,并将本来对应的10个分类的字符串airplane、bird等一一对应顺序递增的从0开始递增的数字

#将类别存到字典中
label_dict={}
#将字符串全部转换成数字
for idx, name in enumerate(label_name):
    label_dict[name] = idx

 03自定义一个数据集加载的类

class MyDataset(Dataset):

类中有一个init初始化方法和两个方法,一个用于读取数据并根据transform判断是否应该对训练的数据进行数据增强,如图片的旋转、颜色增强、灰度增强等;另一个用于获取图片总共的数量

init函数:

    def __init__(self,im_list,transforms=None,loader = default_loader):#入参是所有文件列表,传入数据增强的函数
        super(MyDataset,self).__init__()
        #图像列表
        imgs = []

        for im_item in im_list:
            #"E:\CIFAR10\TRAIN\airplane\aeroplane_s_000037.png"
            im_label_name=im_item.split("\\")[-2]#倒数第二个就是标签名
            #新列表imgs[]
            imgs.append([im_item,label_dict[im_label_name]])#路径im_item,ID
        #类内变量
        self.imgs=imgs#每一个图片元素
        self.transform=transforms#数据增强方法
        self.loader=loader#数据加载(读取)方法

这其中自定义的默认default_loader如下

def default_loader(path):#采用PRL完成对图像数据的读取
    return Image.open(path).convert("RGB")

 getitem函数:

     #定义对数据的读取以及数据的增强,返回图片的数据和分类(label)
    def __getitem__(self,index):#根据索引值
        im_path,im_label=self.imgs[index]
        im_data=self.loader(im_path)

        #如果没有数据增强
        if self.transform is not None:
            im_data=self.transform(im_data)#主要定义的是训练数据集的数据增强
        return im_data,im_label

 len函数:

    def __len__(self):
        return len(self.imgs)

04拿到训练、测试数据的列表

#拿到训练数据的列表
im_train_list=glob.glob("E:/CIFAR10/TRAIN/**/*.png")#斜杠要变成这种正的原因是\是反斜杠有可能出现转义的问题
#测试数据的列表
im_test_list=glob.glob("E:/CIFAR10/TEST/**/*.png")

 05拿到训练、测试数据的数据集,并对数据集进行读取

train_dataset = MyDataset(im_train_list,transforms = train_transform)
test_dataset=MyDataset(im_test_list,transforms.ToTensor)#不进行数据增强
#对数据集读取
train_dataloader=DataLoader(dataset=train_dataset,batch_size=6,shuffle=True,num_workers=4)
test_dataloader=DataLoader(dataset=test_dataset,batch_size=6,shuffle=False,num_workers=4)

这其中的方法要自己组合定义如下:

train_transform=transforms.Compose([
    transforms.RandomResizedCrop((28,28)),#调用完这个方法尺寸会变小到28,28,原来是32*32
    transforms.RandomHorizontalFlip(),#默认概率0.5
    transforms.RandomVerticalFlip(),#翻转后数据label会发生变化,需要修改相应的label
    transforms.RandomRotation(90),#旋转角度在-90和90之间
    transforms.RandomGrayscale(0.1),#随机转换成灰度,概率为0.1
    transforms.ColorJitter(0.3,0.3,0.3,0.3),#颜色增强
    #将PRL的数据转换为网络输入的数据
    transforms.ToTensor()
])

06最后输出打印训练集和测试集的数量

print("训练集数量",len(train_dataset))
print("测试集数量",len(test_dataset))

得到的结果是:

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

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

相关文章

计算机视觉cv入门之答题卡自动批阅

前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识,这里我们以答题卡自动批阅这一案例来实操一下。 大致思路 答题卡自动批阅的大致流程可以分为这五步:图像预处理-寻找考试信息区域与涂卡区域-考生信息区域OCR识别-涂卡区域填涂答案判断…

Java学习手册:JSON 数据格式基础知识

1. JSON 简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和生成。它最初来源于 JavaScript,但如今已被许多语言所采用,包括 Java、Python、C 等。JSON 以…

《重塑AI应用架构》系列: Serverless与MCP融合创新,构建AI应用全新智能中枢

在人工智能飞速发展的今天,数据孤岛和工具碎片化问题一直是阻碍AI应用高效发展的两大难题。由于缺乏统一的标准,AI应用难以无缝地获取和充分利用数据价值。 为了解决这些问题,2024年AI领域提出了MCP(Model Context Protocol模型上…

深度图可视化

import cv2# 1.读取一张深度图 depth_img cv2.imread("Dataset_depth/images/train/1112_0-rgb.png", cv2.IMREAD_UNCHANGED) print(depth_img.shape) cv2.imshow("depth", depth_img) # (960, 1280) print(depth_img)# 读取一张rgb的图片做对比 input_p…

微软Edge浏览器字体设置

前言 时间:2025年4月 自2025年4月起,微软Edge浏览器的默认字体被微软从微软雅黑替换成了Noto Sans,如下图。Noto Sans字体与微软雅黑风格差不多,但在4K以下分辨率的显示器上较微软雅黑更模糊,因此低分辨率的显示器建议…

Vue生命周期详细解析

前言 Vue.js作为当前最流行的前端框架之一,其生命周期钩子函数是每个Vue开发者必须掌握的核心概念。本文将全面解析Vue的生命周期,帮助开发者更好地理解Vue实例的创建、更新和销毁过程。 一、Vue生命周期概述 Vue实例从创建到销毁的整个过程被称为Vue…

基于c#,wpf,ef框架,sql server数据库,音乐播放器

详细视频: 【基于c#,wpf,ef框架,sql server数据库,音乐播放器。-哔哩哔哩】 https://b23.tv/ZqmOKJ5

前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程

前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程 前言:一、Vue项目下载快速通道二、React项目下载快速通道三、BrowserPlugins项目下载快速通道四、项目搭建教…

什么是Maven

Maven的概念 Maven是一个一键式的自动化的构建工具。Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于Java 平台的项目构建和依赖管理。Maven 这个单词的本意是:专家,内行。Maven 是目前最流行的自动化构建工具&#xff0…

neo4j中节点内的名称显示不全解决办法(如何让label在节点上自动换行)

因为节点过多而且想让节点中所有文字都显示出来而放大节点尺寸 从neo4j中导出png,再转成PDF来查看时,要看清节点里面的文字就得放大5倍才行 在网上看了很多让里面文字换行的办法都不行 然后找到一个比较靠谱的办法是在要显示的标签内加换行符 但是我的节点上显示的是…

【GIT】github中的仓库如何删除?

你可以按照以下步骤删除 GitHub 上的仓库(repository): 🚨 注意事项: ❗️删除仓库是不可恢复的操作,所有代码、issue、pull request、release 等内容都会被永久删除。 🧭 删除 GitHub 仓库步骤…

3台CentOS虚拟机部署 StarRocks 1 FE+ 3 BE集群

背景:公司最近业务数据量上去了,需要做一个漏斗分析功能,实时性要求较高,mysql已经已经不在适用,做了个大数据技术栈选型调研后,决定使用StarRocks StarRocks官网:StarRocks | A High-Performa…

【HCIA】简易的两个VLAN分别使用DHCP分配IP

前言 之前我们通过 静态ip地址实现了Vlan间通信 ,现在我们添加一个常用的DHCP功能。 文章目录 前言1. 配置交换机2. 接口模式3. 全局模式后记修改记录 1. 配置交换机 首先,使用DHCP,需要先启动DHCP服务: [Huawei]dhcp enable I…

艾蒙顿桌面app下载-Emotn UI下载安装-emotn ui官方tv版安卓固件

在智能电视桌面应用的领域里,Emotn UI 凭借其简洁无广告、可自定义等特点,赢得了不少用户的关注。然而,小编深入了解后发现了一款更好用的电视桌面——乐看家桌面在诸多方面更具优势,能为你带来更优质的大屏体验。 乐看家桌面内置…

3、ArkTS语言介绍

目录 基础知识函数函数声明可选参数Rest参数返回类型箭头函数(又名Lambda函数)闭包 类字段字段初始化getter和setter继承父类访问方法重写方法重载签名可见性修饰符(Public、Private、protected) 基础知识 ArkTS是一种为构建高性…

修改了Element UI中组件的样式,打包后样式丢失

修改了Element UI中组件的样式,在本地运行没有问题,但是打包到线上发现样式丢失(样式全部不生效、或者有一部分生效,一部分不生效),问题在于css的加载顺序导致代码编译后样式被覆盖了, 解决办法…

【springsecurity oauth2授权中心】jwt令牌更换成自省令牌 OpaqueToken P4

前言 前面实现了授权中心授权,客户端拿到access_token后就能请求资源服务器接口 权限的校验都是在资源服务器上进行的,授权服务器颁发的access_token有限期是2小时,也就是说在2小时之内,不管授权服务器那边用户的权限如何变更都…

诱骗协议芯片支持PD2.0/3.0/3.1/PPS协议,支持使用一个Type-C与电脑传输数据和快充取电功能

快充是由充电器端的充电协议和设备端的取电协议进行握手通讯进行协议识别来完成的,当充电器端的充电协议和设备端的取电协议握手成功后,设备会向充电器发送电压请求,充电器会根据设备的需求发送合适的电压给设备快速供电。 设备如何选择快充…

变量在template里不好使,在setup好使?

问题: 自定义的一个函数 ,import导入后 setup里面使用正常 ,在template里面说未定义 作用域问题 在 Vue 的模板语法中,模板(template )里能直接访问的是组件实例上暴露的属性和方法。从代码看&#xff0c…

OpenCV 图形API(53)颜色空间转换-----将 RGB 图像转换为灰度图像函数RGB2Gray()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将图像从 RGB 色彩空间转换为灰度。 R、G 和 B 通道值的常规范围是 0 到 255。生成的灰度值计算方式如下: dst ( I ) 0.299 ∗ src…