不同优化器的应用

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

深度学习中的优化器原理(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()

运行结果:

相关推荐
Salt_07281 分钟前
DAY33 类的装饰器
python·算法·机器学习
song5012 分钟前
鸿蒙 Flutter CI/CD 进阶:Jenkins + 鸿蒙打包自动化流程
分布式·python·flutter·3d·ci/cd·分类
无妄无望3 分钟前
思维链:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
人工智能·语言模型·自然语言处理
岁月蹉跎的一杯酒3 分钟前
Clion opencv C++无法直接读取本地图像
c++·人工智能·opencv
阿杰学AI3 分钟前
AI核心知识49——大语言模型之Model Collapse(简洁且通俗易懂版)
人工智能·ai·语言模型·aigc·ai训练·模型崩溃·model collapse
虹科网络安全5 分钟前
艾体宝洞察 | “顶会”看安全(三):Black hat-从底层突破AI安全 :利用 NVIDIA 漏洞实现容器逃逸
人工智能·安全
●VON5 分钟前
AI辅助学习如何避免依赖陷阱?
人工智能·学习
XiaoMu_0015 分钟前
基于深度学习的文物图像修复系统
人工智能·深度学习
点云SLAM6 分钟前
Incisive英文单词学习
人工智能·学习·英文单词学习·雅思备考·incisive·犀利的、有洞察力的·直击核心、犀利有力、分析深刻
LiYingL6 分钟前
OctoThinker 通过改进 Llama 来支持强化学习,展示了中间学习的威力
人工智能·学习·llama