api
- nn.Module 构造模型
- init: 自定义的方法实现的位置,调用super方法,继承父类的属性和方法
- forward: 完成一次向前计算的过程,
//实例化模型
model = Lr()
// 传入数据,计算结果
predict = model(x)
- optimizer优化器类
- torch.optim.SGD/Aadm
2)流程:
b梯度置为0, optimizer zero. grad)
c反向传播,计算梯度: los.ackward()
d)optimizer.step() ,更新参数
- torch.optim.SGD/Aadm
2.损失函数
损失函数对象torch.nn提供
b.训练的过程:
1.实例化模型
2. 实例比损失函数
3.实例化优化器类
4.进入循环:
1)梯度置为0
2)调用模型得到预测值
3)调用loss函数, 得到损失
4) loss .backward()进行梯度计算
5)optimizer.step0
注意点
1 model.eval()#把模型置为评估模型
1) model.training = False
2.GPU上运行代码,在GPU上计算结果也为cuda的数据类型,需要转化为numpy或者torch的cpu的tensor类型
1)自定义的tensor.to(device)
2)model.to(device)
优化算法:
1.梯度下降:把所有的数据传入模型,计算平均梯度,更新参数,缺点:慢
2.随机梯度下降:选一条数据进行参数的更新。缺点:容易受到噪声数据的影响
3.小批梯度下降:每次选择一波数据进行参数的更新。
缺点:梯度的变化幅度可能会很大,在最小值附件徘徊
4.动量法:把历史的梯度考虑进去。更新参数时候使用梯度=历史梯度的指数加权平均
5.adagrad:更新参数的时候,使用自适应的学习率,等于学习率/历史梯度的平方
6.rmsprop:使用自适应的学习率,=学习率/历史梯度的平方的指数加权平均
7.adam:动量法和RMSprop的结合版本,既考虑梯度(使用梯度的指数加权平均),又考
虑学习率(让学习率除以历史梯度的平方的指数加权平均)