创建Tensor
Import from numpy
torch.from_numpy(a)

Import from List

torch.tensor() 中仅可以给出具体的数值,也就是tensor中的数值
但是 torch.FloatTensor() 中既可以给具体的数值(通过List方式给出),也可以不加 [] 而给出tensor的“dim”,比如torch.FloatTensor(3, 4),使用时最好使用后者,以便与torch.tensor()方法区分开
uninitialized? 未初始化方法(并未指定tensor中的数值,采用随机的方式给定,一般是以0为中心的数值,可能会非常大或者非常小)
torch.empty()
torch.FloatTensor(d1, d2, d3)
torch.IntTensor(d1, d2, d3)

set default type

rand/rand_like, randint
[0, 1]?
[min, max)
*_like

torch.rand(3, 3) 意思是做出一个3*3的tensor,而且这里的每个元素要在0~1之间平均分布,这就是初始化了的方法?
torch.rand_like(a) 意思是做出一个和a这个tensor一样维度的tensor(元素分布规则用rand方法)
可以类比到torch.*_like(a) 的范围
torch.randint(1, 10, [3, 3]) 意思是做一个3*3的tensor,其中的元素分布是从1-9的整数
randn
N(0, 1)
N(u, std)

torch.randn(3, 3) 做出一个3*3的tensor,且其中的元素服从N(0, 1)正态分布?
full

torch.full([2, 3], 7) 意思是做一个2*3的tensor,元素都是7;空列表[]表示做一个标量是7的tensor
arange/range

linspace/logspace
?
torch.linspace(0, 10, step=4) 表示做一个一维的tensor,元素总共4个,从0到10的等差数列
torch.logspace(0, -1, step=10) 表示做一个一维的tensor,元素总共10个,从10^0到10^-1的等比数列?
Ones/zeros/eye

?
randperm
random.shuffle

?
索引与切片
Indexing
dim 0 first

select first/last N
?
select by steps
?
select by specific index
?

select by mask
.masked_select()
?
elect by flatten index

?
维度变换
Operation
- view/reshape
- squeeze/unsqueeze
- transpose/t/permute
- expand/repeat
view reshape
Lost dim information

flexible but prone to corrupt (灵活但容易坏掉)

unsqueeze
[-a.dim()-1, a.dim()+1)
[-5, 5)

a.unsqueeze(idx) 中的 idx 若为正,则在idx 的前面增加一个维度1,若idx为负,则从后往前数的idx处的后面增加一个1维度?

?
举个例子
?
squeeze
?
b.squeeze() 就是把b中所有维度是1的通道给删除,保留不是1维度的通道?
加idx 索引就是把指定索引idx处的1通道删除,且必须是1维度的才能删
expand / repeat
expand: broadcasting
repeat: memory copied
expand

repeat
memory touched?

注意expand和repeat方法之间的区别:
expand中传入目标维度,其结果就是目标维度,但是repeat中传入复制多少次的次数,也就是说,原tensor乘这个参数得到最终tensor的维度数;而且repeat方法是真正复制了数据的方法,因此并不推荐,expand更好一些,它相当于是一个扩展,broadcasting的效果?
.t

.t 方法只能用于2维tensor,因此并不推荐?
transpose

a.transpose(1, 3) 直接输入需要交换位置的两个维度,1和3表示index,较为推荐?
?permute

Broadcast 自动扩展
Broadcasting
- expand
- without copying data
Key idea
- insert 1 dim ahead
- Expand dims with size 1 to same size
- Feature maps: [4, 32, 14, 14]
- Bias: [32, 1, 1] => [1, 32, 1, 1] => [4, 32, 14, 14]

?
??
?
?
?
?
?
拼接与拆分
merge or split
cat
statistics about scores
- [class1-4, students, scores]
- [class5-9, students, scores]

Along distinct dim/axis
dim = d
?
举个例子
?
stack
create new dim?

cat v.s. stack

split: by len

chunk: by num
?
基本运算
Math operation
- add/minus/multiply/divide
- matmul
- pow
- sqrt/rsqrt
- round
bisic

其实加减乘除直接用符号表示即可,当然了,torch中也给出了相应的方法,简写的torch.add(), torch.sub(), torch.mul(), torch.div()??
matmul(矩阵乘法)

举个例子

>2d tensor matmul?
?
power
?
exp log
?
approximation
- .florr()? .ceil()
- .round()
- .trunc()? .frac()
?
clamp
- gradient clipping
- (min)
- (min, max)

统计属性
statistics
- norm
- mean sum
- prod
- max, min, argmin, argmax
- kthvalue, topk
norm
- v.s. normalize , e.g. batch_norm
- 这俩是不同的东西,norm表示范数计算,norm1是1-范数
- normalize和norm不一样
- matrix norm v.s. vector norm
vector vs matrix

norm-p
?
mean, sum, min, max, prod
?
argmin, argmax
?
?
dim, keepdim
?
top-k or k-th
?
compare
- <, <=, >, >=, !=, ==
- torch.eq(a, b)

?
高阶OP
Tensor advanced operation
where
torch.where(condition, x, y) => Tensor
return a tensor of elements selected from either x or y, depanding on condition.
The operation is defined as:

举个例子

gather
torch.gather(input, dim, index, out=None) => Tensor
Gather values along an axis specified by dim.
For a 3-D tensor the output is specified by:

retrieve global label
- argmax(pred) to get relative labeling
- On some condition, our label is distinct from relative labeling
retrieve label
?
|