200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 数据增强 随机种子 cifar图像识别

数据增强 随机种子 cifar图像识别

时间:2019-12-22 05:19:16

相关推荐

数据增强 随机种子 cifar图像识别

数据增强

主要是这部分代码,transform的一些列api,

def load_data(batch_size):train_loader = torch.utils.data.DataLoader(datasets.MNIST('../data', train=True, download=True,transform=pose([transforms.RandomHorizontalFlip(),transforms.RandomVerticalFlip(),transforms.RandomRotation(15),# transforms.RandomRotation((-90, 90)),transforms.Resize([32, 32]),transforms.RandomCrop([28, 28]),transforms.ToTensor(),# transforms.Normalize((0.1307,), (0.3081,))])),batch_size=batch_size, shuffle=True)

数据的增强常用的比如变换,把需要的操作用Compose链接在一起

pose(transforms)

比如上图的例子,将组成的变换列表放到了一起

transform=pose([transforms.RandomHorizontalFlip(),transforms.RandomVerticalFlip(),transforms.RandomRotation(15),# transforms.RandomRotation((-90, 90)),transforms.Resize([32, 32]),transforms.RandomCrop([28, 28]),transforms.ToTensor(),

常用的几种变换

·Crop裁剪分为:

中心裁剪:transforms.CenterCrop

随机裁剪:transforms.RandomCrop

随机长宽比裁剪:transforms.RandomResizedCrop

上下左右中心裁剪:transforms.FiveCrop

上下左右中心裁剪后翻转:transforms.TenCrop

·Flip Rotation翻转和旋转:

依概率p水平翻转transforms.RandomHorizontalFlip(p=0.5)

依概率p垂直翻转transforms.RandomVerticalFlip(p=0.5)

随机旋转transforms.RandomRotation

·Resize图像变换

标准化transforms.Normalize

转为tensor,并归一化至[0-1]transforms.ToTensor

填充transforms.Pad

修改亮度、对比度和饱和度:transforms.ColorJitter

转灰度图:transforms.Grayscale

线性变换:transforms.Grayscale

仿射变换:transforms.RandomAffine

依概率p转为灰度图:transforms.RandomGrayscale

将数据转换为PILImage:transforms.ToPILImage transforms.Lambda

·对transform操作,使数据增强更灵活

从给定的一系列transforms中选一个进行操作transforms.RandomChoice(transforms)

给一个transform加上概率,依概率进行操作transforms.RandomApply(transforms, p=0.5)

将transforms中的操作随机打乱transforms.RandomOrder

随机种子

在深度学习时,有大量参数是随机初始化的,我们就会设置这些参数,数据在使用时,也经常需要随机抽取,那么对于同一组实验而言,每次都是不同的数据就没有可比性和实验的必要了,那么我们固定每次随机的数据,那么每次试验就对同一组随机数据不停的实验,那就可以对比了。

例子:

def seed_all(random_seed):torch.manual_seed(random_seed)np.random.seed(random_seed)random.seed(random_seed)

1.为cpu中设置种子,生成随机数

为CPU中设置种子,生成随机数

2.为GPU

torch.cuda.manual_seed(seed)

3.为所有GPU设置种子,生成随机数

torch.cuda.manual_seed_all(seed)

4.在Numpy内部也有随机种子,当你使用numpy中的随机数的时候,可以通过如下方式固定:

np.random.seed(seed)(另外还有python的内置模块random.seed(seed))

cifar图像识别

该数据集共有60000张彩色图像,这些图像是32*32,分为10个类,每类6000张图。这里面有50000张用于训练,构成了5个训练批,每一批10000张图;另外10000用于测试,单独构成一批。测试批的数据里,取自10类中的每一类,每一类随机取1000张。抽剩下的就随机排列组成了训练批。注意一个训练批中的各类图像并不一定数量相同,总的来看训练批,每一类都有5000张图。

import torchfrom torch import nn#神经网络from torch.nn import functional as F #函数class ResBlk(nn.Module):#自定义层def __init__(self, ch_in, ch_out, stride=1)super.(ResBlk,self).__init__()self.conv1 = nn.Conv2d(cd_in, ch_out, kernel_size=3, stride=stride, padding=1)self.bn1 = nn.BatchNorm2d(ch_out)#批量数据转化self.conv2 = nn.Conv2d(ch_out, cha_out, kerne_size=3, stride=1,padding=1)self.bn2 = nn.BatchNorm2d(ch_out)self.extra = nn.Sequential()#序列if ch_out != ch_in:#[b, ch_in, h, w] =>[b, ch_out,h ,w]self.extra = nn.Sequential(nn.Conv2d(ch_in, ch_out, kernel_size=1, stride=stride),nn.BatchNorm2d(ch_out))def forward(self. x):# 权重计算out = F.relu(self.bn1(self.conv1(x)))out = self.bn2(self.conv2(out))out = self.extra(x)+outout = F.relu(out) return outclass ResNet18(nn.Module):#继承神经网络def __init__(self):super(ResNet18, self).__init__()#设置卷积self.conv1=nn.Sequential(nn.Conv2d(3, 64, kernel_size=3, stride=3, padding=0),nn.BatchNorm2d(64))self.blk1=ResBlk(64, 128, stride=2)self.blk1=ResBlk(128, 256, stride=2)self.blk1=ResBlk(256, 512, stride=2)self.blk1=ResBlk(512, 512, stride=2)self.outlayer = nn.Linear(512 * 1 * 1, 10)#处理10个分类def forward(self, x):x = F.relu(self.con1(x))x=self.blk1(x)x=self.blk2(x)x=self.blk3(x)x=self.blk4(x)x=F.adaptive_avg_pool2d(x, [1,1])x=x.view(x.size(0), -1)x= self.outlayer(x)return xdef main():blk= ResBlk(64, 128, stride=4)tmp = torch.randn(2, 64, 32, 32)out = blk(tmp)print('block:', out.shape)x=torch.randn(2,3,32,32)model = ResNet18()out = model(x)print('resnet:',out.shape)if __name__ =='main':main()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。