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 相关文章推荐
python33 urllib2使用方法细节讲解
Dec 03 Python
Python遍历目录的4种方法实例介绍
Apr 13 Python
Python使用turtule画五角星的方法
Jul 09 Python
Python扩展内置类型详解
Mar 26 Python
在windows下Python打印彩色字体的方法
May 15 Python
Python logging模块用法示例
Aug 28 Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 Python
python3的url编码和解码,自定义gbk、utf-8的例子
Aug 22 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
Apr 14 Python
Python自动登录QQ的实现示例
Aug 28 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
Sep 11 Python
python 通过 pybind11 使用Eigen加速代码的步骤
Dec 07 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添加Xdebug扩展的方法
2014/02/12 PHP
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
Python中的urllib模块使用详解
2015/07/07 Python
python简单获取数组元素个数的方法
2015/07/13 Python
使用C++扩展Python的功能详解
2018/01/12 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python----数据预处理代码实例
2019/03/20 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
Python正则表达式如何匹配中文
2020/05/27 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
什么是servlet
2012/05/08 面试题
公积金转移接收函
2014/01/11 职场文书
体育专业求职信
2014/07/16 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
高中社区服务活动报告
2015/02/05 职场文书
防汛通知
2015/04/25 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
小学总务工作总结
2015/08/13 职场文书
Python实现简繁体转换
2021/06/07 Python