零碎的一些函数,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)
结果:
二、梯度裁剪防止梯度爆炸
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)
结果:
四、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 )
保存住了!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步