在PyTorch的torch.optim包中提供了非常多的可实现参数自动优化的优化器,比如SGD、AdaGrad、RMSProp、Adam等, 这些类都可以被直接调用,使用起来也非常方便。
具体的调用为:
一:torch.optim.对应优化器
optimizer = torch.optim.Adam(models.parameters(),lr = learning_rate)
models.Parameters()直接调用我们训练网络中的models的参数
其中learning_rate如果没有设置的话就默认为0.001
二:optimizer.step()
在训练过程中可以添加optimizer.step()来对我们的计算得到的梯度值对各个节点的参数进行梯度更新。
optimizer.step()
最终代码:
import torch
from torch.autograd import Variable
input_data = 1000
output_data = 10
hidden_layer = 100
learning_rate = 1e-4
batch_n = 100
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(
torch.nn.Linear(input_data,hidden_layer),
torch.nn.ReLU(),
torch.nn.Linear(hidden_layer,output_data)
)
loss_fn = torch.nn.MSELoss()
epoch_n = 30
optimizer = 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.item()))
optimizer.zero_grad()
loss.backward()
optimizer.step()