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):
        # get the inputs
        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函数库,进一步简化开发过程。

pytorch dataloader每隔几个iteration会卡住 pytorch dataloader gpu_CUDA

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])
    ])