目录

1. pytorch中的数据类型

1.1 标量——维度为0——用于loss

1.2 向量——维度为1——用于bias、线性输入数据

1.3 二维tensor

1.4 三维tensor

1.5 四维tensor

1.6 其他

2. 创建tensor

3. tensor中的索引与切片

4. tensor维度变换

4.1 view 与 reshape

4.2 Squeeze 与 unsqueeze

4.3 Expand 与 repeat 维度拓展

4.3 转置 .t  只能适用于 2D矩阵

4.4 Transpose 交换维度

4.5 permute 交换维度,指定维度顺序

4.6 Brodcasting 自动扩展

5. tensor的拼接和拆分

5.1 cat

5.2 stack

5.3 split

5.4 chunk

6. tensor的基本运算

6.1 加减乘除

6.2 矩阵相乘

6.3 三维及以上矩阵相乘

6.4 pow

6.5 Exp 及log

6.6 近似函数

6.7 数值剪切clamp

7. tensor的属性统计

7.1 范数 norm

7.2  统计属性 mean sum min max prod argmax argmin

7.3 keepdim

7.4 Top-k

7.5 比较操作 gt eq equal

7.6 高阶操作 Where Gather


引言:pytorch是面向计算的GPU加速库,所以里面的所有操作对象都是tensor(张量)。本文主要介绍pytorch中的数据类型,tensor的创建,索引与切片,维度变换、拼接与拆分、基本数学运算、属性统计等函数功能及示例。(参考:深度学习入门_哔哩哔哩_bilibili)

1. pytorch中的数据类型

 数据类型检查:

1.1 标量——维度为0——用于loss

1.2 向量——维度为1——用于bias、线性输入数据

1.3 二维tensor

1.4 三维tensor

比如: 10个句子,每句20个单词,每个单词100个feature表示(one hot)

1.5 四维tensor

比如: b张照片c个通道,一个图片大小hxw大小

1.6 其他 

numel 属性 : num of element

4704 = 2x3x28x28

2. 创建tensor

3. tensor中的索引与切片

上图中[ ]中的逗号,表示的是维度与维度之间的并列。

tensor中切片,冒号:

a = tensor.randn(4, 3, 28,28)

  • 仅一个冒号:表示取当前维度所有值 , 比如 a[:, :, :, :]
  • 一个冒号+数字: 如n: 表示从取当前维度n到最后; 如 :n 表示从0取到n-1 , 比如 a[:10, 2:, :, :] 只取前10张图片的2通道和3通道
  • 一个冒号+2个数字:如 n:m 表示从n取到m-1, 比如 a[10:20, :, :, :] 取第10张到第19张图片
  • 两个冒号 0:10:2 从0到9,隔行采样,采样间隔是2,此处是 0,2,4,6,8。或者 ::2, 表示当前维所有值,从0开始间隔2采样

三个点: … 表示剩余的所有维度

取出指定条件下的值(打平成了一维)

4. tensor维度变换

4.1 view 与 reshape

view操作的基本原则: numel不变

特别注意: 数据的存储和维度顺序非常重要,需要时刻记住!

view与reshape区别: reshape是view的升级版。

因为历史上view方法已经约定了共享底层数据内存,返回的Tensor底层数据不会使用新的内存,如果在view中调用了contiguous方法,则可能在返回Tensor底层数据中使用了新的内存,这样打破了之前的约定,破坏了对之前的代码兼容性。为了解决用户使用便捷性问题,PyTorch在0.4版本以后提供了reshape方法,实现了类似于 tensor.contigous().view(*args)的功能,如果不关心底层数据是否使用了新的内存,则使用reshape方法更方便。

4.2 Squeeze 与 unsqueeze

减小维度 与 增加维度

注意 -1是指倒数第一位

4.3 Expand 与 repeat 维度拓展

expand:将维度拓展到指定值

repeat:  将维度拓展指定倍数

使用expand时,拓展前后维度应该一致,且可拓展,比如从1->N可以,从 3-》N则不行,因为怎么复制数据系统不知道。 从1-》N 系统知道直接复制即可。

expand指定拓展后的维度,在原有的内存上进行拓展

repeat的参数,表示每个维度重复的倍数!会申请新的内存,进行拓展,比较占内存

4.3 转置 .t  只能适用于 2D矩阵

4.4 Transpose 交换维度

交换维度时,一定要注意:经过view后维度会发生变化,若想确保各维度有意义,一定要跟踪好维度的变换关系,确保前后能对应的上。

4.5 permute 交换维度,指定维度顺序

维度交换,指定维度的顺序,(内部交换多次transpose)

4.6 Brodcasting 自动扩展

自动地根据数据,对tensor进行 unsqueeze/expand操作,来插入维度拓展数据,以实现同维度数据之间的计算。

扩展内部规则:

几个例子:

5. tensor的拼接和拆分

5.1 cat

在指定维度上进行合并(前提: 维度数量一样,只有一个维度的值不同)

5.2 stack

会增加一个新的维度,新的维度的值等于第一个参数的个数。(要求操作的两个tensor维度数目 、各维度值应完全一致)

5.3  split

按照长度,拆分指定维度。当传入一个list时,按照list中指定的值,进行维度值的拆分,当传入一个常数k时,在指定维度上平均拆分(新的拆分的维度值 = 维度值/k)。

5.4 chunk

按照数量,拆分指定维度。

6. tensor的基本运算

6.1 加减乘除

6.2 矩阵相乘

*相同位置的元素相乘 (element-wise)

.matmul 矩阵相乘 = @

6.3 三维及以上矩阵相乘

取后两维进行矩阵相乘

6.4 pow

各个元素单独平方。

aa.sqrt 平方根的倒数

6.5 Exp 及log

6.6 近似函数

向上取整 向下取整 四舍五入 取整数部分 取小数部分

6.7 数值剪切clamp

取指定范围的值,一个参数时表示指定最小值是多少,两个参数时表示指定一个数值范围。

7. tensor的属性统计

7.1 范数 norm

取哪个维度的范数那个维度就会消掉。

7.2  统计属性 mean sum min max prod argmax argmin

prod 所有元素的乘积

argmax 当不指定参数时,将多维元素打平成一维的,返回所有值中最大的值在一维数组中的索引值;当指定一个参数时,如a.argmax(dim=1) 在第一维上求最大值。

max 或者min返回两组值,一组是最值,一组是最值对应的位置。

argmax或者argmin返回一组值,即最值对应的位置

7.3 keepdim

7.4 Top-k

相比max、min多返回几组值。

kthvalue: 返回第k小的值,及其所在位置。

7.5 比较操作 gt eq equal

7.6 高阶操作 Where Gather

where 代替了for for if循环操作(CPU操作),可以将运算使用GPU操作,以加速运算。

Gather

是一个查表映射的过程,使用指定的索引,映射取出指定的值放入新的tensor中去。目的:避免使用for for if, 以使用GPU进行加速。

深度学习_pytorch_深度学习中的tensor介绍及常用操作相关推荐

  1. Python中字典的介绍以及常用操作

    1.字典的介绍 字典是另一种可变类型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示 ...

  2. C++ STL::list常用操作及底层实现(中1)——实现list常用操作之插入(insert、push_front、push_back、splice)

    STL::list插入介绍及自实现插入功能 1插入数据之insert(): 1.1 `iterator insert(iterator position,const value_type & ...

  3. net中c#教程 network的常用操作,包括上传、下载

    现在互联网这么发达,我们做的项目也是需要从网络上获取信息(即下载数据),或者将本地的数据上传到服务器上(即上传数据).所以,对网络的操作也很重要和基础,今天分享的教程,就是关于网络编程(network ...

  4. 【学习笔记】mybatis中的缓存介绍和使用

    文章目录 介绍 一级缓存和二级缓存 让一级缓存失效的方法 二级缓存的使用 清空或者跳过二级缓存的3种方式 介绍 什么是缓存? 缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先 ...

  5. (pytorch-深度学习系列)pytorch中backwards()函数对梯度的操作

    backwards()函数对梯度的操作 对于一个新的tensor来说,梯度是空的:但当对这个tensor进行运算操作后,他就会拥有一个梯度: x = torch.ones(2, 2, requires ...

  6. Python中集合的介绍以及常见操作

    1.集合的介绍 集合是无序的,集合中的元素是唯一的,集合一般用于元组或者列表中的元素去重. 定义一个空集合 格式如下: name=set() 注意以下写法为一个空字典,为空默认是字典,如果有数据在根据 ...

  7. Python中元组的介绍以及常见操作

    1.元组的介绍 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 元组的格式: tup=( ...

  8. Python中列表的介绍以及常见操作

    1.列表的介绍 列表的格式:变量A的类型为列表 namesList = ['xiaoWang','xiaoZhang','xiaoHua'] 列表中的元素可以是不同类型的 例如:testlist=[1 ...

  9. Python中字符串的介绍以及常见操作

    1.字符串的介绍 python中的字符串格式: 如下定义的变量a,存储的是数字类型的值 a = 100 如下定义的变量b,存储的是字符串类型的值 b = "hello python" ...

  10. OpenCV中对数组(矩阵)的常用操作

          add 矩阵加法,A+B的更高级形式,支持mask scaleAdd 矩阵加法,一个带有缩放因子dst(I) = scale * src1(I) + src2(I) addWeighted ...

最新文章

  1. 【面试必问】支撑百万并发的IO多路复用技术你了解吗?
  2. 搬运机器人举杯贺所需的条件_机器人调试工程师的工作是怎样的
  3. 2017qcon大会的一点想法(安全人才如何不被淘汰?)
  4. Docker认识基础
  5. 文本显示变量_几千个IO状态显示.十几分钟搞定实例
  6. 用MDT 2012为企业部署windows 7(四)--创建Deploymentshare共享以及介绍一些选项的具体作用...
  7. Java实现Modbus/TCP客户端与modsim通信
  8. MacOS 开发 — Dock 显示网速/消息
  9. 一元云购系统接入短信功能问题汇总
  10. Kettle spoon
  11. 黑鲨helo支持html吗,黑鲨2和黑鲨helo区别买哪个好
  12. Android视频添加时间水印
  13. Simplygon软件初探之软件安装
  14. PyQt(Python+Qt)入门:Designer组件属性编辑界面中QWidget类相关属性详解
  15. pyparsing简介
  16. linux离线安装snap应用,Ubuntu使用snap安装常用软件
  17. 编写程序,找出用户输入的一串数的最大数,程序需要提示用户一个一个地输入数,当用户输入0或负数时,程序显示出已输入的最大负整数:
  18. C++(Qt) 和 Word、Excel、PDF 交互总结
  19. linux硬盘寿命查看,ssd-lifetime
  20. svn 服务端、客户端使用总结

热门文章

  1. mysql安装框架_MySQL安装详解图文版(V5.5 For Windows)
  2. Bootstraphead里的内容
  3. [RN] React Native 使用 Redux 比较详细和深刻的教程
  4. mvc 调试 f12 浏览器闪退
  5. Linux特殊符号浅谈
  6. javascript无提示关闭窗口,兼容IE,Firefox
  7. viewport属性
  8. SpringBoot中静态资源配置
  9. 数据结构与算法之图的进阶
  10. QA: c# IHttpFactory配置代理或者HttpClient配置代理