LOADING

加载过慢请开启缓存 浏览器默认开启

深度学习

2024/3/27 ML

深度学习板子

杂项

Pytorch 特点:训练时需要加上 ls.backward() 而用训练结果作为测试集时我们应该用ls.detach.numpy()消除梯度并转换为numpy数组便于观测图像

auto_grad : https://blog.csdn.net/qq_43328040/article/details/108421469

张量形状:一般而言,输入张量t维度为[B,C,H,W],分别表示批大小,词嵌入深度,高和宽

1、常见数据处理

torch

torch.full(shape,num) 用于数据填充

torch.repeat_interleave(x,nums) 用于得到重复nums次的x

y=x.torch.reshape(-1,3) x.view(-1,3) view会修改张量本身,reshape不会

torch.cat([torch1,torch2],dim=-1) 表示在最后一个维度上对两个张量进行连接

torch.stack() :表示在新的维度上对两个张量进行连接

unsqueeze(1): 添加维度,比方说原张量[h,w],现在变成[h,1,w]

self.weight[:, None, None] :同样用于扩展维度,用None填充

arr[None,:] :对一维向量arr来说这个式子表示将arr转置,添加了一个维度

permute(0,2,1) :用于将张量原来顺序调整成函数中定义样子

flatten(2), flatten(0,1) :左边用于把第三个维度后全部压缩为一个维度,右边表示把第一第二两个维度压缩

广播机制:torch_a+torch_b时如果维度不一致会自动把缺少的那个维度在一个方向进行扩展,然后再相加。对于张量乘法,实际上是对两个张量最后两个维度进行矩阵乘法。

数据选取

np.argsort(x) :本来用sort()会排序数组,现在用argsort会得到排序后的索引(0~n-1)

random.sample(range(1,N), k) 从list序列中随机选k个不重复的

高级索引(Fancy Indexing):比切片索引更加灵活

## 1、提取被3整除的元素
list=range(1,100)
musk=list%3==0
get_divid_by3=list[musk]
## 或 get_divid_by3=[i for i in list if i%3==0]

## 2、掩码操作
patches: (batch_size, num_patches, patch_height, patch_width)
mask_ind:(batch_size,num_masked)
batch_ind:(batch_size,1)
mask_patches=patches[batch_ind,mask_ind]
这里像batch_ind:(batch_ind,1)第一个维度用于batch_size对齐,第二个用于筛选。随后再对已筛选好的用num_masked进一步筛

矩阵

x @ y=torch.matmul(x,y)表示矩阵乘法

np.linalg.matrix_power(P, 2023) 表示矩阵自乘2023次

元素选取

x[:m] 表示选取前m行元素

x[::2] 表示从左到右每两个元素选一个(相当于选偶数位)

x[::-1] 表示逆序选择所有元素

x[-1:] 表示选取x最后一个元素,并且保留维度。

掩码

y_embed = not_mask.cumsum(1, dtype=torch.float32) 其中.cumsum用于沿着某一维度计算累加和,比如[1,0,1,1]→[1,1,2,3]

2、常用库函数

nn.Linear 函数对输入向量最后一个维度进行处理,张量乘法是针对最后两个维度进行处理