优化模型optim

#优化模型
#optim包中提供了非常多的可实现参数自动优化的类,比如SGD、AdaGrad、RMSProp、Adam等,这些类都可以被直接调用
import torch
from torch.autograd import Variable
from collections import OrderedDict  #orderdict有序字典 模型中使用
# 批量输入的数据量
batch_n = 100
# 输入数据的特征个数
input_data = 1000
# 通过隐藏层后输出的特征数
hidden_layer = 100
# 最后输出的分类结果数
output_data = 10

#如果requires_grad的值是False,那么表示该变量在进行自动梯度计算的过程中不会保留梯度值
x = Variable(torch.randn(batch_n, input_data), requires_grad=False)
y = Variable(torch.randn(batch_n, output_data), requires_grad=False)
models = torch.nn.Sequential(OrderedDict([
    ("Linel",torch.nn.Linear(input_data,hidden_layer)),
    ("ReLU1",torch.nn.ReLU()),
    ("Line2",torch.nn.Linear(hidden_layer,output_data))
])
)
print(models)

epoch_n = 50
learning_rate = 1e-4

loss_fn = torch.nn.MSELoss()
#Adam类中输入的是被优化的参数和学习速率的初始值
#如果没有输入学习速率的初始值,那么默认使用0.001这个值
optimzer = torch.optim.Adam(models.parameters(),lr = learning_rate)

# 进行模型训练
for epoch in range(epoch_n):
    y_pred = models(x)
    loss = loss_fn(y_pred, y)
    print("Epoch:{}, Loss:{:.4f}".format(epoch, loss.data))
    #直接调用optimzer.zero_grad来完成对模型参数梯度的归零
    optimzer.zero_grad()

    loss.backward()

    # 使用计算得到的梯度值对各个节点的参数进行梯度更新
    optimzer.step()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值