学习记录(七)

1.LeetCode上面生成二维矩阵的例子

dp=[[False]*n for _ in range(n)]

这样就生成了n*n的False矩阵

2.python list实现栈和队列

栈(先进后出)

使用 append() 方法存入数据;使用 pop() 方法读取数据。

队列(先进先出)

存入数据时使用 insert() 方法,设置其第一个参数为 0,即表示每次都从最前面插入数据;读取数据时,使用 pop() 方法

3.collections模块实现栈和队列

利用deque()建立 ,append()添加,popleft()实现队列提取,pop实现栈提取

1.  queueAndStack = deque()
2.  queueAndStack.append(1)
3.  queueAndStack.append(2)
4.  queueAndStack.append("hello")
5.  print(list(queueAndStack))

7.  #实现队列功能,从队列中取一个元素,根据先进先出原则,这里应输出 1
8.  print(queueAndStack.popleft())
9.  #实现栈功能,从栈里取一个元素,根据后进先出原则,这里应输出 hello
10.  print(queueAndStack.pop())
11.  #再次打印列表
12.  print(list(queueAndStack))

4.Ubuntu安装yaml

通过pyyaml实现

pip install pyyaml

5.pytorch分布式

torch.utils.data.distributed.DistributedSampler

使用torch.utils.data.distributed.DistributedSampler, 结果显示,数据被平分到两块卡上,每个epoch被分配到每块卡上的数据都一样。

6.实现model的参数平均化

avg_fn = lambda averaged_model_parameter, model_parameter, num_averaged: \
                args.ema_rate * averaged_model_parameter + (1 - args.ema_rate) * model_parameter  #定义了一个计算的方法

ema_model = optim.swa_utils.AveragedModel(model, avg_fn=avg_fn)#利用model和参数平均化得到ema_model

其中avg_fn是自己定义的参数变化,ema_model是参数变化之后得到的model

7.LeakyReLU

Leaky有助于扩大ReLU函数的范围

学习记录(七)_第1张图片

8.使用正态分布对输入张量进行赋值

fan_in

如果权重是通过线性层(卷积或全连接)隐性确定的,则需设置mode=fan_in。

import torch
 
linear_layer = torch.nn.Linear(node_in, node_out)
init.kaiming_normal_(linear.weight, mode=’fan_in’)
output_data = relu(linear_layer(input_data))

fan_out

如果通过创建随机矩阵显式创建权重,则应进行设置mode=‘fan_out’。

import torch
 
w1 = torch.randn(node_in, node_out)
init.kaiming_normal_(w1, mode=’fan_out’)
b1 = torch.randn(node_out)
output_data  = relu(linear(input_data, w1, b1))

9.Python中使用logging调用Logger.info

在做实验的时候,服务器要是脑抽就会断线,这时候跑半天的代码功亏一篑,所以这里会尝试用日记记录下来每次运行的结果,这边拿top-1和top-5的结果来显示

logger.info(f'{args.dataset} error rate (%) | Top1 {100 - acc1/n_samples} | Top5 {100 - acc5/n_samples}')

10.Checkpoint 机制

PyTorch 之 Checkpoint 机制解析_Tom Hardy的博客-CSDN博客

该技术的核心是一种使用时间换空间的策略。在现有的许多方法中被大量使用,例如 DenseNet、Swin Transformer 源码中都可以看到它的身影。

开门见山的说,PyTorch 在进行深度学习训练的时候,有 4 大部分的显存开销,分别是模型参数(parameters)模型参数的梯度(gradients)优化器状态(optimizer states) 以及 中间激活值(intermediate activations) 或者叫中间结果(intermediate results)。

而通过 Checkpoint 技术,我们可以通过一种取巧的方式,使用 PyTorch 提供的 “no-grad” (no_grad())模式来避免将这部分运算被autograd记录到反向图“backward graph”中,从而避免了对于中间激活值的存储需求。

11.with torch.no_grad()

with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭/线程中锁的自动获取和释放等。

with torch.no_grad() 在该模块下,所有计算得出的tensor的requires_grad都自动设置为False。

达到反向传播时禁用梯度计算以加快计算速度

12.nums 和 nums[:] 的区别

nums 是数组的对象,而 nums[:] 是对指数组 nums 的元素

也就是说后者如果运行下方代码,元素的变换是可以实现的,而前者是不变

nums = [1,2,3,4,5]  # 创建一个数组
res = []
res.append(nums[:])
nums[0], nums[4] = nums[4], nums[0]  # 交换数组中的元素
res.append(nums[:])
print(res)

13.collections.defaultdict()

Python中通过Key访问字典,当Key不存在时,会引发‘KeyError’异常。为了避免这种情况的发生,可以使用collections类中的defaultdict()方法来为字典提供默认值。

使用list作第一个参数,可以很容易将键-值对序列转换为列表字典。

以leetcode上的一道题为例子

from collections import defaultdict

strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
mp = defaultdict(list)

for st in strs:
    print(sorted(st))
    key = "".join(sorted(st))
    print(key)
    mp[key].append(st)
    print(st)

print(list(mp.values()))

defaultdict还可以被用来计数,将default_factory设为int即可

default_factory设为set时,可以用defaultdict建立集合字典(a dictionary of sets)(set使用add)

14.PyTorch中的torch.max()和torch.maximum()

torch.max()

返回 input tensor 中所有元素的最大值。

torch.maximum()
torch.maximum(input, other) → Tensor

  • 两个 tensor 进行逐元素比较,返回每个较大的元素组成一个新的 tensor。如果元素中有 NaN 值,则返回 NaN 值。

15.PyTorch中的torch.gather()

定义:从原tensor中获取指定dim和指定index的数据

cclasses = torch.gather(datas, 1, run_classes) #获取指定dim和指定index的数据 也就是获取类
res = torch.gather(cclasses, 2, run_indices)#获取指定dim和指定index的数据 也就是获取图像

16. pytorch实现协方差

def torch_cov(input_vec:torch.tensor):    
    x = input_vec- torch.mean(input_vec,axis=0)
    cov_matrix = torch.matmul(x.T, x) / (x.shape[0]-1)
    return cov_matrix
CUDA_VISIBLE_DEVICES=1 python main.py --dataset-path "/home/user/Linxx/matchingNets/miniImageNet/images"  --dataset miniimagenet --model resnet12 --epochs 0 --manifold-mixup 500 --rotations --cosine --gamma 0.9 --milestones 100 --batch-size 64 --preprocessing ME --n-shots 1 --skip-epochs 450 --save-model "./models/resnet12_500_MSC.pt1" --save-model "./models/resnet_features_500_MSC.pt1"

你可能感兴趣的:(python,学习,矩阵)