时间:2021-05-22
背景:对 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 多维数组运算过程的索引处理方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
numpy库对多维数组有非常灵巧的处理方式,主要的处理方法有:.reshape(shape):不改变数组元素,返回一个shape形状的数组,原数组不变.resi
LinuxShell在编程方面比Windows批处理强大很多,无论是在循环、运算。bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,
MySQL各版本,对于addIndex的处理方式是不同的,主要有三种:(1)CopyTable方式这是InnoDB最早支持的创建索引的方式。顾名思义,创建索引是
前言因为计算机数字是浮点型,所以在计算过程中通常得到的并不是一个准确的数据,所以在做一些数组运算的时候比较头疼,我们这里就来写一下精确运算的方法首先是加法(这里
一,对于引用类型对象(我指的是String,Date,Object,Array,Function,Boolean)的+运算符运算过程如下!1,首先调用此对象的v