【深度学习】Pytorch 系列教程(一):PyTorch数据结构:1、Tensor(张量):维度(Dimensions)、数据类型(Data Types)

2023-09-15 19:59:38

目录

一、前言

二、实验环境

三、PyTorch数据结构

0、分类

1、Tensor(张量)

1. 维度(Dimensions)

0维(标量)

1维(向量)

2维(矩阵)

3维张量

2. 数据类型(Data Types)


一、前言

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

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

Anaconda搭建深度学习环境py 3.7:tensorflow-gpu2.3.0、pytorch1.12.1_gpu版本;(使用conda下载cuda和cudnn);配置环境经验总结_anaconda下载tensorflow_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/128841527?spm=1001.2014.3001.5502

三、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(张量)

        Tensor(张量)是PyTorch中用于表示多维数据的主要数据结构。在PyTorch中,张量类似于多维数组,可以存储和操作数字数据。

1. 维度(Dimensions)

        Tensor(张量)的维度(Dimensions)是指张量的轴数或阶数。在PyTorch中,可以使用size()方法获取张量的维度信息,使用dim()方法获取张量的轴数。

0维(标量)
import torch

# 创建0维张量(标量)
scalar = torch.tensor(5)
print("0维张量(标量):")
print(scalar)
print("维度信息:", scalar.size())
print("轴数:", scalar.dim())

1维(向量)
import torch

# 创建1维张量(向量)
vector = torch.tensor([1, 2, 3, 4, 5])
print("\n1维张量(向量):")
print(vector)
print("维度信息:", vector.size())
print("轴数:", vector.dim())

2维(矩阵)
import torch

# 创建2维张量(矩阵)
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])
print("\n2维张量(矩阵):")
print(matrix)
print("维度信息:", matrix.size())
print("轴数:", matrix.dim())

3维张量
import torch

# 创建3维张量
tensor_3d = torch.tensor([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print("\n3维张量:")
print(tensor_3d)
print("维度信息:", tensor_3d.size())
print("轴数:", tensor_3d.dim())

        在上面的代码中,创建了一个3维张量tensor,它有2个维度为2x3的矩阵。通过调用size()方法,我们可以获取张量的维度信息,返回的是一个torch.Size对象,它是一个元组(tuple)形式的数据结构,表示各个维度的大小。在这个例子中,tensor的维度信息是[2, 2, 3],表示有2个矩阵,每个矩阵的大小为2x3。通过调用dim()方法,我们可以得到张量的轴数,这里是3。

2. 数据类型(Data Types)

        PyTorch中的张量可以具有不同的数据类型:

  • torch.float32torch.float:32位浮点数张量。
  • torch.float64torch.double:64位浮点数张量。
  • torch.float16torch.half:16位浮点数张量。
  • torch.int8:8位整数张量。
  • torch.int16torch.short:16位整数张量。
  • torch.int32torch.int:32位整数张量。
  • torch.int64torch.long:64位整数张量。
  • torch.bool:布尔张量,存储True或False。

        在创建张量时,可以通过指定dtype参数来设置所需的数据类型。例如,要创建一个64位浮点数张量,可以使用以下代码:

import torch

tensor = torch.tensor([1, 2, 3], dtype=torch.float64)
print(tensor)
print(tensor.dtype)

输出:

tensor([1., 2., 3.], dtype=torch.float64)
torch.float64


 

更多推荐

计算机视觉与深度学习-经典网络解析-AlexNet&ZFNet&VGG&GoogLeNet&ResNet[北邮鲁鹏]

目录标题参考文章LeNet5AlexNet参考文章AlexNet模型结构AlexNet共8层:AlexNet运作流程简单代码实现重要说明重要技巧主要贡献ZFNet主要改进减小第一层卷积核将第二、第三个卷积层的卷积步长都设置为2增加了第三、第四个卷积层的卷积核个数VGG参考VGG网络贡献使用尺寸更小的3×33\times

Vue前端框架11 组件事件与v-mode配合使用、组件数据传递(父传子)、插槽Slot、具名插槽、插槽中的数据传递(双向)

文章目录一、组件事件与v-model配合使用二、组件数据传递(子传父)三、插槽Slots四、具名插槽五、插槽中的数据传递一、组件事件与v-model配合使用组件A的数据变化组件B可以实时显示<template><h3>Main</h3><p>搜索内容为:{{search}}</p><component-b@search

c++文件服务器相关知识点记录-1

1.半同步/半异步模式半同步/半异步模式是一种多线程编程模式,其中一部分线程采用同步方式进行操作,另一部分线程采用异步方式进行操作。在半同步/半异步模式中,通常会有一个主线程和多个工作线程。主线程负责接收和分发任务,它会等待工作线程的完成,并且需要等待所有工作线程完成后才能终止。工作线程负责执行具体的任务,它们可以并行

TikTok的媒体革命:新闻业如何适应短视频时代?

在数字时代,媒体行业一直在不断演变和创新,以适应观众的变化需求和技术的发展。而在这个进化的过程中,短视频应用TikTok已经崭露头角,成为了一个重要的信息传播平台。这篇文章将深入探讨TikTok如何引领了媒体的一场革命,以及新闻业如何适应这个充满挑战和机会的短视频时代。TikTok:媒体的新宠TikTok的成功不仅体现

【xilinx】Versal启动文件简述 pdi bif

Versal启动文件简述FPGA开发圈2022-12-2216:09400浏览0评论0点赞作者:MacMahonStephen,AMD赛灵思开发者Versal™是由多个高度耦合的可配置块组成的自适应计算加速平台(ACAP)。这些块包括NoC、AIE、PL和CIPS(CIPS本身包含不同的域:LPD和FPD)等,启动这些

串口通信遇到的一个问题。

crash信息:W/System.err:java.io.IOException:writefailed:EAGAIN(Tryagain)W/System.err:atlibcore.io.IoBridge.write(IoBridge.java:531)W/System.err:atjava.io.FileOutpu

DSU ON TREE

DSUONTREEDSU:并查集DSUONTREE:树上启发式合并我也不知道为啥树上并查集就是树上启发式合并启发式合并的思想是每次把小的往大的合并,也就是最大化利用已有的答案(大的数组不用清空,在原基础上加上小的即可)。转移到树上,“大”显然就是树的重心。能解决什么样的问题?需要统计子树信息,但是子树的信息不好合并。比

为什么要用vite,用vite的原因是什么

为什么选Vite|Vite官方中文文档(vitejs.dev)在很久以前,javascript是没有模块化的,就是一个整体,所以为了将文件分成很小的模块文件,才出现“打包”这个概念之前的拆分工具像webpack,rollup等,因为项目越来越大,需要很长时间才能启动开发服务器,热替换的作用也不太明显,需要很长时间才会显

frp内网穿透服务器搭建(自建frp内网穿透)

一、简介frp是一款跨平台的内网穿透工具,支持Windows系统,支持linux内核的系统,支持软路由系统,支持群晖nas系统。可以实现多种服务的穿透,以我个人为例,我就通过frp实现了路由器的远程管理,nas的远程访问,pve虚拟机的远程管理,办公电脑的远程桌面。通过一段时间的使用感觉frp就是神器!无线路由器-网关

RDMA性能测试工具集preftest_README

文章目录1概述2安装3测试方法说明4测试说明5运行测试所有测试的通用选项延迟测试选项带宽测试选项ib_send_lat(发送延迟测试)和ib_send_bw(发送带宽测试)的选项ib_atomic_lat(原子延迟测试)和ib_atomic_bw(原子带宽测试)的选项原始以太网发送带宽测试的选项测试工具:https:/

宁波融资融券开户利息率最低是多少?两融利率5%或以下!

宁波融资融券开户利息率最低是多少?两融利率5%或以下!融资融券是指投资者通过借入资金融资,或者借入证券卖出并借入资金购买证券,以达到增加投资收益的一种交易方式。融资融券交易需要满足一定的条件,如投资者必须拥有一定的股票、证券或现金等交易资产,且在证券公司开通融资融券账户。融资融券交易具有一定的风险,需要投资者了解相关规

热文推荐