CIFAR10、CIFAR100数据集的官网链接:http://www.cs.toronto.edu/~kriz/cifar.html
一、CIFAR100概述
CIFAR100数据集有100个类。每个类有600张大小为 32 × 32 32\times 32 32×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
我们获取到字典格式的信息,打印后发现字典中共有filenames
、batch_label
、fine_labels
、coarse_labels
和data
这五个key。分别是图像名称、batch_label、细粒度标签、粗粒度标签、图像表示的信息。
trainobj = unpickle(train_filepath)
for item in trainobj:
print(item)
''' outputs: filenames batch_label fine_labels coarse_labels data '''
知道了文件结构,我们处理起来就可以更自由,比如可以在训练集中去掉某些类来做异常检测等等。
需要补充的是,如果自行修改了数据集中的某个文件,在运行程序的时候,会重新下载并覆盖原有的数据集。这是因为程序对数据集进行了完整性校验,即判断文件的md5值是否和原始设定值相同。
部分源码截图如下:
_check_integrity工作原理:
那如果想要使用自己基于CIFAR100修改后的数据集怎么办呢?
办法之一是可以对源码进行修改。比如删去源码部分对md5的判断,让程序以为我们的文件就是原始文件,这样就不会出现覆盖的操作(需要保证自己构造的数据正确性)。
今天的文章cifar 数据集_cibersort数据要求分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/77900.html