1、The CIFAR-10 dataset
10类,一共含有60000张32*32的彩色图片,每类大概6000张,测试集大概1000张,5000张训练集
网址:http://www.cs.toronto.edu/~kriz/cifar.html
2、imageNet数据集
3、ImageFolder
4、LSUN Classification
网址:http://lsun.cs.princeton.edu/2016/
5、COCO (Captioning and Detection
网址:http://mscoco.org/ (可能需要翻墙)
二、利用pytorch框架使用数据
为了方便数据的加载和预处理,pytorch中提供了一个torchvision包,帮助我们使用。
代码实现及注释如下:
#coding=utf-8
import torch
import torchvision
import torchvision.transforms as transforms #transform用于数据的预处理
#使用CIFAR10分类数据集,一共6万张数据图片,5万训练,1万测试
#下面使用 数据预处理
#神经网络为什么要归一化:https://blog.csdn.net/liuheng0111/article/details/52841838
#深度学习,数据的预处理:https://blog.csdn.net/dcxhun3/article/details/47999281
#预处理会帮助我们加快神经网络的训练
#pytorch中,数据的预处理使用到transform函数:
transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])
#其中compose函数会将多个transforms包在一起。
#其中,transforms有好几种,例如transforms.ToTensor(),transforms.Scale()等
#1、transforms.ToTensor()是把PIL.Image(RGB)或者numpy.ndarray(H*W*C)从0到255的值映射到0~1之间,并且转化为Tensor的格式
#2、Normalize(mean,std)是通过公式:channel=(channel-mean)/std 实现数据归一化,
#经过数据归一化,所有的数据都变成了(-1)~1之间的数了
trainset=torchvision.datasets.CIFAR10(root='./data',train=True,download=False,transform=transform)
#训练时,使用的是mini-batch(一次输入多张图片),则使用DataLoader工具将图片分为每一组4张图,一共12500份
trainloader=torch.utils.data.DataLoader(trainset,batch_size=4,shuffle=False,num_workers=2)
classes = ('plane','car','bird','cat','deer','dog','frog','horse','ship','truck')
print len(trainset)
print len(trainloader)
#下面的代码只是要显示一个图片的例子
#function to show an image
import matplotlib.pyplot as plt
import numpy as np
def imshow(img):
img=img/2+0.5
npimg=img.numpy()
plt.imshow(np.transpose(npimg,(1,2,0)))
plt.show()
# show some random training images
dataiter = iter(trainloader)
images, labels = dataiter.next()
# print images
imshow(torchvision.utils.make_grid(images))
# print labels
print(' '.join('%5s'%classes[labels[j]] for j in range(4)))
三、数据预处理
3.1 数据归一化方法
特征归一化常用的方法:
简单缩放 逐样本均值消减(移除直流分量) 特征标准化(使得数据集中所有特征都具有零均值和单位方差)
3.2 简单缩放
对数据的每个维度进行调节,使得数据向量落在【0,1】或者【-1,1】之间,如在图像处理时,像素值在【0,255】之间,则通用是除以255
3.3 逐样本均值消减
如果数据是平稳的(即数据的每个唯独的统计都服从于相同的分布),那么可以从每个样本上减去数据统计的平均值(逐个样本计算)
例如:对于图像,这种归一化可以移除图像的平均亮度值 (intensity)。很多情况下我们对图像的照度并不感兴趣,而更多地关注其内容,这时对每个数据点移除像素的均值是有意义的。注意:虽然该方法广泛地应用于图像,但在处理彩色图像时需要格外小心,具体来说,是因为不同色彩通道中的像素并不都存在平稳特性。
3.4 特征标准化
特征标准化:独立地使数据的每个维度都具有0均值和单位方差。常作于数据的预处理
具体做法:先计算每个维度上的数据的均值,之后在每个维度上都减去该均值,然后再在数据的维度上除以该维度数据的标准差
3.5 PCA/ZCA 白化
数据归一化后,白化作为接下来的预处理步骤,可以使用白化来获取更好的特征:
在进行白化时,step 1:使得特征零均值化(),然后再计算协方差矩阵。
接下来在 PCA/ZCA 白化中我们需要选择合适的 epsilon(回忆一下,这是规则化项,对数据有低通滤波作用)。 选取合适的 epsilon 值对特征学习起着很大作用,下面讨论在两种不同场合下如何选取 epsilon:
1、 基于重构的模型 2、基于正交化的ICA的模型
具体见博客(https://blog.csdn.net/dcxhun3/article/details/47999281)