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命令行参数解析模块getopt使用实例
Apr 13 Python
Python中pygame安装方法图文详解
Nov 11 Python
python select.select模块通信全过程解析
Sep 20 Python
基于pip install django失败时的解决方法
Jun 12 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
Python3 max()函数基础用法
Feb 19 Python
浅析Python 引号、注释、字符串
Jul 25 Python
python中matplotlib条件背景颜色的实现
Sep 02 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
Sep 29 Python
pycharm工具连接mysql数据库失败问题
Apr 01 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
Session的工作方式
2006/10/09 PHP
快速配置PHPMyAdmin方法
2008/06/05 PHP
php格式化日期和时间格式化示例分享
2014/02/24 PHP
PHP获取路径和目录的方法总结【必看篇】
2017/03/04 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
JS 建立对象的方法
2007/04/21 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
了解Javascript的模块化开发
2015/03/02 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
vue实现购物车小案例
2019/09/27 Javascript
python抓取网页图片示例(python爬虫)
2014/04/27 Python
python计算日期之间的放假日期
2018/06/05 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
Django数据库连接丢失问题的解决方法
2018/12/29 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
django+echart数据动态显示的例子
2019/08/12 Python
python @classmethod 的使用场合详解
2019/08/23 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
python中open函数的基本用法示例
2019/09/07 Python
python中字典增加和删除使用方法
2020/09/30 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
python实现图片转字符画
2021/02/19 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
医大实习自我鉴定
2013/12/07 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
主题班会开场白
2015/06/01 职场文书
新人入职感言
2015/07/31 职场文书
新手初学Java List 接口
2021/07/07 Java/Android
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL