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中定义结构体的方法
Mar 04 Python
python实现udp数据报传输的方法
Sep 26 Python
Python使用functools实现注解同步方法
Feb 06 Python
python获取文件路径、文件名、后缀名的实例
Apr 23 Python
python中subprocess批量执行linux命令
Apr 27 Python
Python操作mongodb数据库的方法详解
Dec 08 Python
Python中栈、队列与优先级队列的实现方法
Jun 30 Python
python自动发微信监控报警
Sep 06 Python
python相对企业语言优势在哪
Jun 12 Python
Python 如何操作 SQLite 数据库
Aug 17 Python
python实现每天自动签到领积分的示例代码
Aug 18 Python
如何利用python 读取配置文件
Jan 06 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
yii权限控制的方法(三种方法)
2015/12/28 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
php正则表达式使用方法整理集合
2020/01/31 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
jquery的each方法使用示例分享
2014/03/25 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
JavaScript知识点整理
2015/12/09 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
理解javascript async的用法
2017/08/22 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
python网络编程实例简析
2014/09/26 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
Python反转序列的方法实例分析
2018/03/21 Python
实例讲解python中的协程
2018/10/08 Python
Python中安装easy_install的方法
2018/11/18 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
Python通过len函数返回对象长度
2020/10/22 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL
redis cluster支持pipeline的实现思路
2021/06/23 Redis