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程序
Apr 04 Python
Python多线程爬虫简单示例
Mar 04 Python
python九九乘法表的实例
Sep 26 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
django项目用higcharts统计最近七天文章点击量
Aug 17 Python
PyTorch笔记之scatter()函数的使用
Feb 12 Python
Python中内建模块collections如何使用
May 27 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 Python
4种非常实用的python内置数据结构
Apr 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
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
循环 vs 递归浅谈
2013/02/28 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
2017/07/21 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
python 编码规范整理
2018/05/05 Python
python用700行代码实现http客户端
2021/01/14 Python
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
高中军训第一天感言
2014/03/06 职场文书
青春无悔演讲稿
2014/05/08 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
西安兵马俑导游词
2015/02/02 职场文书
公司表扬信格式
2015/05/04 职场文书
委托收款证明
2015/06/23 职场文书
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript