【深度学习】Pytorch 系列教程(十三):PyTorch数据结构:5、数据加载器(DataLoader)

2023-09-16 20:55:49

目录

一、前言

二、实验环境

三、PyTorch数据结构

0、分类

1、张量(Tensor)

2、张量操作(Tensor Operations)

3、变量(Variable)

4、数据集(Dataset)

5、数据加载器(DataLoader)


一、前言

ChatGPT:

        PyTorch是一个开源的机器学习框架,广泛应用于深度学习领域。它提供了丰富的工具和库,用于构建和训练各种类型的神经网络模型。下面是PyTorch的一些详细介绍:

  1. 动态计算图:PyTorch使用动态计算图的方式进行计算,这意味着在运行时可以动态地定义、修改和调整计算图,使得模型的构建和调试更加灵活和直观。

  2. 强大的GPU加速支持:PyTorch充分利用GPU进行计算,可以大幅提升训练和推理的速度。它提供了针对GPU的优化操作和内存管理,使得在GPU上运行模型更加高效。

  3. 自动求导:PyTorch内置了自动求导的功能,可以根据定义的计算图自动计算梯度。这简化了反向传播算法的实现,使得训练神经网络模型更加便捷。

  4. 大量的预训练模型和模型库:PyTorch生态系统中有许多预训练的模型和模型库可供使用,如TorchVision、TorchText和TorchAudio等,可以方便地加载和使用这些模型,加快模型开发的速度。

  5. 高级抽象接口:PyTorch提供了高级抽象接口,如nn.Modulenn.functional,用于快速构建神经网络模型。这些接口封装了常用的神经网络层和函数,简化了模型的定义和训练过程。

  6. 支持分布式训练:PyTorch支持在多个GPU和多台机器上进行分布式训练,可以加速训练过程,处理大规模的数据和模型。

        总体而言,PyTorch提供了一个灵活而强大的平台,使得深度学习的研究和开发更加便捷和高效。它的简洁的API和丰富的功能使得用户可以快速实现复杂的神经网络模型,并在各种任务中取得优秀的性能。

二、实验环境

        本系列实验使用如下环境

conda create -n DL python=3.7 
conda activate DL
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
conda install matplotlib

关于配置环境问题,可参考前文的惨痛经历:

三、PyTorch数据结构

0、分类

  • Tensor(张量):Tensor是PyTorch中最基本的数据结构,类似于多维数组。它可以表示标量、向量、矩阵或任意维度的数组。
  • Tensor的操作:PyTorch提供了丰富的操作函数,用于对Tensor进行各种操作,如数学运算、统计计算、张量变形、索引和切片等。这些操作函数能够高效地利用GPU进行并行计算,加速模型训练过程。
  • Variable(变量):Variable是对Tensor的封装,用于自动求导。在PyTorch中,Variable会自动跟踪和记录对其进行的操作,从而构建计算图并支持自动求导。在PyTorch 0.4.0及以后的版本中,Variable被废弃,可以直接使用Tensor来进行自动求导。
  • Dataset(数据集):Dataset是一个抽象类,用于表示数据集。通过继承Dataset类,可以自定义数据集,并实现数据加载、预处理和获取样本等功能。PyTorch还提供了一些内置的数据集类,如MNIST、CIFAR-10等,用于方便地加载常用的数据集。
  • DataLoader(数据加载器):DataLoader用于将Dataset中的数据按批次加载,并提供多线程和多进程的数据预读功能。它可以高效地加载大规模的数据集,并支持数据的随机打乱、并行加载和数据增强等操作。
  • Module(模块):Module是PyTorch中用于构建模型的基类。通过继承Module类,可以定义自己的模型,并实现前向传播和反向传播等方法。Module提供了参数管理、模型保存和加载等功能,方便模型的训练和部署。

1、张量(Tensor

        

PyTorch数据结构:1、Tensor(张量):维度(Dimensions)、数据类型(Data Types)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132909219icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/132909219

2、张量操作(Tensor Operations)

3、变量(Variable)

PyTorch数据结构:3、变量(Variable)介绍_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/132923358?spm=1001.2014.3001.5501

4、数据集(Dataset)

PyTorch数据结构:4、数据集(Dataset)_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/132923697?spm=1001.2014.3001.5501

5、数据加载器(DataLoader)

    DataLoader(数据加载器)是用于批量加载和处理数据的实用工具。它提供了对数据集的迭代器,并支持按照指定的批量大小、随机洗牌等方式加载数据。

    DataLoader的主要功能包括:

  •  批量加载数据:DataLoader可以从数据集中按照指定的批量大小加载数据。每个批次的数据可以作为一个张量或列表返回,便于进行后续的处理和训练。

  • 数据随机洗牌:通过设置shuffle=TrueDataLoader可以在每个迭代周期中对数据进行随机洗牌,以减少模型对数据顺序的依赖性,提高训练效果。

  • 多线程数据加载:DataLoader支持使用多个线程来并行加载数据,加快数据加载的速度,提高训练效率。

  • 数据批次采样:除了按照批量大小加载数据外,DataLoader还支持自定义的数据批次采样方式。你可以通过设置batch_sampler参数来指定自定义的批次采样器,例如按照指定的样本顺序或权重进行采样。 

import torch
from torch.utils.data import Dataset, DataLoader

# 自定义数据集类
class CustomDataset(Dataset):
    def __init__(self, data):
        self.data = data
    
    def __len__(self):
        return len(self.data)
    
    def __getitem__(self, index):
        sample = self.data[index]
        # 在这里可以对数据样本进行预处理或转换
        # 返回经过处理的数据样本
        return sample

# 创建一个自定义数据集的实例
data = [1, 2, 3, 4, 5]
dataset = CustomDataset(data)

# 使用DataLoader加载数据集
batch_size = 2
shuffle = True

dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=shuffle)

# 迭代加载数据批次
for batch in dataloader:
    # 这里的batch是一个包含多个样本的张量或列表
    # 在这里可以对批次数据进行处理
    print(batch)
  • 定义了一个自定义数据集类CustomDataset,并创建了一个数据集实例dataset
  • 使用DataLoader来加载数据集dataset
    •  在创建DataLoader时,指定了批量大小batch_size和是否随机洗牌shuffle
  • 通过DataLoader加载数据集后,使用for循环迭代加载数据批次。每个批次的数据将作为一个张量或列表返回,可以根据需要在循环中对批次数据进行处理。

更多推荐

【算法练习Day1】二分查找&&移除元素

​​📝个人主页:@Sherry的成长之路🏠学习社区:Sherry的成长之路(个人社区)📖专栏链接:练题🎯长路漫漫浩浩,万事皆有期待文章目录二分查找解决方法一:左闭右开[left<=right),right=nums.size()-1;解决方法二:左闭右闭(left<right),right=nums.size(

【JS】—垃圾回收机制

一、指令材料1.定义JavaScript(JS)的垃圾回收机制是一种自动管理内存的过程,它有助于释放不再使用的内存,以避免内存泄漏和提高程序的性能。JavaScript的垃圾回收机制是一种自动管理内存的方式,以确保不再被引用的对象可以被垃圾回收,释放内存。2.分类2-1.引用计数算法引用计数算法通过跟踪每个对象被引用的

AI数字人虚拟主播,跟传统主播相比有哪些优势,究竟谁更胜一筹?

在今年,AI人工智能技术得到了快速发展,AI数字人开始大面积进入我们的生活,我们经常可以在各大直播间刷到AI数字人虚拟主播。这些主播光从表面上来看,完全跟真人一模一样,一样的容貌、一样的身形、一样的声音,几乎很难让人分辨出真假,或许正因为此,这种AI数字人虚拟主播才如此受欢迎。那这种跟真人如此神似的AI数字人主播,未来

Nginx常用模块

Nginx常用模块文章目录Nginx常用模块1.Nginx常用模块1.1.Nginx目录索引/下载模块1.1.1.配置autoindex语法1.1.2.autoindex配置实例1.1.3上传资源1.1.4.autoindex_exact_size配置语法1.1.5.修改配置文件1.1.6.再次访问1.1.7.修改日期

将树莓派转身为强大的Web服务器:使用Nginx和cpolar实现远程访问

文章目录1.Nginx安装2.安装cpolar3.配置域名访问Nginx4.固定域名访问5.配置静态站点安装Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的Web服务器,可以用于托管网站或Web应用程序。相比其他Web服务器,Nginx的内存占用率非常低,可以在树莓派等资源受限的设备上运行。同时结

网络安全深入学习第一课——热门框架漏洞(RCE-命令执行)

文章目录一、RCE二、命令执行/注入-概述三、命令执行-常见函数四、PHP命令执行-常见函数1、exec:2、system3、passthru4、shell_exec5、反引号backquote五、PHP命令执行-常见函数总结六、命令执行漏洞成因七、命令执行漏洞利用条件八、命令执行漏洞分类1、代码层过滤不严2、系统的漏

华为云云耀云服务器 L 实例评测|配置教程 + 用 Python 简单绘图

文章目录Part.IIntroductionChap.I云耀云服务器L实例简介Chap.II参与活动步骤Part.II配置Chap.I初步配置Chap.II配置安全组Part.III简单使用Chap.IVScode远程连接华为云Chap.II简单绘图ReferencePart.IIntroduction本篇博文是为了参

Python —— 类和对象

1、类1、认识类1、定义类:class类名(遵循驼峰命名),类可以从字面意思上了解,就是一类事物的统称,植物、水果、大海、大山等,都是一类事物,例如:classCar:定义一个车类;classFruit:定义一个水果类2、类的特性:1、类中会定义这个类共有的特点和状态,可以理解为这类事物的属性和方法2、类可以调用自己的

Linux下安装和使用MySQL的详细教程

✅作者简介:2022年博客新星第八。热爱国学的Java后端开发者,修心和技术同步精进。🍎个人主页:JavaFans的博客🍊个人信条:不迁怒,不贰过。小知识,大智慧。💞当前专栏:MySQL数据库学习之旅✨特色专栏:国学周更-心性养成之路🥭本文内容:Linux下安装和使用MySQL的详细教程文章目录Linux下My

Git的ssh方式如何配置,如何通过ssh方式拉取和提交代码

git的ssh配置HTTPS和SSH的区别设置SSH方式配置单个仓库配置账户公钥大家通过git拉取代码的时候,一般都是通过http的方式,简单方便。但是细心的童鞋肯定也注意到Git也是支持ssh方式的。可能很多人也试过使用这个方式,但是好像没有那么简单。那么什么是SSH呢?为啥要使用SSH方式呢?HTTPS和SSH的区

C++ 多线程

多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下两种类型的多任务处理:基于进程和基于线程:基于进程的多任务处理是程序的并发执行。基于线程的多任务处理是同一程序的片段的并发执行。多线程程序包含可以同时运行的两个或多个部分,这样的程序中的每个部分称为一个线程,每个线程定义了一个

热文推荐