pytorch入门pytorch数据处理工具(代码片段)

啊~小li 啊~小li     2022-12-13     698

关键词:

概述

  • torch.utils.data共有如下四个类。
  1. Dataset:是一个抽象类,其他的数据集需要继承这个类,并且覆盖其中的两个方法(_getitem_,_len_)。
  2. DataLoader:定义一个新的迭代器,实现批量(batch)读取,打乱数据(shuffle)并且提供并行加速等功能。
  3. random_split:把数据集随机拆分为给定长度的非重叠的新数据集。
  4. sampler:多种采样函数
  • Torchvision是PyTorch的一个视觉处理工具包,包括四个子类,如下
  1. dataset:提供常用的数据集的加载,设计上都是继承自torch.utils.data.Dataset,主要包括MMIST、ImageNet、COCO等
  2. models:提供深度学习中的各种经典的网络结构以及训练好的模型,包括AlexNet、VGG、ResNet、Inception等
  3. transforms:常用的数据预处理操作,主要包括对Tensor及PIL Image对象的操作
  4. utils:包含两个函数,一个是make_grid,它能将多张图片拼接在一个网格中;另一个是save_img,它能将Tensor保存成图片

utils.data简介

utils.data 包括Dataset和DataLoader。torch.utils.data.Dataset为抽象类。自定义的数据集需要继承这个类,并且实现两个函数(_getitem_,_len_)前者通过索引获取数据和标签,后者提供数据的大小。_getitem_一次只能获取一个数据,所以需要通过torch.utils.daata.DataLoader来定义一个新的迭代器,实现批量(batch读取)。

import torch
from torch.utils import data
import numpy as  np

# 基于基类Dataset,自定义一个数据集及对应的标签
class TestDataset(data.Dataset): # 继承Dataset
    def __init__(self):
        self.Data = np.asarray([[1, 2], [3, 4], [5, 6]])
        self.Label = np.asarray([0, 1, 0])

    def __getitem__(self, item):
        txt = torch.from_numpy(self.Data[item])
        label = torch.tensor(self.Label[item])
        return txt,label

    def __len__(self):
        return len(self.Data)

# 获取数据集
test = TestDataset()
print(test[2])   # 相当于调用了__getitem__(2)
print(test.__len__())

以上tuple返回,每次只返回一个样本,实际上,Dataset只负责数据的抽取,调用一次__getitem__只返回一个样本。如果希望批处理,还需呀同时进行shuffle和并行加速等操作,可选择DataLoader。格式如下:

data.DataLoader(
    dataset=test,
    batch_size=2,
    shuffle=False,
    sampler=None,
    batch_sampler=None,
    num_workers=0,
    pin_memory=False,
    drop_last=False,
    timeout=0,
    worker_init_fn=None,
)

参数说明

  • dataset:加载的数据集
  • batch_size:批大小
  • shuffle:是否将数据打乱
  • sampler:样本抽样
  • num_workers:使用多进程加载的进程数,0代表不使用多进程
  • pin_memory:是否将数据保存在pin memory区,pin memory转化到GPU会更快
  • drop_last:dataset中的数据个数可能不是batch_size的整数倍,drop_last为True会将多出来不足一个batch的数据丢弃。

torchvision简介

torchvision有四个功能模块:model、datasets、transforms和utils。下面主要介绍使用 datasets的ImageFolder处理的自定义数据集,以及transforms对源数据进行预处理、增强等。

transforms

transforms提供了对PIL Images对象和Tensor对象的常用操作

  • 对PIL Image的常见操作
    • Scale/Resize:调整尺寸,长款比保持不变
    • CenterCrop、ReandomCrop、RandomSizedCrop:裁剪图片,CenterCrop、ReandomCrop在crop时候是固定size,RandomSizedCrop则是random size的cropRandomSizedCrop变换已弃用,RandomResizedCrop代替
    • pad:填充
    • ToTensor:把一个取值范围为[0,255]的PIL.Image转那位为Tensor。形状为(H,W,C)的Numpy.ndarray转化成形状为[H,W,C],取值范围为[0,1,0]的torch.FloatTensor
    • RandomHorizontalFlip:图像随机水平翻转,翻转概率为0.5
    • RandomVerticalFlip:图像随机垂直翻转
    • ColorJitter:修改亮度、对比度和饱和度
  • 对Tensor的常见操作
    • Normalize:标准化,即,减均值,除以标准差
    • ToPILImage:将Tensor转化为PILImage

如果要对数据集尽心多个操作,可以通过Compose将这些操作像管道一样拼接起来,类似于nn.Sequential如下:

transforms.Compose([
    transforms.CenterCrop(10),
    transforms.RandomCrop(20, padding=0),
    transforms.ToTensor()
])

ImageFolder

当文件依据标签处于不停的文件下,如
——data
    |——data1
        |——001.jpg
        |——002.jpg
        |——003.jpg
    |——data2
        |——001.jpg
        |——006.jpg
我们可以利用torchvision.datasets.ImageFolder来直接构造除dataset,代码如下

loader = torchvision.datasets.ImageFolder(path)
loader = data.DataLoader(dataset)

ImageFolder会自动将目录中的文件夹名自动转化成序列,当DataLoader载入时,标签自动就是整数序列了。
方法一

my_train = transforms.Compose([
    transforms.RandomResizedCrop(224),
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor()
])
train_data = datasets.ImageFolder('./data/train_neg', my_train)
train_loader = data.DataLoader(train_data, batch_size=6, shuffle=False)
for i_batch, img in enumerate(train_loader):

方法二

my_train = transforms.Compose([
    transforms.RandomResizedCrop(224),
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor()
])

train_data = datasets.ImageFolder('./data/train_neg', my_train)
train_loader = data.DataLoader(
    dataset=train_data,
    shuffle=False,
    batch_size=6
)
for i_batch, img in enumerate(train_loader):

pytorch入门pytorch神经网络工具(代码片段)

Pytorch神经网络工具前向传播反向传播神经网络工具箱nnnn.Modulenn.funtional优化器动态修改学习率核心组件层:神经网络的基本结构,将输入张量幻化为输出张量模型:层组成的网络损失函数:参与学习的目标函数... 查看详情

pytorch从入门到精通100讲-pytorch张量从概念到应用(代码片段)

PyTorch张量的创建与基本类型0导读在我们不知道什么是深度学习计算框架时,我们可以把PyTorch看做是Python的第三方库,在PyTorch中定义了适用于深度学习的张量Tensor,以及张量的各类计算。就相当于NumPy中定义的Array和对应的科学... 查看详情

超详细pytorch入门教程(代码片段)

Pytorch入门教程(二)Pytorch入门教程(一)1.张量Tensor2.Pytorch中创建张量3.Pytorch中tensor的常用方法4.tensor的数据类型5.tensor的其他操作Pytorch入门教程(一)请参考:【超详细】Pytorch入门教程(一)... 查看详情

自然语言处理pytorch基础入门(必备基础知识)(代码片段)

PyTorch基础实践PyTorch基础安装PyTorch创建张量张量类型和大小张量操作索引,切片和连接张量和计算图CUDA张量练习Solutions总结PyTorch基础在本书中,我们广泛地使用PyTorch来实现我们的深度学习模型。PyTorch是一个开源、社区... 查看详情

对比学习:《深度学习之pytorch》《pytorch深度学习实战》+代码

PyTorch是一个基于Python的深度学习平台,该平台简单易用上手快,从计算机视觉、自然语言处理再到强化学习,PyTorch的功能强大,支持PyTorch的工具包有用于自然语言处理的AllenNLP,用于概率图模型的Pyro,扩展了PyTorch的功能。通... 查看详情

pytorch使用cifar10数据集进行图片分类+pytorch基本入门知识总结(代码片段)

更好的阅读效果和体验:https://wyqz.top/p/1888017128.htmlGPU相关检查GPU是否工作importtorchtorch.cuda.is_available()Dataset可以继承Dataset来制作自己的数据类fromtorch.utils.dataimportDatasetfromPILimportImageimportosclassMyData( 查看详情

pytorch60分钟入门教程:数据并行处理(代码片段)

...个教程中,我们将学习如何用DataParallel来使用多GPU。通过PyTorch使用多个GPU非常简单。你可以将模型放在一个GPU:device=torch.device("cuda:0")model.to(device)然后,你可以复制所有的张量到GPU:mytensor=my_te 查看详情

pytorch入门与实战----pytorch入门(代码片段)

1.深度学习框架 pytorch与其他框架的比较pytorch的学习方法:课程安排:PyTorch是一个基于Python的科学计算库,它有以下特点:类似于NumPy,但是它可以使用GPU可以用它定义深度学习模型,可以灵活地进行深度学习模型的训练和使... 查看详情

pytorch入门(代码片段)

...ensor形式实现简单的线性回归Demo用神经网络进行气温预测数据处理1.较为复杂的构建形式(有助于理解)2.较为简单的构建方式使用模型预测手写体识别(线性模型)加载数据并查看数据格式化处理网络构建手写体... 查看详情

深度学习为什么选择pytorch?史上最详细pytorch入门教程(代码片段)

目录前言一、Pytorch介绍1.常见的深度学习框架2.Pytorch框架的崛起3.Pytorch与Tensorflow多方位比较二、Tensors1.Tensor的创建2.Tensor的操作3.Tensor与Numpy三、Autograd的讲解1.模型中的前向传播与反向传播2.利用autograd计算梯度四、构建神经网络... 查看详情

torchvision.transforms.compose()详解pytorch入门手册(代码片段)

简介torchvision是pytorch的一个图形库,它服务于PyTorch深度学习框架的,主要用来构建计算机视觉模型。torchvision.transforms主要是用于常见的一些图形变换。以下是torchvision的构成:1.torchvision.datasets:一些加载数据的函数及... 查看详情

超详细pytorch入门教程(代码片段)

Pytorch基本语法1认识Pytorch2Pytorch的基本元素操作3Pytorch的基本运算操作4关于TorchTensor和Numpyarray之间的相互转换5总结1认识Pytorch什么是Pytorch?Pytorch是一个基于Numpy的科学计算包,向它的使用者提供了两大功能.作为Numpy的替代者,... 查看详情

pytorch入门教程(代码片段)

Pytorch学习总结:Pytorch学习笔记总结_大数据与人工智能技术分享-CSDN博客Pytorch实战总结:pytorch实战教学(一篇管够)B站深度学习Pytorch实战总结1.张量Tensor张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTo... 查看详情

神经网络与深度学习pytorch入门——张量(代码片段)

...通过参考飞桨AIStudio-人工智能学习与实训社区 教程进行pytorch相关学习。目录一.概念:张量、算子二.使用pytorch实现张量运算1.2.1创建张量1.2.1.1指定数据创建张量1.2.1.2指定形状创建1.2.1.3指定区间创建1.2.2张量的属性1.2.2.1张... 查看详情

深度学习---从入门到放弃pytorch基础(代码片段)

深度学习—从入门到放弃(一)pytorchTensor类似于numpy的array,pandas的dataframe;在pytorch里的数据结构是tensor,即张量tensor简单操作1.Flattenandreshape###Originalz:tensor([[0,1],[2,3],[4,5],[6,7],[8,9],[10,11]])Flatte 查看详情

pytorch深度学习实践入门01(代码片段)

文章目录基于PyTorch的两层神经网络一、基于numpy的两层神经网络实现:二、基于PyTorch的两层神经网络实现:三、使用nn库实现两层神经网络四、自定义nnModules实现两层神经网络总结基于PyTorch的两层神经网络提示:在... 查看详情

pytorch学习笔记2.运行官网训练推理的入门示例(代码片段)

PyTorch学习笔记2.运行官网训练、推理的入门示例一、加载数据二、创建模型torch.nn.Sequential介绍:torch.nn.Linear3.torch.nn.ReLU三、调整模型参数四、保存模型五、加载模型一、加载数据首先引用必要的库:importtorchfromtorchimportnn... 查看详情

pytorch-入门与安装(代码片段)

tensorflowvspytorch 现在关于深度学习的框架很多,详情请百度,或者参考本文参考资料1,本文对比两种; tensorflow是当前最流行的深度学习框架,但是pytorch有后来居上的意思,其实二者有一定联系;联系:都是基于计算图... 查看详情