【深度学习】Pytorch 系列教程(三):PyTorch数据结构:2、张量的数学运算(1):向量运算(加减乘除、数乘、内积、外积、范数、广播机制)

文章目录

  • 一、前言
  • 二、实验环境
  • 三、PyTorch数据结构
    • 0、分类
    • 1、Tensor(张量)
      • 1. 维度(Dimensions)
      • 2. 数据类型(Data Types)
      • 3. GPU加速(GPU Acceleration)
    • 2、张量的数学运算
      • 1. 向量运算
        • a. 简单运算
        • b. 广播操作
        • c. 运算函数
          • 加法add
          • 乘法mul
          • 内积(点积)dot
          • 外积(叉积)cross
          • 范数norm

一、前言

  本文将介绍PyTorch中张量的数学运算之向量运算,包括加减乘除、数乘、内积、外积、范数、广播机制等

二、实验环境

  本系列实验使用如下环境

conda create -n DL python==3.11
conda activate DL
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia

三、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中用于表示多维数据的主要数据结构,类似于多维数组,可以存储和操作数字数据。

1. 维度(Dimensions)

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

在这里插入图片描述

2. 数据类型(Data Types)

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

  • torch.float32或torch.float:32位浮点数张量。
  • torch.float64或torch.double:64位浮点数张量。
  • torch.float16或torch.half:16位浮点数张量。
  • torch.int8:8位整数张量。
  • torch.int16或torch.short:16位整数张量。
  • torch.int32或torch.int:32位整数张量。
  • torch.int64或torch.long:64位整数张量。
  • torch.bool:布尔张量,存储True或False。

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

3. GPU加速(GPU Acceleration)

【深度学习】Pytorch 系列教程(二):PyTorch数据结构:1、Tensor(张量): GPU加速(GPU Acceleration)

2、张量的数学运算

  PyTorch提供了丰富的操作函数,用于对Tensor进行各种操作,如数学运算、统计计算、张量变形、索引和切片等。这些操作函数能够高效地利用GPU进行并行计算,加速模型训练过程。

1. 向量运算

a. 简单运算
import torchtensor1 = torch.tensor([1, 2, 3])
tensor2 = torch.tensor([4, 5, 6])
# 加法
result_add = tensor1 + tensor2
print("加法结果:", result_add)  
  • 输出: tensor([5, 7, 9])
# 减法
result_sub = tensor1 - tensor2
print("减法结果:", result_sub) 
  • 输出: tensor([-3, -3, -3])
# 乘法
result_mul = tensor1 * tensor2
print("乘法结果:", result_mul)  
  • 输出: tensor([4, 10, 18])
# 除法
result_div = tensor1 / tensor2
print("除法结果:", result_div) 
  • 输出: tensor([0.2500, 0.4000, 0.5000])
scalar_multiplication_result = 2 * tensor1
print("数乘结果:", scalar_multiplication_result)
  • 数乘结果: tensor([2, 4, 6])
b. 广播操作

  可以对不同维度的向量进行运算,利用广播机制进行自动扩展和对齐。

# 广播操作
broadcasted = tensor1 + 1
print("广播结果:", broadcasted)
Broadcasted result: tensor([2, 3, 4])
  • 广播结果: tensor([2, 3, 4])

在这里插入图片描述

c. 运算函数
加法add
import torchvector1 = torch.tensor([1, 2, 3])
vector2 = torch.tensor([4, 5, 6])# 向量相加
result = torch.add(vector1, vector2)print(result)
  • 输出: tensor([5, 7, 9])
乘法mul
import torchvector1 = torch.tensor([1, 2, 3])
vector2 = torch.tensor([4, 5, 6])# 向量相乘
result = torch.mul(vector1, vector2)print(result)
  • 输出: tensor([4, 10, 18])
内积(点积)dot
import torchvector1 = torch.tensor([1, 2, 3])
vector2 = torch.tensor([4, 5, 6])# 计算内积
result = torch.dot(vector1, vector2)print(result)
  • 输出: tensor(32)
    32 = 1 ∗ 4 + 2 ∗ 5 + 3 ∗ 6 32 = 1*4 +2 * 5+3*6 32=14+25+36

在这里插入图片描述

外积(叉积)cross

  叉积是两个三维向量的向量积,结果是一个新的向量,垂直于原始向量所在平面。

import torchvector1 = torch.tensor([1, 0, 0])
vector2 = torch.tensor([0, 1, 0])# 计算叉积
cross_product = torch.cross(vector1, vector2)print(cross_product)

在这里插入图片描述

范数norm

  范数是衡量向量大小的指标,norm默认计算L2范数。

import torchvector = torch.tensor([1, 2, 3, 4, 5], dtype=torch.float)# 计算范数
norm = torch.norm(vector)print(norm)
  • 输出: tensor(7.4162)
    7.4162 = 1 2 + 2 2 + 3 2 + 4 2 + 5 2 7.4162=\sqrt{1^2+2^2+3^2+4^2+5^2} 7.4162=12+22+32+42+52

注意数据类型转换

RuntimeError: linalg.vector_norm: Expected a floating point or complex tensor as input. Got Long

对比:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/472526.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下解压tar.xz文件的命令

tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 ------------------------------------------ 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的…

互联网加竞赛 基于计算机视觉的身份证识别系统

0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于机器视觉的身份证识别系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-sen…

​StableSwarmUI#超越文本的prompt

今天看到一个新的webui方案,是Stability-AI开源的: StableSwarmUI 是一个模块化的稳定扩散web用户界面,着重于使强大的工具易于访问、高性能和可扩展性。 由于项目还在开发中,我们可以先了解下,翻看了它的特点&#xf…

排序算法---计数排序

原创不易,转载请注明出处。欢迎点赞收藏~ 计数排序(Counting Sort)是一种线性时间复杂度的排序算法,其核心思想是通过统计待排序元素的个数来确定元素的相对位置,从而实现排序。 具体的计数排序算法步骤如下&#xff…

【c++】vector的增删查改

1.先定义一个类对象vector 为了防止和库里面发生冲突&#xff0c;定义一个命名空间&#xff0c;将类对象放在命名空间 里面 #include<iostream> using namespace std; namespace zjw {class vector {public:private:}; }2.定义变量&#xff0c;需要一个迭代器&#xff…

Sora:将文本转化为视频的创新之旅

一.能力 我们正致力于让 AI 掌握理解和模拟物理世界动态的能力&#xff0c;旨在培养能够协助人们解决现实世界互动问题的模型。 介绍 Sora——我们开发的文本到视频转换模型。Sora 能够根据用户的输入提示&#xff0c;生成最长达一分钟的高质量视频内容。 目前&#xff0c;Sora…

JDBC访问数据库

目录 加载Driver驱动配置驱动地址 获取数据库连接创建会话-SQL命令发送器通过Statement发送SQL命令并得到结果处理结果关闭数据库资源测试 加载Driver驱动 1.在模块JDBC中新建一个lib目录文件 2. 将mysql-connector-j-8.2.0包粘贴至lib目录中。 配置驱动地址 // 加载…

c++类和对象新手保姆级上手教学(上)

前言&#xff1a; c其实顾名思义就是c语言的升级版&#xff0c;很多刚学c的同学第一感觉就是比c语言难学很多&#xff0c;其实没错&#xff0c;c里的知识更加难以理解可以说杂且抽象&#xff0c;光是类和对象&#xff0c;看起来容易&#xff0c;但想完全吃透&#xff0c;真的挺…

2.13日学习打卡----初学RocketMQ(四)

2.13日学习打卡 目录&#xff1a; 2.13日学习打卡一.RocketMQ之Java ClassDefaultMQProducer类DefaultMQPushConsumer类Message类MessageExt类 二.RocketMQ 消费幂消费过程幂等消费速度慢的处理方式 三.RocketMQ 集群服务集群特点单master模式多master模式多master多Slave模式-…

js中函数缓存详解(如何实现和应用场景)

文章目录 一、是什么二、如何实现闭包柯里化高阶函数 三、应用场景参考文献 一、是什么 函数缓存&#xff0c;就是将函数运算过的结果进行缓存 本质上就是用空间&#xff08;缓存存储&#xff09;换时间&#xff08;计算过程&#xff09; 常用于缓存数据计算结果和缓存对象 …

【Java程序员面试专栏 Java领域】Java集合 核心面试指引

关于Java 集合部分的核心知识进行一网打尽,主要包括Java各类集合以及Java的HashMap底层原理,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 集合基本概念和比较 关于集合的基本分类和知识 Java集合有哪些种类 Java 集合, 也叫作容器…

C++ STL->list模拟实现

theme: smartblue list list文档 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一个元素…