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中的高级函数map/reduce使用实例
Apr 13 Python
Python 类的继承实例详解
Mar 25 Python
python设定并获取socket超时时间的方法
Jan 12 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
Python容器使用的5个技巧和2个误区总结
Sep 26 Python
python飞机大战pygame游戏背景设计详解
Dec 17 Python
在python中计算ssim的方法(与Matlab结果一致)
Dec 19 Python
postman和python mock测试过程图解
Feb 22 Python
Python BeautifulReport可视化报告代码实例
Apr 13 Python
基于python实现模拟数据结构模型
Jun 12 Python
Python基础学习之奇异的GUI对话框
May 27 Python
pytorch中的torch.nn.Conv2d()函数图文详解
Feb 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
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
详解Bootstrap glyphicons字体图标
2016/01/04 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
微信小程序实现发送验证码按钮效果
2018/12/20 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
pycharm 使用心得(三)Hello world!
2014/06/05 Python
Python实现在线程里运行scrapy的方法
2015/04/07 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
Python切片操作深入详解
2018/07/27 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
python实现交并比IOU教程
2020/04/16 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
中国梦我的梦演讲稿
2014/04/23 职场文书