首页 > 其他分享 >PyTorch基础知识-新手笔记

PyTorch基础知识-新手笔记

时间:2023-08-01 13:34:15浏览次数:39  
标签:10 dim torch 矩阵 基础知识 PyTorch print 新手 t1

逐元素操作

Tensor中也有逐元素操作,大部分的数学运算都属于逐元素操作,逐元素操作的输入与输出的形状相同。

常见的逐元素操作可参考下表:

abs/add:绝对值/加法

addcdiv(t, t1, t2, value=1):t1与t2按元素除后,乘以value加t,即 t+(t1/t2)*value

addcmul(t, t1, t2, value=1):t1与t2按元素乘后,乘以value加t,即t+(t1*t2)*value

ceil/floor:向上取整/向下取整

PyTorch基础知识-新手笔记_NumPy

PyTorch基础知识-新手笔记_NumPy_02

clamp(t, min, max):将张量元素限制在指定区间

PyTorch基础知识-新手笔记_正态分布_03

exp/log/pow:指数/对数/幂

PyTorch基础知识-新手笔记_正态分布_04

PyTorch基础知识-新手笔记_正态分布_05

PyTorch基础知识-新手笔记_点积_06

mul(或*)/neg:逐元素乘法/取反

sigmoid/tanh/softmax:激活函数

PyTorch基础知识-新手笔记_正态分布_07

sign/sqrt:取符号/开根号

PyTorch基础知识-新手笔记_NumPy_08

PyTorch基础知识-新手笔记_正态分布_09

这些操作均会创建新的Tensor(不修改本身),如果需要就地操作(修改本身),可以使用这些方法的下划线版本。

import torch

# 生成1×3的二维矩阵(服从标准正态分布)
t = torch.randn(1, 3)
print("*"*10 + " t " + "*"*10)
print(t)

# 进行t+2运算:t.add_()
res3 = t.add_(2)
print("*"*10 + " res3 " + "*"*10)
print(res3)
# 修改t本身
print("*"*10 + " t " + "*"*10)
print(t)

# 进行t+2运算:t.add()
res3 = t.add(2)
print("*"*10 + " res3 " + "*"*10)
print(res3)
# 不修改t本身
print("*"*10 + " t " + "*"*10)
print(t)

运行结果:

PyTorch基础知识-新手笔记_NumPy_10

import torch

# 生成1×3的二维矩阵(服从标准正态分布)
t = torch.randn(1, 3)
print("*"*10 + " t " + "*"*10)
print(t)

# 生成3×1的二维矩阵(服从标准正态分布)
t1 = torch.randn(3, 1)
print("*"*10 + " t1 " + "*"*10)
print(t1)

# 生成1×3的二维矩阵(服从标准正态分布)
t2 = torch.randn(1, 3)
print("*"*10 + " t2 " + "*"*10)
print(t2)

# addc:两数相加,加 进位(carry) 位。  公式:t + (t1/t2)*value
res = torch.addcdiv(t, t1, t2, value=0.1)
print("*"*10 + " res " + "*"*10)
print(res)

# 计算sigmoid函数
res1 = torch.sigmoid(t)
print("*"*10 + " res1 " + "*"*10)
print(res1)

# 将t限制在[0, 1]之间
res2 = torch.clamp(t, 0, 1)
print("*"*10 + " res2 " + "*"*10)
print(res2)
# 不修改t本身
print("*"*10 + " t " + "*"*10)
print(t)

运行结果:

PyTorch基础知识-新手笔记_点积_11

归并操作

对输入进行归并或合计等操作,输入、输出的形状一般不相同,而且往往是输入大于输出。归并操作可以对整个张量进行归并,也可以沿着某个维度进行归并。

常见的归并操作如下:

cumprod(t, axis):在指定维度对t进行累积。cumulative product

cumsum:在指定维度对t进行累加。cumulative sum

dist(a, b, p=2):返回a、b之间的p阶范数

PyTorch基础知识-新手笔记_NumPy_12

mean/median:均值/中位数

std/var:标准差/方差

PyTorch基础知识-新手笔记_NumPy_13

norm(t, p=2):返回t的p阶范数

PyTorch基础知识-新手笔记_点积_14

prod(t)/sum(t):返回t所有元素的积/和

归并操作一般涉及dim参数,用于指定哪个维度进行归并。另一个参数keepdim,用于说明输出结果中是否保留含1的维度,默认:False,即不保留。

import torch

# 生成一个含6个数的向量
a = torch.linspace(0, 10, 6)
print("*"*10 + " a " + "*"*10)
print(a)

# 使用view方法,把a变为2×3的矩阵
b = a.view((2, 3))
print("*"*10 + " b " + "*"*10)
print(b)
# 不修改本身
print("*"*10 + " a " + "*"*10)
print(a)

# 沿y轴方向累加,最后形成一行:dim=0
c = b.sum(dim=0)
print("*"*10 + " c " + "*"*10)
print(c)
# 不修改本身
print("*"*10 + " b " + "*"*10)
print(b)

# 沿x轴方向累加,最后形成一列:dim=1
d = b.sum(dim=1)
print("*"*10 + " d " + "*"*10)
print(d)
# 不修改本身
print("*"*10 + " b " + "*"*10)
print(b)

# 沿y轴方向累加,最后形成一行,dim=0,并保留含1的维度
e = b.sum(dim=0, keepdim=True)
print("*"*10 + " e " + "*"*10)
print(e)
# 不修改本身
print("*"*10 + " b " + "*"*10)
print(b)

运行结果:

PyTorch基础知识-新手笔记_点积_15

比较操作

比较操作一般进行逐元素比较操作,有些是按指定方向比较。

常用的比较函数如下:

eq:比较张量是否相等,支持广播机制。

equal:比较张量是否有相同的形状与值。

gt/lt/ge/le:大于/小于比较,大于或等于/小于或等于比较。

gt:greater than,大于

lt:less than,小于

ge:greater than or equal to,大于等于

le:less than or equal to,小于等于

max/min(t, axis):返回最值,若指定axis,则额外返回下标。

PyTorch基础知识-新手笔记_NumPy_16

topk(t, k, axis):在指定的axis维上取最高的k个值。

import torch

# 生成一个2×3的矩阵:[0, 10]均匀分成6份
x = torch.linspace(0, 10, 6).view(2, 3)
print("*"*10 + " x " + "*"*10)
print(x)

# 求所有元素的最大值
x1 = torch.max(x)
print("*"*10 + " x " + "*"*10)
print(x1)

# dim=0,最后形成一行,每列取最大值。
x2 = torch.max(x, dim=0)
print("*"*10 + " x " + "*"*10)
print(x)
print("*"*10 + " x2 " + "*"*10)
print(x2)

# dim=0,最后形成一行,每列取1个最大值,以及在该列的位置。
x3 = torch.topk(x, 1, dim=0)
print("*"*10 + " x " + "*"*10)
print(x)
print("*"*10 + " x3 " + "*"*10)
print(x3)

# dim=1,最后形成1列,每行取1个最大值,以及在该行的位置。
x3 = torch.topk(x, 1, dim=1)
print("*"*10 + " x " + "*"*10)
print(x)
print("*"*10 + " x3 " + "*"*10)
print(x3)

运行结果:

PyTorch基础知识-新手笔记_NumPy_17

矩阵操作

矩阵运算有两种:一种是逐元素乘法,另外一种是点积乘法。

PyTorch中常用的矩阵函数:

dot(t1, t2):计算张量(1维)的内积(或点积)。

mm(mat1, mat2)/bmm(bach1, batch2):计算矩阵乘法/含批量的3维矩阵乘法。

mm:matrix multiplication,矩阵乘法

bmmbatch matrix multiplication,批量矩阵乘法

mv(t1, v1):计算矩阵与向量乘法

t:转置

PyTorch基础知识-新手笔记_NumPy_18

svd(t):计算t的SVD分解。

注:

1)Torch的dot函数与NumPy的dot函数有点不同,Torch中的dot函数是对两个1维张量进行点积运算,NumPy中的dot函数则无此限制。

2)mm是对2维矩阵进行点积运算,bmm是对含批量的3维矩阵进行点积运算。

3)转置运算会导致存储空间不连续,需要调用contiguous方法转为连续。

import torch

a = torch.tensor([2, 3])
print("*"*10 + " a " + "*"*10)
print(a)

b = torch.tensor([3, 4])
print("*"*10 + " b " + "*"*10)
print(b)

c = torch.dot(a, b)
print("*"*10 + " c " + "*"*10)
print(c)

x = torch.randint(10, (2, 3))
print("*"*10 + " x " + "*"*10)
print(x)

y = torch.randint(6, (3, 4))
print("*"*10 + " y " + "*"*10)
print(y)

z = torch.mm(x, y)
print("*"*10 + " z " + "*"*10)
print(z)

x = torch.randint(10, (2, 2, 3))
print("*"*10 + " x " + "*"*10)
print(x)

y = torch.randint(6, (2, 3, 4))
print("*"*10 + " y " + "*"*10)
print(y)

z = torch.bmm(x, y)
print("*"*10 + " z " + "*"*10)
print(z)

运行结果:

PyTorch基础知识-新手笔记_正态分布_19

PyTorch基础知识-新手笔记_正态分布_20

PyTorch与NumPy比较

PyTorch与NumPy的函数对照表

操作类型

NumPy

PyTorch

数据类型

np.ndarray

torch.Tensor

np.float32

torch.float32

torch.float

np.float64

torch.float64

torch.double

np.int64

torch.int64

torch.long

从已有数据构建

np.array([3.2, 4.3], dtype=np.float16)

torch.tensor([3.2, 4.3], dtype=torch.folat16)

x.copy()

x.clone()

np.concatenate

torch.cat

操作类别

NumPy

PyTorch

线性代数

np.dot

torch.mm

属性

x.ndim

x.dim()

x.size

x.nelement()

形状操作

x.reshape

x.reshape

x.view

x.flatten

x.view(-1)

类型转换

np.floor(x)

torch.floor(x)

x.floor()

操作类别

NumPy

PyTorch

比较

np.less

x.lt

np.less_equal

x.le

np.greater

x.gt

np.greater_equal

x.ge

np.equal

x.eq

np.not_equal

x.ne

随机种子

np.random.seed

torch.manual_seed

















标签:10,dim,torch,矩阵,基础知识,PyTorch,print,新手,t1
From: https://blog.51cto.com/u_16093693/6919855

相关文章

  • 大连人工智能计算平台——华为昇腾AI平台——高性能计算HPC的pytorch环境的软件升级—
       aarch64架构CPU下Ubuntu系统环境源码编译pytorch-gpu-2.0.1版本X86架构CPU下Ubuntu系统环境源码编译pytorch-gpu-2.0.1版本如何拉取指定CPU架构并且指定ubuntu版本并且指定cuda和cudnn版本的docker镜像如何拉取指定CPU架构并且指定ubuntu版本并且指定cuda和cudnn版本......
  • 深度学习TensorFlow和CUDA、cudnn、Pytorch以及英伟达显卡对应版本对照表
    一、TensorFlow对应版本对照表版本Python版本编译器cuDNNCUDAtensorflow-2.9.03.7-3.10 8.111.2tensorflow-2.8.03.7-3.10 8.111.2tensorflow-2.7.03.7-3.9 8.111.2tensorflow-2.6.03.6-3.9GCC7.3.18.111.2tensorflow-2.5.03.6-3.9GCC......
  • pytorch-tensor高级OP
    Tensoradvancedoperation▪Where▪Gatherwhere返回的最终的tensor中的每一个值有可能来着A,也有可能来自B。torch.where(condition,A,B)->tensor满足condition条件则该位置为A[..],否则为B[..]。这个condition也是一个相同shape的tensor比如说:torch.where(cond>0,a,......
  • pytorch-tensor属性统计(norm,max,min...)
    statistics▪norm(范数)▪mean,sum(平均值,求和)▪prod(累乘)▪max,min,argmin,argmax▪kthvalue,topk(第k大)norm(范式)这里面有一范式和二范式。一范式:\[||x||_1=\sum_k|x_k|\]二范式:\[||x||_1=\sqrt{\sum_k{x_k^2}}\]a.norm(k,dim)这个dim,可以不填,不填就是......
  • PyTorch 中的多 GPU 训练和梯度累积作为替代方案
    动动发财的小手,点个赞吧!在本文中,我们将首先了解数据并行(DP)和分布式数据并行(DDP)算法之间的差异,然后我们将解释什么是梯度累积(GA),最后展示DDP和GA在PyTorch中的实现方式以及它们如何导致相同的结果。简介训练深度神经网络(DNN)时,一个重要的超参数是批量大小。通常,batchsi......
  • Pytorch 最全入门介绍,Pytorch入门看这一篇就够了
    本文通过详细且实践性的方式介绍了PyTorch的使用,包括环境安装、基础知识、张量操作、自动求导机制、神经网络创建、数据处理、模型训练、测试以及模型的保存和加载。1.Pytorch简介在这一部分,我们将会对Pytorch做一个简单的介绍,包括它的历史、优点以及使用场景等。1.1Pyt......
  • 一位大咖写给软件编程新手的建议
    按笔者的理解,不管你是否科班出身,需要从入门到精通开始进行学习并且进行实践,在实践中去积累和总结经验,这样才能够提高自己的编程认知和思维方式。此博文只是笔者现在的一些建议,后面如果有新的亮点那再补充完善。1、 理解需求;编码之前必须先理解需求,知道你需要做什么,然......
  • 微机原理基础知识
    前言微机原理期末复习的一些概念性的基础知识总结。内容(1)微处理器、微机与微机系统三者之间有什么异同?(1)把CPU(运算器和控制器)用大规模集成电路技术做在一个芯片上,即为微处理器。(2)微处理器加上一定数量的存储器和外部设备(或外部设备接口)构成了微型计算机(也就是微机)。(3)微型计算机与......
  • X86架构CPU下Ubuntu系统环境源码编译pytorch-gpu-2.0.1版本
    本文操作步骤与aarch64架构CPU下Ubuntu系统环境源码编译pytorch-gpu-2.0.1版本大致相同,只是CPU架构不同而已,因此这里只记录不同的地方。 重点:一个个人心得,那就是要编译pytorch源码最好是选择docker环境,因为这种环境下配置比较纯净,一定要避免那种自己使用多年的Linux系统,那种......
  • pytorch-合并与分割
    Mergeorsplit▪Cat(合并)▪Stack(合并)▪Split(拆分)▪Chunk(拆分)合并cat这个就是合并两个tensor比如说有两个班级的成绩单,一个是1-4班的,一个是5-9班的,我们现在需要合并这两份成绩单。▪Statisticsaboutscores▪[class1-4,students,scores]▪[class5-9,stud......