首页 > 其他分享 >CIFAR100数据集介绍及使用方法

CIFAR100数据集介绍及使用方法

时间:2023-03-08 14:56:25浏览次数:39  
标签:labels transform 介绍 cifar100 train transforms CIFAR100 方法

一、CIFAR100概述
CIFAR100数据集有100个类。每个类有600张大小为32 × 32 32\times 3232×32的彩色图像,其中500张作为训练集,100张作为测试集。对于每一张图像,它有fine_labels和coarse_labels两个标签,分别代表图像的细粒度和粗粒度标签,对应下图中的classes和superclass。也就是说,CIFAR100数据集是层次的。

 

 

 

二、CIFAR100数据集文件及导入代码

下载好的CIFAR100数据集解压后,可以看到一共有四个文件,分别是:meta、train、test、file.txt~
在这里插入图片描述

导入的代码如下:

(若root根目录下没有cifar100数据集,会自动下载)

CIFAR_PATH = "自己的路径"
mean = [0.5070751592371323, 0.48654887331495095, 0.4409178433670343]
std = [0.2673342858792401, 0.2564384629170883, 0.27615047132568404]
num_workers= 2

def cifar100_dataset(args):
    transform_train = transforms.Compose([
        transforms.RandomCrop(32, padding=4),
        transforms.RandomHorizontalFlip(),
        transforms.RandomRotation(15),  # 数据增强
        transforms.ToTensor(),
        transforms.Normalize(mean, std)
    ])
    transform_test = transforms.Compose(
        [transforms.ToTensor(),
        transforms.Normalize(mean, std)])

    cifar100_training = torchvision.datasets.CIFAR100(root=CIFAR_PATH, train=True, download=True, transform=transform_train)
    trainloader = torch.utils.data.DataLoader(cifar100_training, batch_size=args.bs, shuffle=True, num_workers=num_workers)
        
    cifar100_testing = torchvision.datasets.CIFAR100(root=CIFAR_PATH, train=False, download=True, transform=transform_test)
    testloader = torch.utils.data.DataLoader(cifar100_testing, batch_size=100, shuffle=False, num_workers=num_workers)
    
    return trainloader,testloader

  

三、数据集文件的更多了解
上面的代码可以直接返回trainloader,testloader导入模型。不过我们想看看train文件中信息是如何存储的,这样有利于我们能够根据自己的想法处理数据集。

官网给出了CIFAR10的读取方法,但没有给CIFAR100的。下面的代码可读取,注意CIFAR100的文件编码是“latin1”,而不是“bytes”。

import pickle
def unpickle(file):
    with open(file, 'rb') as fo:
        dict = pickle.load(fo, encoding='latin1')
    return dict

我们获取到字典格式的信息,打印后发现字典中共有filenamesbatch_labelfine_labelscoarse_labelsdata这五个key。分别是图像名称、batch_label、细粒度标签、粗粒度标签、图像表示的信息。

trainobj = unpickle(train_filepath)
for item in trainobj:
    print(item)
'''
outputs:
	filenames
	batch_label
	fine_labels
	coarse_labels
	data
'''

  

知道了文件结构,我们处理起来就可以更自由,比如可以在训练集中去掉某些类来做异常检测等等。

需要补充的是,如果自行修改了数据集中的某个文件,在运行程序的时候,会重新下载并覆盖原有的数据集。这是因为程序对数据集进行了完整性校验,即判断文件的md5值是否和原始设定值相同。
部分源码截图如下:

 

 那如果想要使用自己基于CIFAR100修改后的数据集怎么办呢?
办法之一是可以对源码进行修改。比如删去源码部分对md5的判断,让程序以为我们的文件就是原始文件,这样就不会出现覆盖的操作(需要保证自己构造的数据正确性)。

标签:labels,transform,介绍,cifar100,train,transforms,CIFAR100,方法
From: https://www.cnblogs.com/ltkekeli1229/p/17191969.html

相关文章

  • 网络基础及抓包方法汇总
    网络基础常见网络模型与常见协议网络架构图互联网通讯协议架构TCP/UDPTCP:面向连接、错误重传、拥塞控制、适用于可靠性高的场景UDP:不需要提前建立连接,实现简单......
  • instanceof简单介绍
    官方说明是:判断左边的对象是不是右边对象类的实例   意思是说条件操作数类型int和int不兼容   instanceof左边不能是基本类型,需要是引用类型publicclass......
  • [java-基础]-Java构造方法的执行顺序
    (一)Java构造方法的执行顺序1.如果类里边没有定义任何构造方法,则系统将添加一个默认的无参构造方法。ClassThisClass{}默认隐式添加无参的构造方法,相当于ClassThi......
  • 多线程的interrut()方法
    java中的interrut方法,主要作用为中断指定线程,该中断并非是直接打断,而是将线程的中断标志设置为1,当线程执行到sleep、wait方法陷入的阻塞状态,则进行中断,抛出interrutExcepti......
  • [java高级]-详解Java8 Collect收集Stream的方法
    1、Collection,Collections,collect,Collector,CollectosCollection是Java集合的祖先接口。Collections是java.util包下的一个工具类,内涵各种处理集合的静态方法。j......
  • CAD指令框找不到了怎么调出来?CAD指令框调出方法
    CAD制图过程中,为了提高设计师的绘图效率,经常会用到各种CAD命令快捷键,可是CAD指令框突然不见了,这就让人很头疼了。CAD指令框找不到了怎么调出来呢?本节内容小编以浩辰CAD软件......
  • 让 OpenAI ChatGPT 直接发送、预览图片的方法
    让OpenAIChatGPT直接发送、预览图片的方法引用地址:https://baiyunju.cc/11056前面介绍了中国境内怎么接收外国短信验证码注册和使用ChatGPT,请参考《人工智能OpenAI......
  • Vue 删除取消时报Uncaught (in promise) cancel错误解决方法
    Vue删除取消时报Uncaught(inpromise)cancel错误,如下图:   原因:this.$confirm方法内置promise方法,所以.catch()不能省略(因为取消操作时,无法捕获),虽然不影响操作,但......
  • Eclipse报错:Failed toload JavaHL Library解决方法
    Eclipse出现FailedtoloadJavaHLLibrary解决方法               今天打开Eclipse的时候弹窗说FailedtoloadJavaHLLibrary。。。很是纳闷,于是上网......
  • luffy登录注册页面 redis介绍安装 redis普通连接与连接池 redis数据类型 redis字符串
    目录回顾登录页面分析代码登录页面注册页面Redis介绍与安装介绍:面试题:redis为什么这么快?安装安装目录启动客户端连接Redis普通连接和连接池普通连接连接池连接传统方案连接......