刘二大人《Pytorch深度学习》第5讲作业

选用其中四种

Rprop优化器:

#第一步 准备数据集

import torch
x_data=torch.Tensor([[1.0],[2.0],[3.0]])
y_data=torch.Tensor([[2.0],[4.0],[6.0]])


#第二步 设计模型类
class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel,self).__init__()
        self.linear=torch.nn.Linear(1,1)#包括w,b两个tensor
    def forward(self,x):
        y_pred=self.linear(x)#实现一个可调用的对象
        return y_pred
model=LinearModel()

#第三步 构造损失函数和优化器
criterion=torch.nn.MSELoss(size_average=False)optimizer=torch.optim.Rprop(model.parameters(),lr=0.01)#优化器,lr为学习率
epoch_list=[epoch for epoch in range(100)]
loss_list=[]


#第四步 训练周期
for epoch in range(100):
    y_pred=model(x_data)#predict
    loss=criterion(y_pred,y_data)#loss
    print(epoch,loss)#打印loss时自动调用__str__(),不会产生计算图
    loss_list.append(loss.item())
    optimizer.zero_grad()#梯度归零
    loss.backward()#反向
    optimizer.step()#更新
#output weight and bias
print('w=',model.linear.weight.item())#item()取出矩阵里的值
print('b=',model.linear.bias.item())

#test model
x_test=torch.Tensor([[4.0]])
y_test=model(x_test)
print('y_pred=',y_test.data)

#绘制epoch-loss图
import matplotlib.pyplot as plt
plt.plot(epoch_list,loss_list)
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()

运行结果(学习率:0.01 训练100次):

 

 

图1 Rprop优化器下的epoch-loss图

Adagrade优化器:

#仅展示第三步 构造损失函数和优化器

criterion=torch.nn.MSELoss(size_average=False)
optimizer=torch.optim.Adagrad(model.parameters(),lr=0.01)

运行结果(学习率:0.01 训练1000次):

w= -0.022234104573726654
b= 0.6071299910545349
y_pred= tensor([[0.5182]])

图2 Adagrade优化器(lr=0.01)下的epoch-loss图

运行结果(学习率:0.1 训练1000次):

w= 1.9602395296096802
b= 0.0879262387752533
y_pred= tensor([[7.9289]])

图3 Adagrade优化器(lr=0.1)下的epoch-loss图

Adam优化器(学习率:0.01 训练1000次):

#第三步 构造损失函数和优化器

criterion=torch.nn.MSELoss(size_average=False)#MSELoss也继承自Module,构造了对象criterion,需要参数(y_pred,y)计算损失
optimizer=torch.optim.Adam(model.parameters(),lr=0.05)

w= 1.5380566120147705
b= 1.023187279701233
y_pred= tensor([[7.1754]])

图4 Adam优化器下的epoch-loss图

LBFGS优化器:

#第三步 构造损失函数和优化器
loss_list=[]
criterion=torch.nn.MSELoss(size_average=False)
optimizer=torch.optim.LBFGS(model.parameters(),lr=0.01)
def closure():   
    optimizer.zero_grad()
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    loss_list.append(loss.item())
    loss.backward()
    return loss

#第四步 训练周期
for epoch in range(100):
    optimizer.step(closure)#更新

运行结果(学习率:0.01 训练100次): 

 图5 LBFGS优化器下的epoch-loss图

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值