图片数据集+使用数据+数据预处理

1、The CIFAR-10 dataset

10类,一共含有60000张32*32的彩色图片,每类大概6000张,测试集大概1000张,5000张训练集

网址:http://www.cs.toronto.edu/~kriz/cifar.html

2、imageNet数据集

网址:http://image-net.org/

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

猜你喜欢

转载自blog.csdn.net/qxqsunshine/article/details/84022810
今日推荐