1. Tensor 概念分类

PyTorch 中的张量(Tensor)类似 NumPy 中的 ndarrays,之所以称之为 Tensor 的另一个原因是它可以运行在 GPU 中,以加速运算。

1.1 从接口的角度分类

Tensor 的操作可分为以下两类:

  1. torch.function,如 torch.save 等;
  2. tensor.function,如 tensor.view 等;

为方便使用,Tensor 的大部分操作同时支持这两种接口,比如 torch.sum(a, b)a.sum(b) 功能是等价的。

1.2 从存储的角度分类

Tensor 的操作又可分为以下两类:

  1. 不会修改自身的数据,如 a.add(b),加法结果会返回一个新的 tensor
  2. 会修改自身的数据,如 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)相关推荐

  1. Pytorch中的 torch.Tensor() 和 torch.tensor() 的区别

    直接在搜索引擎里进行搜索,可以看到官方文档中两者对应的页面: 分别点击进去,第一个链接解释了什么是 torch.Tensor: torch.Tensor 是一个包含单一数据类型元素的多维矩阵(数组). ...

  2. torch.Tensor和torch.tensor有什么区别?

    介绍 在PyTorch 中,torch.Tensor是主要的tensor类,所有的tensor都是torch.Tensor的实例.torch.Tensor是torch.FloatTensor的别名. ...

  3. torch.Tensor和torch.tensor的区别

    torch.Tensor和torch.tensor的区别 2019-06-10 16:34:48 Vic_Hao 阅读数 4058更多 分类专栏: Pytorch 在Pytorch中,Tensor和t ...

  4. torch.Tensor(dim)与torch.Tensor((dim)), torch.Tensor(dim1,dim2)与torch.Tensor((dim1,dim2))的区别

    1 torch.Tensor(dim)与torch.Tensor((dim))的区别 从三张截图可以看出这两者其实是完全一样的,都表示的是这个张量的维度而不是这个张量的数据,其中第一处之所以不同是因为 ...

  5. torch.Tensor()与torch.tensor()

    今天在练习手写softmax系列函数的时候遇到了报错: 出错原因我的target不是index tensor.我是按照一个博客进行实践的,自己一个个代码打过来的怎么会有错呢?仔细一检查发现确实一个小地 ...

  6. PyTorch 1.0 中文文档:torch.Tensor

    译者:hijkzzz torch.Tensor 是一种包含单一数据类型元素的多维矩阵. Torch定义了八种CPU张量类型和八种GPU张量类型: Data type dtype CPU tensor ...

  7. 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 ...

  8. java反射学习笔记(常用的一些方法)

    User类(用于测试) package com.qingfeng.springbootstudy.entity;import java.io.Serializable;/*** (User)实体类** ...

  9. Rational Rose学习笔记02:创建用例图

    文章目录 一.用例图概念 二.用例图三元素 (一)参与者(Actor) (二)用例(Use Case) (三)关系(Relation) 1.关联关系(Association) 2.包含关系(Inclu ...

  10. 生物信息学笔记02 -- 研究的一般方法

    生物信息学概述 以基因组DNA序列信息为源头,识别基因组序列中代表蛋白质和RNA基因的编码区,阐明非编码区的信息特征,破译隐藏在DNA序列中的遗传语言规律 生物信息学研究的内容与方法 研究主要内容 ⚫ ...

最新文章

  1. secureCRT常用设置
  2. [置顶] 我整理的一些常用网址
  3. 测试驱动开发是否是一种强迫症?
  4. Docker/Docker 起步123
  5. 基于struts2的文件上传下载
  6. 高效使用Bitmaps(一) 大Bitmap的加载
  7. 启动Spark出现Operation category READ is not supported in state standby
  8. MySQL在远程访问时非常慢的解决skip-name-resolve
  9. 电脑常见故障_笔记本电脑常见故障键盘失效
  10. 【图像检索】基于matlab GUI综合颜色和形状特征图像检索【含Matlab源码 395期】
  11. Cisco交换机 ——链路聚合
  12. POE 网络变压器 Pulse 普思
  13. 看程序员如何使用Python快速给视频添加字幕
  14. 【零信任落地案例】吉大正元某大型集团公司零信任实践案例
  15. EXCEL 技能——等行分页
  16. 盯住Z世代增量,汽车之家818车晚透露哪些营销信号?
  17. SVN:将分支合并到主干
  18. Cesium基础知识-加载json数据
  19. C++对象模型——Member的各种调用方式(第四章)
  20. 解除文件锁定(此文件来自其他计算机,可能被阻止以保护该计算机)

热门文章

  1. oracle 提示:ORA-02292:integrity constraint(xxxxxxx) violated - child record found
  2. Java Calendar.add()方法的使用,参数含义。指定时间差。
  3. 2022-2028年中国聚氨酯结构胶行业发展动态分析及投资机会预测报告
  4. debian10 mariadb安装
  5. matplotlib交互模式
  6. 通俗易懂word2vec详解词嵌入-深度学习
  7. PyTorch官方中文文档:torch.optim 优化器参数
  8. 3D点云点云分割、目标检测、分类
  9. 2021年大数据常用语言Scala(二十三):函数式编程 扁平化映射 flatMap
  10. 2021年大数据常用语言Scala(八):基础语法学习 循环