cifar 数据集_cibersort数据要求

cifar 数据集_cibersort数据要求CIFAR10、CIFAR100数据集的官网链接:http://www.cs.toronto.edu/~kriz/cifar.html一、CIFAR100概述CIFAR100数据集有100个

CIFAR10、CIFAR100数据集的官网链接:http://www.cs.toronto.edu/~kriz/cifar.html

一、CIFAR100概述

CIFAR100数据集有100个类。每个类有600张大小为 32 × 32 32\times 32 32×32的彩色图像,其中500张作为训练集,100张作为测试集。对于每一张图像,它有fine_labelscoarse_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值是否和原始设定值相同。
md5值部分源码截图如下:
在这里插入图片描述
_check_integrity工作原理:
在这里插入图片描述那如果想要使用自己基于CIFAR100修改后的数据集怎么办呢?
办法之一是可以对源码进行修改。比如删去源码部分对md5的判断,让程序以为我们的文件就是原始文件,这样就不会出现覆盖的操作(需要保证自己构造的数据正确性)。

今天的文章cifar 数据集_cibersort数据要求分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/77900.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注