一文理解pytorch张量概念和tensor的三种创建方式!

2023-11-06

1、张量是什么?

张量是一个多维数组,它是标量、向量、矩阵的高维拓展。
在这里插入图片描述

1.1 Variable

在这里插入图片描述

Variable是 torch.autograd中的数据类型,主要用于封装 Tensor,进行自动求导。
data : 被包装的Tensor
grad : data的梯度
grad_fn : 创建 Tensor的 Function,是自动求导的关键
requires_grad:指示是否需要梯度
is_ leaf : 指示是否是叶子结点(张量)

1.2 Tensor

在这里插入图片描述
Pytorch 0.4.0版开始,Variable并入Tensor。

dtype:张量的数据类型,如torch.FloatTensor,torch.cuda.FloatTensor
shape:张量的形状,如(64,3,224,224)
device:张量所在设备,GPU/CPU,是加速的关键。

2、张量的创建

2.1 直接创建

torch.tensor(data, dtype=None, device=None, requires_grad=False, pin_memory=False)

功能:从data创建tensor
• data: 数据, 可以是list, numpy
• dtype : 数据类型,默认与data的一致
• device : 所在设备,cuda/cpu
• requires_grad:是否需要梯度
• pin_memory:是否存于锁页内存

torch.from_numpy(ndarray)

功能:从numpy创建tensor
注意事项:从torch.from_numpy创建的tensor于原ndarray共享内存,当修改其中一个的数据,另外一个也将会被改动。
在这里插入图片描述

>>> import torch
>>> import numpy as np

#================直接创建==========================
# 通过torch.tensor()创建张量
# data可以是list或者numpy的ndarray
>>> arr = np.ones((3,3))
>>> print("ndarray的数据类型:",arr.dtype)
>>> t = torch.tensor(arr,device="cpu")
>>> print(t)
ndarray的数据类型: float64
tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]], dtype=torch.float64)
    
# 通过torch.from_numpy()创建张量
>>> arr = np.array([[1,2,3],[4,5,6]])
>>> t = torch.from_numpy(arr)
>>> print("numpy array:\n",arr)
>>> print("tensor:\n",t)    
numpy array:
 [[1 2 3]
 [4 5 6]]
tensor:
 tensor([[1, 2, 3],
        [4, 5, 6]], dtype=torch.int32)
        
>>> print("\n修改arr")
>>> arr[0,0] = 0
>>> print("numpy array:\n",arr)
>>> print("tensor:\n",t)
修改arr
numpy array:
 [[0 2 3]
 [4 5 6]]
tensor:
 tensor([[0, 2, 3],
        [4, 5, 6]], dtype=torch.int32)

2.2 依据数值创建

torch.zeros(*size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)

功能:依size创建全0张量
• size: 张量的形状,如(3, 3)、 (3, 224,224)
• out : 输出的张量
• layout : 内存中布局形式, 有strided,sparse_coo等
• device : 所在设备,gpu/cpu
• requires_grad:是否需要梯度

>>> out_t = torch.tensor([1])
>>> t = torch.zeros((3,3),out=out_t)
>>> print(t,"\n",out_t)
>>> print(id(t),id(out_t),id(t)==id(out_t))

tensor([[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]]) 
 tensor([[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]])
2511606349000 2511606349000 True

torch.zeros_like(input,dtype=None,layout=None,device=None,requires_grad=False)

功能:依input形状创建全0张量
• intput: 创建与input同形状的全0张量
• dtype : 数据类型
• layout : 内存中布局形式
• device : 所在设备,gpu/cpu
• requires_grad:是否需要梯度

>>> t1 = torch.zeros((2,2))
>>> torch.zeros_like(t1)
tensor([[0., 0.],
        [0., 0.]])

torch.ones(*size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)

功能:依size创建全1张量

>>> torch.full((3,3),10)
tensor([[10., 10., 10.],
        [10., 10., 10.],
        [10., 10., 10.]])

torch.ones_like(input,dtype=None,layout=None,device=None,requires_grad=False)

功能:依input形状创建全1张量

torch.full(size,fill_value,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)

功能:依据size,创建全为为fill_value的张量

torch.full_like(input, fill_value,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False,
memory_format=torch.preserve_format)

功能:依input形状创建全为fill_value的张量

torch.arange(start=0,end,step=1,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)

功能:创建等差的1维张量
注意事项:数值区间为[start, end)
• start: 数列起始值
• end : 数列“结束值”
• step: 数列公差,默认为1

>>> torch.arange(2,10,2)
tensor([2, 4, 6, 8])

torch.linspace(start,end,steps=100,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)

功能:创建均分的1维张量
注意事项:数值区间为[start, end]
• start: 数列起始值
• end : 数列结束值
• steps: 数列长度

>>> torch.linspace(2,10,10)
tensor([ 2.0000,  2.8889,  3.7778,  4.6667,  5.5556,  6.4444,  7.3333,  8.2222,  9.1111, 10.0000])

torch.logspace(start,end,steps=100,base=10.0,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)

功能:创建对数均分的1维张量
注意事项:长度为steps, 底为base
• start: 数列起始值
• end : 数列结束值
• steps: 数列长度
• base : 对数函数的底,默认为10

>>> torch.logspace(0,2,10)
tensor([  1.0000,   1.6681,   2.7826,   4.6416,   7.7426,  12.9155,  21.5443, 35.9381,  59.9484, 100.0000])

torch.eye(n,m=None,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)

功能:创建单位对角矩阵(2维张量)
注意事项:默认为方阵
• n: 矩阵行数
• m : 矩阵列数

>>> torch.eye(3)
tensor([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])
>>> torch.eye(3,4)
tensor([[1., 0., 0., 0.],
        [0., 1., 0., 0.],
        [0., 0., 1., 0.]])     

2.3 依概率分布创建张量

torch.normal(mean, std, *, generator=None, out=None)

功能:生成正态分布(高斯分布)
• mean : 均值
• std : 标准差
四种模式:
mean为标量, std为标量
mean为标量, std为张量
mean为张量, std为标量
mean为张量, std为张量

# mean:张量 std:张量
>>> mean = torch.arange(1,5,dtype=torch.float)
>>> std = torch.arange(1,5,dtype=torch.float)
>>> t_normal = torch.normal(mean,std)
>>> print(t_normal)
tensor([ 1.0155, -1.4016,  4.7298,  7.2105])
# 均值、标准差都为标量时,需要设置size
# 此时只有一个分布
>>> t_normal = torch.normal(0.,1.,size=(4,))
>>> print(t_normal
tensor([-0.4018, -0.8195,  0.7582,  0.1841])
>>> t_normal = torch.normal(mean,1)
>>> print(t_normal)  
tensor([1.3022, 2.8148, 3.1201, 1.5378])
>>> t_normal = torch.normal(1,std)
>>> print(t_normal)
tensor([ 0.0816,  0.0299, -1.2149,  1.5250])

torch.randn(*size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)

功能:依size生成标准正态度分布。

randn_like(input, dtype=None, layout=None, device=None,requires_grad=False,memory_format=torch.preserve_format)

功能:依input形状生成标准正态度分布。

torch.rand(*size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)

功能:在区间[0, 1)上,生成均匀分布

randn_like(input, dtype=None, layout=None, device=None,requires_grad=False,memory_format=torch.preserve_format)

功能:依input形状在区间[0, 1)上,生成均匀分布

torch.randint(low=0,high,size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)

功能:区间[low, high)生成整数均匀分布

randint_like(input, low=0, high, dtype=None,layout=torch.strided, device=None,
requires_grad=False,memory_format=torch.preserve_format)

功能:依input形状在区间[low, high)生成整数均匀分布

torch.randperm(n,out=None,dtype=torch.int64,layout=torch.strided,device=None,requires_grad=False)

功能:生成0到n-1的随机排列
n : 张量的长度

torch.bernoulli(input,*,generator=None,out=None)

功能:以input为概率,生成伯努力分布
(0-1分布,两点分布)
input : 概率值

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一文理解pytorch张量概念和tensor的三种创建方式! 的相关文章

随机推荐

  • Linux中查看所有文件夹及包括文件大小之和

    如果想查看Linux中哪个文件夹最大 可以通过du sh 命令查询哪个文件夹最大 然后进入该文件夹继续执行该命令 直到找出最大的为止 1 Linux中查看所有文件夹和文件大小 这条命令将会计算该文件夹下所有文件大小总和 du sh 执行效果
  • 1、Reading Rasa Source Code —— main

    目录 main main 从 pypi 官方网站上下载 rasa 的最后一个释放版本 截止目前 最新版本为 2 2 1 的源码 解压后 在根目录下 找到 setup py 文件 这是安装引导程序 我们主要关注的是 entry points
  • TypeScript算法题实战——二叉搜索树篇

    二叉搜索树 也叫二叉查找树 二叉排序树 是具有下列性质的二叉树 若它的左子树不空 则左子树上所有结点的值均小于它的根结点的值 若它的右子树不空 则右子树上所有结点的值均大于它的根结点的值 注意 二叉搜索树中序遍历的结果是有序的 本系列博文将
  • 【Python】NMF非负矩阵分解算法(测试代码)

    目录 算法说明 百度百科 基本例程 总结 欢迎关注 Python 系列 持续更新中 欢迎关注 Python 系列 持续更新中 算法说明 百度百科 从多元统计的观点看 NMF是在非负性的限制下 在尽可能保持信息不变的情况下 将高维的随机模式简
  • 视频号5种提高曝光量的技巧

    在新开一个视频号 我们如何来尽可能吸引更多粉丝关注我们呢 在初期如何进行运营呢 我们先来看看现在视频号已知的一个机制 视频号虽然会依托位置 标签 话题等多维度信息进行智能分发 但目前最主 要传播还是靠基于微信生态形成的社交链 即当你的视频被
  • Hive和Hbase的对接

    引言 我们都知道hive数据存储在hdfs上 元数据可以存储在mysql中 计算框架采用mapreduce hive实际上只做分析工具 那么hive的数据是不是也可以存储在hbase呢 文章目录 一 配置hive 二 hive中数据与hba
  • C语言——创建文件

    创建文件 include
  • 俄罗斯方块(C++)

    目录 一 俄罗斯方块简易版的实现 1 图形的存储 2 图形的显示 3 图形的操作 4 碰撞检测 1 碰撞检测 移动 2 碰撞检测 旋转 5 消除整行 6 游戏结束 7 完整代码 二 俄罗斯方块简易版的升级 1 新增属性 2 更改初始化函数
  • CSS 定位(position) (三)

    叠放次序 z index 当对多个元素同时设置定位时 定位元素之间有可能会发生重叠 在CSS中 要想调整重叠定位元素的堆叠顺序 可以对定位元素应用z index层叠等级属性 其取值可为正整数 负整数和0 比如 z index 2 注意 z
  • 阿里云磁盘异常爆满的原因排查及解决方法

    阿里云磁盘异常爆满的原因排查及解决方法 网上搜了好多没有找到解决方法 第一步登录服务器 使用 df h 命令查看磁盘使用率 接下来逐步排查占用内存的文件 输入 du h 显示没有异常大文件 输入 du h max depth 1 后查到异常
  • 论文笔记之ST-GCN

    通过将图卷积网络扩展到时空图模型 设计了一种 用于动作识别的骨架序列 的通用表示 AAAI 2018 录用 论文地址 https arxiv org abs 1801 07455 1 摘要 动态人体骨架模型带有进行动作识别的重要信息 传统的
  • git clone项目报错,The requested URL returned error: 500

    git clone项目报错 The requested URL returned error 500 如何解决 试试修改电脑中存储的账号密码 有项目权限 至少在网页上能通过链接访问当前Git内容 曾在当前电脑登录过git账号 满足以上两种情
  • flutter 保存列表状态和控制列表状态

    class DiscoverActivePageState extends State
  • vue中列表渲染相关知识(v-for)

    普通的列表使用ul包含多个li实现 这样往往不够灵活 在原生js中能够动态渲染列表具体实现如下 ul ul 我们再看看vue中如何实现列表渲染的 b b
  • 微信小程序获取当前位置 地图定位导航-详细代码

    小程序获取当前位置 回到当前位置 地图定位 导航 效果 因为小程序更新了获取地理位置API接口 需要先在app json中配置一下permission字段 不然会报微信小程序getLocation 需要在app json中声明permiss
  • 扩展欧几里得算法

    扩展欧几里得算法是啥 那就要先知道什么是欧几里得算法 欧几里得算法 扩展欧几里得算法是欧几里得算法的推广 利用欧几里得算法的思想和递归求得贝祖等式a x b y gcd a b 不定方程中的一组x和y的解 原理如下 设a gt b 当b 0
  • Coqui TTS 安装与测试

    前言 本篇记录一下 Coqui TTS 的安装 Coqui TTS 的主要作者是德国人 这个库似乎之前和 Mozilla 的 TTS https github com mozilla TTS 有千丝万缕的关系 但是现在后者的 TTS 已经停
  • 2021年江苏省职业院校技能大赛中职 “网络信息安全”赛项(超详细)

    2021年中职组 网络空间安全 赛项 一 江苏省竞赛任务书 二 任务书解析 三 不懂的可以私信博主 一 江苏省竞赛任务书 一 竞赛时间 8 00 11 00 共计3小时 二 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第 阶段
  • [附源码]计算机毕业设计Python课程在线测评系统(程序+源码+LW文档)

    该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 项目运行 环境配置 Pychram社区版 python3 7 7 Mysql5 7 HBuilderX list pip Navicat11 Django nodejs 项目技
  • 一文理解pytorch张量概念和tensor的三种创建方式!

    1 张量是什么 张量是一个多维数组 它是标量 向量 矩阵的高维拓展 1 1 Variable Variable是 torch autograd中的数据类型 主要用于封装 Tensor 进行自动求导 data 被包装的Tensor grad