不同优化器的应用

简单用用,优化器具体参考

深度学习中的优化器原理(SGD,SGD+Momentum,Adagrad,RMSProp,Adam)_哔哩哔哩_bilibili

收藏版|史上最全机器学习优化器Optimizer汇总 - 知乎 (zhihu.com)

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
import torch
# prepare dataset
# x,y是矩阵,3行1列 也就是说总共有3个数据,每个数据只有1个特征
x_data = torch.tensor([[1.0], [2.0], [3.0]])

y_data = torch.tensor([[2.0], [4.0], [6.0]])

loss_SGD = []
loss_Adagrad = []
loss_Adam = []
loss_Adamax = []
loss_ASGD = []
loss_LBFGS = []
loss_RMSprop = []
loss_Rprop = []

class LinearModel(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.Linear = torch.nn.Linear(1,1)

    def forward(self,x):
        y_pred = self.Linear(x)
        return y_pred

model = LinearModel()

criterion = torch.nn.MSELoss(reduction='sum')
optimizer_SGD = torch.optim.SGD(model.parameters(),lr=0.01)
optimizer_Adagrad = torch.optim.SGD(model.parameters(),lr=0.01)
optimizer_Adam = torch.optim.SGD(model.parameters(),lr=0.01)
optimizer_Adamax = torch.optim.SGD(model.parameters(),lr=0.01)
optimizer_ASGD = torch.optim.SGD(model.parameters(),lr=0.01)
optimizer_LBFGS = torch.optim.SGD(model.parameters(),lr=0.01)
optimizer_RMSprop = torch.optim.SGD(model.parameters(),lr=0.01)
optimizer_Rprop = torch.optim.SGD(model.parameters(),lr=0.01)

epoch_list = []

# optimizer_SGD
for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    epoch_list.append(epoch)
    loss_SGD.append(loss.data)
    optimizer_SGD.zero_grad()
    loss.backward()
    optimizer_SGD.step()

# optimizer_Adagrad
for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    loss_Adagrad.append(loss.data)
    optimizer_Adagrad.zero_grad()
    loss.backward()
    optimizer_Adagrad.step()

# optimizer_Adam
for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    loss_Adam.append(loss.data)
    optimizer_Adam.zero_grad()
    loss.backward()
    optimizer_Adam.step()

# optimizer_Adamax
for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    loss_Adamax.append(loss.data)
    optimizer_Adamax.zero_grad()
    loss.backward()
    optimizer_Adamax.step()


# optimizer_ASGD
for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    loss_ASGD.append(loss.data)
    optimizer_ASGD.zero_grad()
    loss.backward()
    optimizer_ASGD.step()


# optimizer_LBFGS
for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    loss_LBFGS.append(loss.data)
    optimizer_LBFGS.zero_grad()
    loss.backward()
    optimizer_LBFGS.step()


# optimizer_RMSprop
for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    loss_RMSprop.append(loss.data)
    optimizer_RMSprop.zero_grad()
    loss.backward()
    optimizer_RMSprop.step()


# optimizer_Rprop
for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    loss_Rprop.append(loss.data)
    optimizer_Rprop.zero_grad()
    loss.backward()
    optimizer_Rprop.step()

x_test = torch.tensor([4.0])
y_test = model(x_test)

print('y_pred = ', y_test.data)


plt.subplot(241)
plt.title("SGD")
plt.plot(epoch_list,loss_SGD)
plt.ylabel('cost')
plt.xlabel('epoch')


plt.subplot(242)
plt.title("Adagrad")
plt.plot(epoch_list,loss_Adagrad)
plt.ylabel('cost')
plt.xlabel('epoch')


plt.subplot(243)
plt.title("Adam")
plt.plot(epoch_list,loss_Adam)
plt.ylabel('cost')
plt.xlabel('epoch')


plt.subplot(244)
plt.title("Adamax")
plt.plot(epoch_list,loss_Adamax)
plt.ylabel('cost')
plt.xlabel('epoch')


plt.subplot(245)
plt.title("ASGD")
plt.plot(epoch_list,loss_ASGD)
plt.ylabel('cost')
plt.xlabel('epoch')


plt.subplot(246)
plt.title("LBFGS")
plt.plot(epoch_list,loss_LBFGS)
plt.ylabel('cost')
plt.xlabel('epoch')

plt.subplot(247)
plt.title("RMSprop")
plt.plot(epoch_list,loss_RMSprop)
plt.ylabel('cost')
plt.xlabel('epoch')


plt.subplot(248)
plt.title("Rprop")
plt.plot(epoch_list,loss_Rprop)
plt.ylabel('cost')
plt.xlabel('epoch')
plt.show()

运行结果:

相关推荐
Gitpchy2 分钟前
Day 47 注意力热图可视化
python·深度学习·cnn
IT_陈寒2 分钟前
Redis 性能提升30%的7个关键优化策略,90%开发者都忽略了第3点!
前端·人工智能·后端
慕云紫英9 分钟前
投票理论(voting theory)(social choice theory)
人工智能·aigc
杜子不疼.32 分钟前
【Linux】进程状态全解析:从 R/S/D/T 到僵尸 / 孤儿进程
linux·人工智能·ai
草莓熊Lotso1 小时前
C++ STL map 系列全方位解析:从基础使用到实战进阶
java·开发语言·c++·人工智能·经验分享·网络协议·everything
zyplayer-doc1 小时前
升级表格编辑器,AI客服应用支持转人工客服,AI问答风格与性能优化,zyplayer-doc 2.5.6 发布啦!
人工智能·编辑器·飞书·开源软件·创业创新·有道云笔记
zhjadsf2 小时前
Huggingface_hub源码解析 - 简介篇
python·huggingface
20岁30年经验的码农2 小时前
Python语言基础文档
开发语言·python
清静诗意3 小时前
独立 IoT 客户端绕过 Django 生命周期导致数据库断链:诊断与修复
python·mysql·django·生命周期
~~李木子~~4 小时前
中文垃圾短信分类实验报告
人工智能·分类·数据挖掘