课后作业
模型训练四大步:数据集、设计模型、损失和优化器、训练次数
课上代码
损失函数:MSELoss
优化器:SGD
单一线性层模型
import torch
import matplotlib.pyplot as plt
x_data = torch.Tensor([[1.],[2.],[3.]])
y_data = torch.Tensor([[2.],[4.],[6.]])
class LinearModel(torch.nn.Module): #定义只有一层线性层的神经网络
def __init__(self):
super(LinearModel,self).__init__()
self.linear = torch.nn.Linear(1,1) #x和y都是一维
def forward(self,x):
y_hat = self.linear(x)
return y_hat
model = LinearModel()
lossf = torch.nn.MSELoss(size_average=False) #损失函数
optimzer = torch.optim.SGD(model.parameters(),lr=0.001) #优化器
#不同优化器的选择,只需要把SGD改成其他的优化器即可
loss_all = []
epoch_all = []
for epoch in range(10000):
y_pred = model(x_data) #得到y_hat
loss = lossf(y_pred,y_data) #调用MSELoss得到损失
print("epoch:",epoch,"\tloss:",loss.item())
epoch_all.append(epoch)
loss_all.append(loss)
optimzer.zero_grad()#梯度清除
loss.backward() #反向传播
optimzer.step() #更新参数
plt.plot(loss_all,epoch_all) #绘图
plt.ylabel('loss Value')
plt.xlabel('Epoch')
plt.show()
测试一下效果
test = torch.Tensor([[8.]])
print("predect:",8,model(test).item()) #看下预测x=8时,y的值是多少
"""
predect: 8 15.99902629852295
"""
效果还可以,和16很接近了。