数据集加载

使用标准python包将数据加载成numpy数组格式,然后转换成torch.*Tensor
自定义数据集制作与使用

视觉工具包:torchvision(封装数据)

可以加载数据并归一化

  • 公共数据集的数据加载模块–torchvision.datasets
  • 图像数据的数据加载模块–torch.utils.data.Dataloader
#torchvision数据集的输出是范围在[0,1]之间的PILImage,我们将其转化成归一化范围为[-1,1]之间的张量Tensors.
import torch
import torchvision
import torchvision.transforms as transforms
transform = transforms.Compose(
	[transforms.ToTensor(),		#变成张量
	 transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])	#归一化
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,	#导入训练集
										download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,	#dataloader封装几个为一批
										shuffle=True, num_workers=2)
testset = torchvision.datasets.CIFAR10(root='./data', train=False,
										download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
										shuffle=False, num_workers=2)
classes = ('plane', 'car', 'bird', 'cat','deer', 'dog', 'frog', 'horse', 'ship', 'truck')

👆加载数据——定义网络net—(见1、4)—定义loss和优化器——训练分类器(迭代)👇

for epoch in range(2): # 用训练集对模型进行两次训练
	running_loss = 0.0	#初始化
	for i, data in enumerate(trainloader, 0):	#对次数和样本进行迭代 计算每个样本的误差
		# get the inputs		
		inputs, labels = data				#提取输入及其标签
		# zero the parameter gradients
		optimizer.zero_grad()
		# forward + backward + optimize
		outputs = net(inputs)
		loss = criterion(outputs, labels)
		loss.backward()
		optimizer.step()
		# print statistics		
		running_loss += loss.item()
			if i % 2000 == 1999: # 每两千个样本 打印一次loss
			print('[%d, %5d] loss: %.3f' %
				(epoch + 1, i + 1, running_loss / 2000))
			running_loss = 0.0
print('Finished Training')

输出

#[第几次输入训练集,训练了一个训练集中的多少个]  loss为多少
[1, 2000] loss: 2.187
[1, 4000] loss: 1.852
[1, 6000] loss: 1.672
[1, 8000] loss: 1.566
[1, 10000] loss: 1.490
[1, 12000] loss: 1.461
[2, 2000] loss: 1.389
[2, 4000] loss: 1.364
[2, 6000] loss: 1.343
[2, 8000] loss: 1.318
[2, 10000] loss: 1.282
[2, 12000] loss: 1.286
Finished Training

图片尺寸预处理

torchvision.transforms
数据集图片并不是同样的尺寸。绝大多数神经网络都假定图片的尺寸相同。因此我们需要做一些预处理。

transforms = transforms.Compose(
            [transforms.Resize([opt.img_size,opt.img_size]),		#尺寸
             #transforms.RandomHorizontalFlip(),					#水平翻转
             #transforms.CenterCrop((size, size)),					#以图象中心为中心点裁剪
             transforms.ToTensor(),									#做数据归一化之前必须要把PIL Image转成Tensor
             transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值