pytorch的基本操作
Broadcast自动扩展
1、expand
该方法扩张不需要拷贝数据
注意点:
1)从第一个维度开始匹配(后面的小前面的大);
2)对应的size相同,可进行对应位置的元素相加;
实例:
Feature maps:[4,32,14,14]
Bias :[32,1,1]>[1,32,1,1]>[4,32,14,14]
具体完成的功能:
自动根据需要将原有的数据进行复制,以及将原有的数据维度1的维度扩张为计算对象相同的维度
存在的意义:
能够自动扩张又不需要手动的完成扩张操作;
操作方法:
1、 从最后一个维度开始计算,执行的维度不变,缺少且带扩张的维度代替为1,
2、 扩张,将所有的维度扩张为目标维度,,其他的维度不进行操作;
注意:指定的维度和目标维度要相等,不然无法进行计算;
拼接和拆分
Cat
Stack:
1、类似于拉索,对于传入的dim前进行缝合,dim后的各表示各的;所以stack拼接的数组必须完全一样;
2、相比于cat,stack维度必须相同,cat维度可以不相同;
Split
根据长度来拆分,擦分方式分为:根据单元长度来拆分,根据拆分的数量来拆分;
Split(1,dim=0)=》在第一个维度每个长度为1进行拆分;
Split([2,3],dim=0)=>在第一个维度2:3拆分
Chunk
按照数字进行拆分,将数据拆分为规定的份数;
Chunk(2,dim=0)
Tensor基本运算
1、Add/minus/matmul/divide
加减乘除
注:mul和的差异::对应位置相乘;
Mul:传统的矩阵乘法,简写@
2、Matmul
3、 Pow
平方=**
4、Sqrt/rsqrt
开方
5、Round
扩展:
取整数:
A.Floor()/a.Ceil()/a.trunc()/a.frac():向下取整、向上取整、裁剪整数部分、裁剪小数部分
A.Roud():四舍五入
属性统计
1、Norm:
范数:一范数:所有元素的绝对值得和
二范数:所有元素平方和的开方
b.norm(1,dim=1):范数值和维度值
2、Mean、sum
求和
3、Prod
数组元素中给所有元素的乘积
4、Max\min\argmin\argmax
Argmax/argmin使用的时候会先打平该数据,随后返回最大、最小的数据所在的一维索引,如果不想打平就执行维度数目
5、Kthvalue,topk
Topk返回最大的几个;,topk返回的数据比max的信息多很多,如果过要返回最小的集个就将largest设置为false:a=top看(3,dim=1,largest=False)返回维度一的前三个数据
返回第几小的数值:
a. Kthvalue(8,dim=1):返回维度为一第八小的数值
6、比较操作:compare,返回true或者false
dim和keepdim的作用:
dim指定计算的维度
keepdim:为在返回维度结果的同时,保持原有的维度结构;
pytorch的高阶操作
1、Where
torch.where(condition,x,y)–》tensor
从a和b中依据condition来生成一个新的张量,如果是true的话就选A对应的位置,如果为false的话就选B对应的位置;
注:可知,A、B的shape是相同的
2、Gather:收集操作
b = torch.Tensor([[1,2,3],[4,5,6]])
print b
index_1 = torch.LongTensor([[0,1],[2,0]])
index_2 = torch.LongTensor([[0,1,1],[0,0,0]])
print torch.gather(b, dim=1, index=index_1)
print torch.gather(b, dim=0, index=index_2)
输出:
1 2 3
4 5 6
[torch.FloatTensor of size 2x3]
1 2
6 4
[torch.FloatTensor of size 2x2]
1 5 6
1 2 3
[torch.FloatTensor of size 2x3]
简单的说就是根据index的指示以及dim代表的是维度对b进行挑选;