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 爬虫学习笔记之多线程爬虫
Sep 21 Python
python方向键控制上下左右代码
Jan 20 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
Jan 29 Python
Python数据类型之Dict字典实例详解
May 07 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
python 实现GUI(图形用户界面)编程详解
Jul 17 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 Python
pytorch SENet实现案例
Jun 24 Python
浅析Python中字符串的intern机制
Oct 03 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
python使用openpyxl库读写Excel表格的方法(增删改查操作)
May 02 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设计模式 Proxy (代理模式)
2011/06/26 PHP
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
multiSteps 基于Jquery的多步骤滑动切换插件
2011/07/22 Javascript
JavaScript原型链示例分享
2014/01/26 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
jQuery插件pagination实现分页特效
2015/04/12 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
react路由配置方式详解
2017/08/07 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
Pytorch 实现权重初始化
2019/12/31 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
公司行政经理岗位职责
2013/12/24 职场文书
化学实验员岗位职责
2013/12/28 职场文书
项目合作协议书
2014/09/23 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书
Django显示可视化图表的实践
2021/05/10 Python
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS