#优化模型 #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()
优化模型optim
最新推荐文章于 2024-02-27 11:03:42 发布