基础
数据类型
Type:
PS:GPU里的cuda类型与CPU里的不同,可以转换
Dimension 0:常用于Loss
Dimension 1:常用于bias
Dimension 2:常用于线性输入batch
Dimension 3:用于循环神经网络RNN输入
Dimension 4:用于卷积神经网络CNN输入[b, c, h, w]
Mixed:a.numel() 输入所有元素个数,内存大小
创建Tensor
Import from numpy:
Import from list:
PS:
torch.tensor() 里面接收现有的数据
torch.Tensor()和torch.FloatTensor()里面不加 [] 是接收数据的shape,也可以加 [] 接收真实数据
Uninitialized:未初始化的数据使用起来容易出现问题,大小差异较大,常作容器使用
设置修改默认格式的Tensor:
Tensor格式有IntTensor,FloatTensor.DoubleTensor,可以修改默认生成的Tensor格式。增强学习常用DoubleTensor。
rand/rand_like/randint:
PS:rand会随机均匀产生0-1之间的数值,不包括1
均匀采样0-1的数据,只能用10*torch.rand(d1, d2),randint只能采样整数。
randint(min, max, [d1, d2])需要指定数据范围和数据维度
randn/normal:产生正态分布的数据。
N(0, 1)产生均值为0,方差为1的数据。torch.normal()可以指定产生数据的均值和方差,只是必须打平数据,使用不直观。
full:
PS:[]里面不写数字是产生标量,维度为0,[1]是产生维度为1的数据。
arange/range: 等差序列
linspace/logspace:
logspace:以10为基数产生数据
one/zero/eye:
randperm: 用randperm得到的索引序列作为种子去排列数据。
索引和切片
Indexing
select first/last N
select by steps
select by specific index
…
select by mask
select by flatten index
维度变换
- view/reshape
- squeeze/unsqueeze
- transpose/permute
- expand/repeat
view/reshape
squeeze/unsqueeze
expand/repeat
PS:expand()扩展张量不会给分配新的内存,只是在存在的张量上创建一个新的视图(view),一个大小(size)等于1的维度扩展到更大的尺寸。
repeat()沿着特定的维度重复这个张量,和expand()不同的是,这个函数拷贝张量的数据,需要占用内存。
** .t/transpose 转置**
PS:view()会导致维度顺序关系变模糊,需要人为跟踪。[b,c,h,w]需要注意转换后h和w的位置。
[b, h, w, c]是numpy储存图片的格式,需要这一步才能导出numpy。
permute可以指定多个位置转换信息
拼接与拆分
- cat
- stack
- split
- chunk
cat:指定维度拼接,其他维度必须相同,不会额外增加维度
stack:指定的位置上维度需保持一致,会额外增加一个维度
split:by len 指定拆分长度,根据长度拆分
chunck:by num 根据数量拆分
基本运算
- add/minus/multiply/div
- matmul
- pow
- sqrt/rsqrt
- round
basic
matmul/@
power
approximation
clamp
统计属性
- norm/mean norm
- prod
- max,min,argmin,argmax
- kthvalue/topk
norm-p
mean,sum,min,max,prod
argmin/argmax
dim/keepdim
top-k or k-th
compare
高阶op
- where
- gather