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的即时标记项目练习笔记
Sep 18 Python
Python二维码生成库qrcode安装和使用示例
Dec 16 Python
python实现批量改文件名称的方法
May 25 Python
Python 稀疏矩阵-sparse 存储和转换
May 27 Python
Python 调用Java实例详解
Jun 02 Python
pyqt5的QComboBox 使用模板的具体方法
Sep 06 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 Python
virtualenv介绍及简明教程
Jun 23 Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 Python
详解python 条件语句和while循环的实例代码
Dec 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
一个比较不错的PHP日历类分享
2014/11/18 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
php实现映射操作实例详解
2019/10/02 PHP
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
jQuery实现当按下回车键时绑定点击事件
2014/01/28 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
Vue.js组件tree实现省市多级联动
2016/12/02 Javascript
Angular实现跨域(搜索框的下拉列表)
2017/02/16 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
Python多进程同步简单实现代码
2016/04/27 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
python对json的相关操作实例详解
2017/01/04 Python
详解python中的 is 操作符
2017/12/26 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
2020/02/26 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
房屋租赁协议书
2014/04/10 职场文书
大学第二课堂活动总结
2014/07/08 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
村党支部对照检查材料思想汇报
2014/09/28 职场文书
女性健康知识讲座通知
2015/04/23 职场文书
2015年大学迎新晚会总结
2015/07/16 职场文书
Python Matplotlib绘制条形图的全过程
2021/10/24 Python