IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 数据增强、随机种子、cifar图像识别 -> 正文阅读

[人工智能]数据增强、随机种子、cifar图像识别

数据增强

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

def load_data(batch_size):
    train_loader = torch.utils.data.DataLoader(
        datasets.MNIST('../data', train=True, download=True,
                       transform=transforms.Compose([
                           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链接在一起

torchvision.transforms.Compose(transforms)

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

transform=transforms.Compose([
                           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 torch
from 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)+out
		out = F.relu(out) 		
		return out

class 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 x
	def 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()


  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:50:48  更:2022-03-21 20:55:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:25:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码