1--torch.optim.SGD()函数拓展
import torch
LEARNING_RATE = 0.01 # 梯度下降学习率
MOMENTUM = 0.9 # 冲量大小
WEIGHT_DECAY = 0.0005 # 权重衰减系数
optimizer = torch.optim.SGD(
net.parameters(),
lr = LEARNING_RATE,
momentum = MOMENTUM,
weight_decay = WEIGHT_DECAY,
nesterov = True
)
参数解释:lr表示学习率;momentum表示冲量因子;weight_decay表示权重衰减系数(将使用L2正则项);nesterov表示使用Nesterov冲量;
常规梯度下降算法:
l表示学习率; J(θ)表示损失函数;▽表示求梯度;
带momentum的梯度下降算法:
m表示冲量因子,l表示学习率;
基于Nesterov冲量的梯度下降算法:
带weight_decay的梯度下降算法:
主要作用是对损失函数增加L2正则项,强烈建议通过参考链接1了解L2正则化的作用,即如何避免过拟合,权重衰减通过参考链接2理解。
2--torch.manual_seed()函数和torch.cuda.manual_seed()函数
torch.manual_seed()函数:为CPU设置种子,确保每次实验生成的随机数固定,即初始化相同;
torch.cuda.manual_seed()函数:为当前GPU设置种子,作用与torch.manual_seed()函数相同;
torch.cuda.manual_seed_all()函数:为所有GPU设置种子。
在神经网络中,参数默认是进行随机初始化的。不同的初始化参数往往会导致不同的结果,当获得较好结果时我们通常希望这个结果是可以复现的。在pytorch中,通过设置随机数种子确保每次代码运行时初始化操作都相同,从而在相同的算法或神经网络程序中,确保运行的结果也相同。参考链接1参考链接2