Pytorch 多维数组运算过程的索引处理方式


Posted in Python onDecember 27, 2019

背景:对 python 不熟悉,能看懂代码,也能实现一些简单的功能,但是对 python 的核心思想和编程技巧不熟,所以使 Pytorch 写 loss 的时候遇到很多麻烦,尤其是在 batch_size > 1 的时候,做矩阵乘法之类的运算会觉得特别不顺手。

所幸,在边查边写的过程中,理解了 python 中多维运算的实现规则。

1、python 的基本索引规则

从 0 开始

对于给定的范围,如 b = a[m:n], 那么 b 为由 (n-m)个数据组成的新数组,由 a[m],a[m+1],...,a[n-1] 构成。(若 n<m, 得到空)

2、单个 tensor 运算,使用 dim 参数

torch 中对 tensor 的操作方法,若不加 dim 参数表示对整体的 tensr 进行操作,若增加 dim 参则表示按维操作。

例:

a = [[1,2],[3,4],[5,6]] (torch.tensor)

torch.mean(a) => 3.5


torch.mean(a,dim=0) => [1.5, 3.5, 5.5]


torch.mean(a,dim=1) => [[3],[4]]


torch.mean(a,dim=0) => [3,4]


torch.mean(a,dim=1) => [1.5, 3.5, 5.5] 

注: torch.mean() 是一个降维的操作,所以不会出现在取均值后保持跟原 Tensor 同维的情况。 dim 参数存在时降一维,不存在时得到的是整个 Tensor 的均值。

3、两个 tensor 运算,构造对应形状

以乘法为例:

3.1 矩阵乘向量

a = [[1,2],[3,4],[5,6]]

b = [1,1]

计算乘法 c = a@b

若 a 拓展为 (N,3,2) N 为 batch_size, 计算 c2 = a@b

若 a,b 同时拓展, 变成(N, 2),那么需要做一个变换 b = b.view(N,2,1),计算 c3 = a@b

3.2 矩阵乘矩阵

a = [[1,2],[3,4],[5,6]]

b =[ [1,1],[1,1]]

计算乘法 c = a@b

若 a 拓展为 (N,3,2) N 为 batch_size, 计算 c2 = a@b

若 a,b 同时拓展, 变成(N, 2, 2),计算 c3 = a@b

以上这篇Pytorch 多维数组运算过程的索引处理方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的Bottle框架的一些使用技巧介绍
Apr 08 Python
Python 数据结构之旋转链表
Feb 25 Python
Python虚拟环境virtualenv的安装与使用详解
May 28 Python
Python中最大最小赋值小技巧(分享)
Dec 23 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
实例讲解Python中浮点型的基本内容
Feb 11 Python
jupyter notebook 中输出pyecharts图实例
Apr 23 Python
解决python xx.py文件点击完之后一闪而过的问题
Jun 24 Python
python实现身份证实名认证的方法实例
Nov 08 Python
使用python实现画AR模型时序图
Nov 20 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 Python
Pytorch 之修改Tensor部分值方式
Dec 27 #Python
pytorch 实现tensor与numpy数组转换
Dec 27 #Python
Numpy与Pytorch 矩阵操作方式
Dec 27 #Python
基于python及pytorch中乘法的使用详解
Dec 27 #Python
pytorch:torch.mm()和torch.matmul()的使用
Dec 27 #Python
pytorch点乘与叉乘示例讲解
Dec 27 #Python
python已协程方式处理任务实现过程
Dec 27 #Python
You might like
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
vuejs如何配置less
2017/04/25 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
分析python请求数据
2018/08/19 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
python是否适合网页编程详解
2019/10/04 Python
Python while循环使用else语句代码实例
2020/02/07 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
Python requests模块session代码实例
2020/04/14 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
物业经理求职自我评价
2013/09/22 职场文书
寒假家长评语大全
2014/04/16 职场文书
党员承诺书怎么写
2014/05/20 职场文书
学生安全责任书模板
2014/07/25 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
公司感谢信范文
2015/01/22 职场文书
明星邀请函
2015/02/02 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python
Vue图片裁剪组件实例代码
2021/07/02 Vue.js