pytorch数据加载: ①totchvision 的包,含有支持加载类似Imagenet,CIFAR10,MNIST 等公共数据集的数据加载模块 torchvision.datasets
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
download=True, transform=transform)
使用torchvision.datasets在线加载数据集
②支持加载图像数据数据转换模块 torch.utils.data.DataLoader
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
shuffle=True, num_workers=2)
torchvision.datasets获取数据后,数据处理时使用DataLoader,一次处理4张图,batch_size=4,使用两个GPU,num_workers=2
for i, data in enumerate(trainloader, 0):
inputs, labels = data
with torch.no_grad():
for data in testloader:
images, labels = data
outputs = net(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
训练时,DataLoader取出的数可直接用于迭代,含标签、位置信息,可见数据输入和处理主要依赖torchvision这两个包。
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
如果CUDA可以用,首先定义下我们的设备为第一个可见的cuda设备"cuda:0"
方法会递归地遍历所有模块,并将它们的参数和缓冲器转换为CUDA张量
net.to(device)
必须在每一个步骤向GPU发送输入和目标
inputs, labels = inputs.to(device), labels.to(device)
网络训练调用cuda,把张量和神经网络传到GPU (CUDA是英伟达公司为拥有并行计算需求的从业者能够使用GPU而提供的工具) CUDA的诞生就是为了让GPU能够有可用的编程环境,使得开发人员可以用程序控制GPU的硬件进行并行计算。所以本质上,CUDA是一个软件体系。 安装CUDA时经常会要连带安装的CUDNN,这就是针对于卷积计算的CUDA函数库,使得深度学习开发者能够很容易的调用CUDA实现深度学习算法的构建。
开发人员编写CUDA应用程序时,可以通过直接调用底层的驱动API来调用GPU。也可以通过调用CUDA运行时API间接调用GPU。也可以通过直接使用GUDA函数库,进一步简化开发过程。
model = nn.DataParallel(model)
使用 DataParallel 让模型并行运行,你以很容易的在多 GPU 上运行你的操作
**数据并行自动拆分了你的数据并且将任务单发送到多个 GPU 上。**当每一个模型都完成自己的任务之后,DataParallel 收集并且合并这些结果,然后再返回给你。在固定batch_size大小时,若有多个GPU,一次取数batch_size大小个,同时把这些数据分配在这些GPU上,比起一个GPU,显然数据处理速度要快很多.
CSV文件: csv是逗号分隔值格式文件。其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。
CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。
torchvision包提供了 常用的数据集类(datasets)和转换(transforms),transforms包含了常见的数据转换,如resize,随即裁剪等,可直接调用.
import torch
from torchvision import transforms, datasets
data_transform = transforms.Compose([
transforms.RandomSizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
|