PyTorch 笔记(02)— 常用创建 Tensor 方法(torch.Tensor、ones、zeros、eye、arange、linspace、rand、randn、new)
1. Tensor 概念分类
PyTorch
中的张量(Tensor
)类似 NumPy
中的 ndarrays
,之所以称之为 Tensor
的另一个原因是它可以运行在 GPU
中,以加速运算。
1.1 从接口的角度分类
对 Tensor
的操作可分为以下两类:
torch.function
,如torch.save
等;tensor.function
,如tensor.view
等;
为方便使用,对 Tensor
的大部分操作同时支持这两种接口,比如 torch.sum(a, b)
和 a.sum(b)
功能是等价的。
1.2 从存储的角度分类
对 Tensor
的操作又可分为以下两类:
- 不会修改自身的数据,如
a.add(b)
,加法结果会返回一个新的tensor
; - 会修改自身的数据,如
a.add_(b)
,加法结果仍储存在a
中,但是a
已经被修改了;
注意:函数名以 _
结尾的都是 inplace
方式,即会修改调用者自己的数据。
2. Tensor 创建方法
PyTorch
中的 Tensor
也有自己的数据类型定义方式,常用的如下。
2.1 torch.Tensor
需要注意的是,使用 torch.Tensor(*sizes)
创建 Tensor
时,系统不会立即分配空间,只会计算当前内容空间是否够用,使用到 Tensor
时才会分配,而其它操作都会在创建完成后立即进行空间分配。
用于创建一个 Tensor
,即可接受 list
作为参数,也可以接受指定形状作为参数,还能传入其它的 tensor
。
Tensor
接受形状参数,创建一个 2*3 的Tensor
In [1]: import torch as t In [2]: a = t.Tensor(2,3) In [3]: a
Out[3]:
tensor([[2.6380e+23, 1.3070e-14, 4.4721e+21],[6.8233e+22, 3.0217e+32, 4.6161e+24]])In [4]: a.type()
Out[4]: 'torch.FloatTensor'
- 将列表转换为
Tensor
In [5]: b = t.Tensor([[1,2], [3,4]]) In [6]: b
Out[6]:
tensor([[1., 2.],[3., 4.]])In [7]: b.type()
Out[7]: 'torch.FloatTensor'
Tensor
转换为list
In [5]: b = t.Tensor([[1,2], [3,4]]) In [6]: b
Out[6]:
tensor([[1., 2.],[3., 4.]])In [7]: b.type()
Out[7]: 'torch.FloatTensor'In [8]: b.tolist()
Out[8]: [[1.0, 2.0], [3.0, 4.0]]In [9]: type(b.tolist())
Out[9]: list
- 创建一个元素为 2 和 3 的
Tensor
In [10]: c = t.Tensor((2,3)) In [11]: c
Out[11]: tensor([2., 3.])In [12]: c.type()
Out[12]: 'torch.FloatTensor'
2.2 torch.ones
用于生成数据类型为浮点型且维度指定的 Tensor
,不过这个浮点型的 Tensor
中的元素值全部为 1,dtype
参数可以指定其数据类型。
In [1]: import torch as t In [2]: t.ones(2,3)
Out[2]:
tensor([[1., 1., 1.],[1., 1., 1.]])In [3]: t.ones(2,3, dtype=t.int)
Out[3]:
tensor([[1, 1, 1],[1, 1, 1]], dtype=torch.int32)In [4]:
2.3 torch.zeros
用于生成数据类型为浮点型且维度指定的 Tensor
,不过这个浮点型的 Tensor
中的元素值全部为 0,dtype
参数可以指定其数据类型。
import torcha = torch.zeros(2, 3, dtype=torch.int8)
print a
输出结果:
tensor([[0, 0, 0],[0, 0, 0]], dtype=torch.int8)
2.4 torch.eye
用于生成数据类型为浮点型且维度指定的 Tensor
,不过这个浮点型的 Tensor
中对角线元素均为 1 ,dtype
参数可以指定其数据类型。
In [5]: t.eye(3,3)
Out[5]:
tensor([[1., 0., 0.],[0., 1., 0.],[0., 0., 1.]])In [6]:
2.5 torch.arange
用于生成数据类型为浮点型且自定义起始范围和结束范围的 Tensor
,所以传递给 torch.linspace
的参数有三个,分别是范围的起始值、范围的结束值和步长,其中,步长用于指定从起始值到结束值的每步的数据间隔。
import torcha = torch.arange(1, 10, 2)
输出结果:
tensor([1, 3, 5, 7, 9])
2.6 torch.linspace
用于生成数据类型为长整型且自定义起始范围和结束范围的 Tensor
,所以传递给 torch.arange
的参数有三个,分别是范围的起始值、范围的结束值和均匀分成的份数,其中,份数用于将起始值和结束值划分为几份。
In [7]: t.linspace(1, 10, 5)
Out[7]: tensor([ 1.0000, 3.2500, 5.5000, 7.7500, 10.0000])In [8]: t.linspace(1, 11, 5)
Out[8]: tensor([ 1.0000, 3.5000, 6.0000, 8.5000, 11.0000])In [9]:
2.7 torch.rand
用于生成数据类型为浮点型且维度指定的随机 Tensor
,和在 NumPy
中使用 numpy.rand
生成随机数的方法类似,随机生成的浮点数据在 0~1 区间均匀分布。
import torcha = torch.rand(2, 3)
输出结果:
tensor([[0.6882, 0.4118, 0.2646],[0.0583, 0.2187, 0.8093]])
2.8 torch.randn
用于生成数据类型为浮点型且维度指定的随机 Tensor
,和在 NumPy
中使用 numpy.randn
生成随机数的方法类似,随机生成的浮点数的取值满足均值为 0、方差为 1 的正态分布。
import torcha = torch.randn(2, 3)
输出结果:
tensor([[ 0.2214, -0.0139, -0.0720],[ 0.2548, -1.3364, 0.3924]])
2.9 torch.new
Tensor
还有一个 new
方法,用法与 t.Tensor
一样, 会调用该 Tensor
对应类型的构造函数,生成与当前 tensor
类型一致的 tensor
。
In [126]: a = t.Tensor(2,3) In [127]: a
Out[127]:
tensor([[ 1.8829e+26, 4.5702e-41, -2.4199e-18],[-1.1804e+24, 2.3408e+26, 4.5702e-41]])In [128]: a.new(2,3)
Out[128]:
tensor([[-7.1914e+16, 4.5702e-41, 3.3177e+05],[ 0.0000e+00, 2.3408e+26, 4.5702e-41]])In [129]: a.new(3,4)
Out[129]:
tensor([[-7.1914e+16, 4.5702e-41, 3.4704e+05, 0.0000e+00],[-7.1913e+16, 4.5702e-41, -7.1913e+16, 4.5702e-41],[-7.6770e+16, 4.5702e-41, -7.6770e+16, 4.5702e-41]])In [130]: a.new(3,4).type()
Out[130]: 'torch.FloatTensor'In [131]:
PyTorch 笔记(02)— 常用创建 Tensor 方法(torch.Tensor、ones、zeros、eye、arange、linspace、rand、randn、new)相关推荐
- Pytorch中的 torch.Tensor() 和 torch.tensor() 的区别
直接在搜索引擎里进行搜索,可以看到官方文档中两者对应的页面: 分别点击进去,第一个链接解释了什么是 torch.Tensor: torch.Tensor 是一个包含单一数据类型元素的多维矩阵(数组). ...
- torch.Tensor和torch.tensor有什么区别?
介绍 在PyTorch 中,torch.Tensor是主要的tensor类,所有的tensor都是torch.Tensor的实例.torch.Tensor是torch.FloatTensor的别名. ...
- torch.Tensor和torch.tensor的区别
torch.Tensor和torch.tensor的区别 2019-06-10 16:34:48 Vic_Hao 阅读数 4058更多 分类专栏: Pytorch 在Pytorch中,Tensor和t ...
- torch.Tensor(dim)与torch.Tensor((dim)), torch.Tensor(dim1,dim2)与torch.Tensor((dim1,dim2))的区别
1 torch.Tensor(dim)与torch.Tensor((dim))的区别 从三张截图可以看出这两者其实是完全一样的,都表示的是这个张量的维度而不是这个张量的数据,其中第一处之所以不同是因为 ...
- torch.Tensor()与torch.tensor()
今天在练习手写softmax系列函数的时候遇到了报错: 出错原因我的target不是index tensor.我是按照一个博客进行实践的,自己一个个代码打过来的怎么会有错呢?仔细一检查发现确实一个小地 ...
- PyTorch 1.0 中文文档:torch.Tensor
译者:hijkzzz torch.Tensor 是一种包含单一数据类型元素的多维矩阵. Torch定义了八种CPU张量类型和八种GPU张量类型: Data type dtype CPU tensor ...
- torch.Tensor和torch.tensor
IN:torch.tensor([2.,3.2]) Out: tensor([2.0000, 3.2000])IN:torch.Tensor(2,3) Out:tensor([[-7.5731e-29 ...
- java反射学习笔记(常用的一些方法)
User类(用于测试) package com.qingfeng.springbootstudy.entity;import java.io.Serializable;/*** (User)实体类** ...
- Rational Rose学习笔记02:创建用例图
文章目录 一.用例图概念 二.用例图三元素 (一)参与者(Actor) (二)用例(Use Case) (三)关系(Relation) 1.关联关系(Association) 2.包含关系(Inclu ...
- 生物信息学笔记02 -- 研究的一般方法
生物信息学概述 以基因组DNA序列信息为源头,识别基因组序列中代表蛋白质和RNA基因的编码区,阐明非编码区的信息特征,破译隐藏在DNA序列中的遗传语言规律 生物信息学研究的内容与方法 研究主要内容 ⚫ ...
最新文章
- secureCRT常用设置
- [置顶] 我整理的一些常用网址
- 测试驱动开发是否是一种强迫症?
- Docker/Docker 起步123
- 基于struts2的文件上传下载
- 高效使用Bitmaps(一) 大Bitmap的加载
- 启动Spark出现Operation category READ is not supported in state standby
- MySQL在远程访问时非常慢的解决skip-name-resolve
- 电脑常见故障_笔记本电脑常见故障键盘失效
- 【图像检索】基于matlab GUI综合颜色和形状特征图像检索【含Matlab源码 395期】
- Cisco交换机 ——链路聚合
- POE 网络变压器 Pulse 普思
- 看程序员如何使用Python快速给视频添加字幕
- 【零信任落地案例】吉大正元某大型集团公司零信任实践案例
- EXCEL 技能——等行分页
- 盯住Z世代增量,汽车之家818车晚透露哪些营销信号?
- SVN:将分支合并到主干
- Cesium基础知识-加载json数据
- C++对象模型——Member的各种调用方式(第四章)
- 解除文件锁定(此文件来自其他计算机,可能被阻止以保护该计算机)
热门文章
- oracle 提示:ORA-02292:integrity constraint(xxxxxxx) violated - child record found
- Java Calendar.add()方法的使用,参数含义。指定时间差。
- 2022-2028年中国聚氨酯结构胶行业发展动态分析及投资机会预测报告
- debian10 mariadb安装
- matplotlib交互模式
- 通俗易懂word2vec详解词嵌入-深度学习
- PyTorch官方中文文档:torch.optim 优化器参数
- 3D点云点云分割、目标检测、分类
- 2021年大数据常用语言Scala(二十三):函数式编程 扁平化映射 flatMap
- 2021年大数据常用语言Scala(八):基础语法学习 循环