零碎的一些函数,random.choice()、 torch.nn.utils.clip_grad_norm_()、OrderedDict、torch.autograd.grad()

一、random.choice()方法,从列表中选择一个元素进行输出

import random
name = ['lili', 'wangwei', 'chenyu', 'luoyan']
node_id = random.choice(name)
print(node_id)

结果:
image

二、梯度裁剪防止梯度爆炸

pytorch中梯度剪裁方法为 torch.nn.utils.clip_grad_norm_(parameters, max_norm, norm_type=2)。
三个参数:
parameters:希望实施梯度裁剪的可迭代网络参数
max_norm:该组网络参数梯度的范数上限
norm_type:范数类型
参考自:原文链接
使用时:

  loss.backward()  # 计算梯度
  torch.nn.utils.clip_grad_norm_(net.parameters(), 50)   # 梯度裁剪
  net_optim.step()   # 更新参数

三、OrderedDict使用,易于排序

from collections import OrderedDict

dic = {'name': 'chen', 'age': 20, 'time': 5}  # 随意初始化一个字典
dic['sex'] = 'w'   # 添加元素
print(dic)
dic = OrderedDict({i: j for i, j in dic.items()})  #添加到OrderedDict中,
# 也可以直接dic = OrderedDict() 再添加:dic['name'] = 'chen'等等...
print(dic)
orderdic = OrderedDict(sorted(dic.items(), key= lambda t: t[0])) # 根据key值排序
# 也可以根据value排序, 其中key = lambda t: t[1]即可
print(orderdic)

结果:
image

四、torch.autograd.grad()函数

参考自:https://www.w3cschool.cn/article/4182917.html

autograd.grad(outputs, inputs, grad_outputs=None, retain_graph=None, 
              create_graph=False, only_inputs=True, allow_unused=False)

简单说就是,
outputs是函数f(x)
inputs是自变量,一般是模型参数
grad_outputs是雅可比矩阵前的一个系数,维度与outputs一致, 可以看作是一个梯度的加权
所以梯度grad可以表示为:

\[grad = J \otimes groad outputs \]


五、matplotlib画图链接(https://matplotlib.org/stable/gallery/lines_bars_and_markers/errorbar_limits_simple.html

保存住了!

posted @ 2022-03-22 16:13  mine_possibility  阅读(268)  评论(0编辑  收藏  举报