Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PyTorch入门视频笔记-创建数值相同的张量

PyTorch入门视频笔记-创建数值相同的张量

作者头像
触摸壹缕阳光
发布于 2020-11-20 02:34:55
发布于 2020-11-20 02:34:55
1.6K00
代码可运行
举报
运行总次数:0
代码可运行

创建全 0 或全 1 的张量

创建元素值为全 0 或全 1 的张量是非常常见的初始化手段,通过 torch.zeros() 和 torch.ones() 函数即可创建任意形状,且元素值全为 0 或全为 1 的张量。

torch.zeros(*size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False) 和 torch.ones(*size, out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False) 两个函数的参数相同,这里简单介绍一下这些参数:

  • *size: 定义输出张量形状的整数序列,这个整数序列可以是列表和数组之类的集合也可以是整数的 torch.Size(执行 tensor.size() 获取 tensor 形状的结果为 torch.Size);
  • out = None(可选参数): 指定输出的张量。比如执行torch.zeros([2, 2], out = tensor_a),相当于执行tensor_a = torch.zeros([2, 2])
  • dtype = None(可选参数):指定返回张量的数据类型,默认(dtype = None)使用全局默认的数据类型,我们可以使用 torch.get_default_tensor_type() 获取全局默认的数据类型,同时可以通过 torch.set_default_tensor_type(torch.XXXTensor) 更改全局默认的数据类型为 torch.XXXTensor;
  • layout = torch.strided(可选参数): 定义张量在物理设备中的存储结构,torch.layout 可选的参数值有 torch.strided(默认)或 torch.sparse_coo,分别对应顺序存储和离散存储。「通常情况下,如果张量中的元素值 0 比较少为稠密张量,则指定 layout = torch.strided。如果张量中的元素值中 0 比较多为稀疏张量,则指定 layout = torch.sparse_coo」
  • device = None(可选参数): 指定张量所在的计算设备是 CPU 还是 GPU
  • requires_grad=False(可选参数): 指定此张量是否需要记录梯度;

torch.zeros() 和 torch.ones() 两个函数中只有 *size 参数为必须指定的参数,其余参数都是可选参数,因此接下来只关注指定 *size 参数的 torch.zeros(*size) 和 torch.ones(*size)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 In[1]: import torch
        # 创建全为0或1的0D张量(标量)
        scalar_zero = torch.zeros([])
        scalar_one = torch.ones([])
        print("张量的维度:{},张量的值:{}".
              format(scalar_zero.dim(), scalar_zero))
        print("张量的维度:{},张量的值:{}".
              format(scalar_one.dim(), scalar_one))
Out[1]: 张量的维度:0,张量的值:0.0
        张量的维度:0,张量的值:1.0
 In[2]: # 创建全为0或1的1D张量(向量)
        vec_zero = torch.zeros([3])
        vec_one = torch.ones([3])
        print("张量的维度:{},张量的值:{}".
              format(vec_zero.dim(), vec_zero))
        print("张量的维度:{},张量的值:{}".
              format(vec_one.dim(), vec_one))
Out[2]: 张量的维度:1,张量的值:tensor([0., 0., 0.])
        张量的维度:1,张量的值:tensor([1., 1., 1.])
 In[3]: # 创建全为0或1的2D张量(矩阵)
        mat_zero = torch.zeros([2, 2])
        mat_one = torch.ones([2, 2])
        print("张量的维度:{},张量的值:{}".
              format(mat_zero.dim(), mat_zero))
        print("张量的维度:{},张量的值:{}".
              format(mat_one.dim(), mat_one))
Out[3]: 张量的维度:2,张量的值:tensor([[0., 0.],
                [0., 0.]])
        张量的维度:2,张量的值:tensor([[1., 1.],
                [1., 1.]]) 

通过 torch.zeros(*size) 和 torch.ones(*size) 函数创建了元素值全为 0 和全为 1 的 0D 张量、1D 张量和 2D 张量,创建 nD 张量与之类似,这里不再赘述。*size 参数指定创建张量的形状,不同维度张量的形状可以参考下表。

比如:

  • 创建 0D 张量只需要指定 size = [];
  • 创建 1D 张量只需要指定 size = [dim0],其中 dim0 为第 0 个维度的元素个数;
  • 创建 2D 张量只需要指定 size = [dim0, dim1],其中 dim0 为第 0 个维度的元素个数,dim1 为第 1 个维度的元素个数;
  • 依次类推,创建 nD 张量只需要指定 size = [dim0, dim1, ..., dimn],其中 dim0 为第 0 个维度的元素个数,dim1 为第 1 个维度的元素个数,...,dimn 为第 n 个维度的元素个数;

通过 torch.zeros_like(input) 和 torch.ones_like(input) 函数可以方便地创建与 input 张量形状一致,且元素值全为 0 或者 1 的张量,需要注意此时的 input 必须是张量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 In[4]: import torch
        scalar_a = torch.tensor(1.)
        vec_a = torch.tensor([1., 2., 3.])
        mat_a = torch.tensor([[1., 2.], [3., 4.]])
        print("张量的形状:{}".format(scalar_a.size()))
        print("张量的形状:{}".format(vec_a.size()))
        print("张量的形状:{}".format(mat_a.size()))
Out[4]: 张量的形状:torch.Size([])
        张量的形状:torch.Size([3])
        张量的形状:torch.Size([2, 2])
 In[5]: # 创建和张量scalar_a相同形状的全为01的张量
        scalar_zero = torch.zeros_like(scalar_a)
        scalar_one = torch.ones_like(scalar_a)
        print("张量的维度:{},张量的值:{}".
              format(scalar_zero.dim(), scalar_zero))
        print("张量的维度:{},张量的值:{}".
              format(scalar_one.dim(), scalar_one))
Out[5]: 张量的维度:0,张量的值:0.0
        张量的维度:0,张量的值:1.0 
 In[6]: # 创建和张量scalar_a相同形状的全为01的张量
        vec_zero = torch.zeros_like(vec_a)
        vec_one = torch.ones_like(vec_a)
        print("张量的维度:{},张量的值:{}".
              format(vec_zero.dim(), vec_zero))
        print("张量的维度:{},张量的值:{}".
              format(vec_one.dim(), vec_one))
Out[6]: 张量的维度:1,张量的值:tensor([0., 0., 0.])
        张量的维度:1,张量的值:tensor([1., 1., 1.])
 In[7]: # 创建和张量scalar_a相同形状的全为01的张量
        mat_zero = torch.zeros_like(mat_a)
        mat_one = torch.ones_like(mat_a)
        print("张量的维度:{},张量的值:{}".
              format(mat_zero.dim(), mat_zero))
        print("张量的维度:{},张量的值:{}".
              format(mat_one.dim(), mat_one))
Out[7]: 张量的维度:2,张量的值:tensor([[0., 0.],
                [0., 0.]])
        张量的维度:2,张量的值:tensor([[1., 1.],
                [1., 1.]])

创建自定义数值张量

除了将张量的元素值初始化全为 0 或全为 1 的张量依然,有时候也需要全部初始化为某个自定义数值的张量。通过 torch.full(*size, fill_value, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) 可以创建全为自定义数值 fill_value 的张量,形状由 size 参数指定。

torch.full() 函数中除了 size 和 fill_value 参数外,其余都是可选参数且和 torch.zeros() 和 torch.ones() 两个函数的参数一致,同样不再赘述。

  • size: 定义输出张量形状的整数序列,这个整数序列可以是列表和数组之类的集合也可以是整数的 torch.Size(执行 tensor.size() 获取 tensor 形状的结果为 torch.Size);
  • fill_value: 填充到张量中的元素值,必须为标量值;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 In[8]: import torch
        # 创建0D且元素值为5的张量
        scalar_a = torch.full([], 5)
        # 创建1D且元素值为5的张量
        vec_a = torch.full([3], 5)
        # 创建2D且元素值为5的张量
        mat_a = torch.full([2, 2], 5)
        print("张量的维度:{},张量的值:{}".
              format(scalar_a.dim(), scalar_a))
        print("张量的维度:{},张量的值:{}".
              format(vec_a.dim(), vec_a))
        print("张量的维度:{},张量的值:{}".
              format(mat_a.dim(), mat_a))
Out[8]: 张量的维度:0,张量的值:5.0
        张量的维度:1,张量的值:tensor([5., 5., 5.])
        张量的维度:2,张量的值:tensor([[5., 5.],
                [5., 5.]]) 

「通过 torch.full_like(input, fill_value) 函数来创建全为自定义数值 fill_value 的张量,形状由参数 input 的形状指定,input 必须是张量。」

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PyTorch从入门到放弃之张量模块
张量(Tensor)是PyTorch最基本的操作对象。在几何定义中,张量是基于标量、向量和矩阵概念的眼神。通俗理解,可以讲标量视为0维张量,向量视为1维张量,矩阵视为2维张量。在深度学习领域,可以将张量视为一个数据的水桶,当水桶中只放一滴水时就是0维张量,多滴水排成一排就是1维张量,联排成面就是2维张量,以此类推,扩展到n维向量。
愷龍
2024/09/03
1600
PyTorch从入门到放弃之张量模块
PyTorch入门笔记-创建张量
Numpy Array 数组和 Python List 列表是 Python 程序中间非常重要的数据载体容器,很多数据都是通过 Python 语言将数据加载至 Array 数组或者 List 列表容器,再转换到 Tensor 类型。(为了方便描述,后面将 Numpy Array 数组称为数组,将 Python List 列表称为列表。)
触摸壹缕阳光
2020/12/02
3.6K0
PyTorch入门笔记-创建张量
PyTorch入门笔记-创建已知分布的张量
正态分布(Normal Distribution)和均匀分布(Uniform Distribution)是最常见的分布之一,创建采样自这 2 个分布的张量非常有用,「比如在卷积神经网络中,卷积核张量
触摸壹缕阳光
2020/11/20
3.6K0
PyTorch入门笔记-创建已知分布的张量
深度学习基础之三分钟轻松搞明白tensor到底是个啥
pytorch 和tensorflow 中最重要的概念就是tensor了,tensorflow 这个框架的名字中很直白,就是tensor的流动,所以学习深度学习的第一课就是得搞懂tensor到底是个什么东西了,今天就来学习下,OK,起飞
香菜聊游戏
2021/09/29
13.9K0
深度学习基础之三分钟轻松搞明白tensor到底是个啥
Python|张量创建操作[3]
说一下zeros与zeroslike和类似函数的区别。zeros是指定输出张量的形状size,然后返回张量,zeroslike则是根据一个张量,返回这个张量形状的张量。ones和ones_like类似
福贵
2020/05/27
6060
Python|张量创建操作[2]
张量的随机创建包含的方法有:torch.rand(),torch.randlike(),torch.randn(),torch.randnloike(),torch.randint(),torch.randint_like()和torch.randperm()。
福贵
2020/05/27
1.4K0
PyTorch2:张量的运算
可以看出,torch.Tensor()没有保留数值类型,其它三个都保留了。这是因为torch.Tensor()实际上是一个类,传入的数据需要“初始化”;其它三个都是函数,而通过torch.Tensor()生成的张量的数据类型是由一个环境变量决定的,这个环境变量可以通过torch.set_default_tensor_type(t)这个函数来设定。
小胡胡说
2020/08/05
2.6K0
pytorch的python API略读--tensor(二)
在编写程序的时候,我们往往需要一些数据,这些数据常有两种来源:手动输入的一些数据,或者从外部接收后转换得到的数据。手动输入的数据设计如下函数:tensor, zeros, zeros_like, ones, ones_like,arange,range,linspace,logspace,eye,empty,empty_like,empty_strided,full,full_like。
用户9875047
2022/07/04
2230
使用 C# 入门深度学习:Pytorch 基础
本文内容介绍 Pytorcn 的基础 API,主要是数组的创建方式和运算方式,由于相关内容跟 Numpy 比较相似,并且 Numpy 类型可以转 torch.Tensor,因此对 Numpy 感兴趣的读者可以参考笔者的其它文章:
郑子铭
2024/12/09
3010
使用 C# 入门深度学习:Pytorch 基础
PyTorch 2.2 中文官方教程(二)
介绍 || 张量 || 自动微分 || 构建模型 || TensorBoard 支持 || 训练模型 || 模型理解
ApacheCN_飞龙
2024/02/05
6580
PyTorch 2.2 中文官方教程(二)
PyTorch中Tensor的操作手册
默认下,Tensor为‘torch.FloatTensor’类型,若要改为double类型的,则需要执行
孔西皮
2023/10/18
6240
PyTorch中Tensor的操作手册
Python|张量创建操作[4]
返回一个一维的张量,使用对数,从start到end。比如在start处,值是10,base是2,那么start对应的值输出为2的10次方。参数
福贵
2020/05/27
7840
pytorch基础知识-tensor张量的创建 下
若使用rand_like的函数,torch.rand_like(a)表示接收的参数不再是shape,而是tensor类型。将上面的a的shape读出来后,再送给rand函数。
用户6719124
2019/11/17
9850
使用 C# 入门深度学习:Pytorch 基础
本文内容介绍 Pytorcn 的基础 API,主要是数组的创建方式和运算方式,由于相关内容跟 Numpy 比较相似,并且 Numpy 类型可以转 torch.Tensor,因此对 Numpy 感兴趣的读者可以参考笔者的其它文章:
痴者工良
2025/03/26
940
使用 C# 入门深度学习:Pytorch 基础
pytorch张量的创建
从torch.from_numpy创建的tensor于原ndarray共享内存,当修改其中一个数据,另一个也将会被改动。
@小森
2024/03/15
1390
pytorch张量的创建
Pytorch 的tensor (张量)的介绍
Tensor是Pytorch中最基本的一种数据抽象,它类似于C或numpy中的数组,可以有多个维度。张量也可以在GPU上使用以提高性能。
用户6021899
2022/04/15
2.3K0
【Pytorch】笔记一:数据载体张量与线性回归
疫情在家的这段时间,系统的学习一遍 Pytorch 基础知识,因为我发现虽然直接 Pytorch 实战上手比较快,但是关于一些内部的原理知识其实并不是太懂,这样学习起来感觉很不踏实, 对 Pytorch 的使用依然是模模糊糊, 跟着人家的代码用 Pytorch 玩神经网络还行,也能读懂,但自己亲手做的时候,直接无从下手,啥也想不起来, 我觉得我这种情况就不是对于某个程序练得不熟了,而是对 Pytorch 本身在自己的脑海根本没有形成一个概念框架,不知道它内部运行原理和逻辑,所以自己写的时候没法形成一个代码逻辑,就无从下手。这种情况即使背过人家这个程序,那也只是某个程序而已,不能说会 Pytorch, 并且这种背程序的思想本身就很可怕, 所以我还是习惯学习知识先有框架(至少先知道有啥东西)然后再通过实战(各个东西具体咋用)来填充这个框架。而「这个系列的目的就是在脑海中先建一个 Pytorch 的基本框架出来, 学习知识,知其然,知其所以然才更有意思」。
阿泽 Crz
2020/08/28
2.9K0
【Pytorch】笔记一:数据载体张量与线性回归
PyTorch简明笔记[1]-Tensor的初始化和基本操作
安装PyTorch应该不用我多说,他们的官网很人性化地给出了各种环境应该怎么安装,网址:https://pytorch.org/get-started/locally/
beyondGuo
2019/01/09
8.6K0
深度学习基础:1.张量的基本操作
注:张量默认创建int64(长整型)类型,整数型的数组默认创建int32(整型)类型。
zstar
2022/06/14
5K0
深度学习基础:1.张量的基本操作
PyTorch: 张量的变换、数学运算及线性回归
功能:2 维张量转置,对矩阵而言,等价于torch.transpose(input, 0, 1)
timerring
2022/11/12
1.1K0
PyTorch: 张量的变换、数学运算及线性回归
相关推荐
PyTorch从入门到放弃之张量模块
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验