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中的pprint折腾记
Jan 21 Python
Python开发常用的一些开源Package分享
Feb 14 Python
详解Python中break语句的用法
May 14 Python
Python下载懒人图库JavaScript特效
May 28 Python
Python中XlsxWriter模块简介与用法分析
Apr 24 Python
Python语言检测模块langid和langdetect的使用实例
Feb 19 Python
python线程信号量semaphore使用解析
Nov 30 Python
python3 pathlib库Path类方法总结
Dec 26 Python
python实现密码强度校验
Mar 18 Python
python pymysql库的常用操作
Oct 16 Python
Python 调用C++封装的进一步探索交流
Mar 04 Python
pyqt5蒙版遮罩mask,setmask的使用
Jun 11 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&amp;mysql 日期操作小记
2012/02/27 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
用jscript启动sqlserver
2007/06/21 Javascript
javascript 流畅动画实现原理
2009/09/08 Javascript
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
JQuery节点元素属性操作方法
2015/06/11 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
JS实现li标签的删除
2019/04/12 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
es5 类与es6中class的区别小结
2020/11/09 Javascript
Python实现的knn算法示例
2018/06/14 Python
python3爬取数据至mysql的方法
2018/06/26 Python
mac下如何将python2.7改为python3
2018/07/13 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
Reebok俄罗斯官方网上商店:购买锐步运动服装和鞋子
2016/09/26 全球购物
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
如何在C# winform中异步调用web services
2015/09/21 面试题
坚定理想信念心得体会
2014/03/11 职场文书
活动总结新闻稿
2014/08/30 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
工作失职造成投诉的检讨书范文
2014/10/05 职场文书