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中使用装饰器来优化尾递归的示例
Jun 18 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
Python实现读取及写入csv文件的方法示例
Jan 12 Python
Python实现图片尺寸缩放脚本
Mar 10 Python
Python实现中一次读取多个值的方法
Apr 22 Python
Pycharm新建模板默认添加个人信息的实例
Jul 15 Python
Python占用的内存优化教程
Jul 28 Python
python实现把两个二维array叠加成三维array示例
Nov 29 Python
Python导入模块包原理及相关注意事项
Mar 25 Python
Django与pyecharts结合的实例代码
May 13 Python
win10下python3.8的PIL库安装过程
Jun 08 Python
Python使用pyecharts控件绘制图表
Jun 05 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 验证登陆类分享
2015/03/13 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
jQuery中insertAfter()方法用法实例
2015/01/08 Javascript
使用JavaScript实现旋转的彩圈特效
2015/06/23 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
ReactJs实现树形结构的数据显示的组件的示例
2017/08/18 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
详解Vue.directive 自定义指令
2019/03/27 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
python matlibplot绘制多条曲线图
2021/02/19 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
8种常用的Python工具
2020/08/05 Python
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
英文自荐信格式
2013/11/28 职场文书
环境整治工作方案
2014/05/18 职场文书
庐山导游词
2015/02/03 职场文书
离婚律师函范本
2015/05/27 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL