一.准备数据集
先看公式:
所以,在写代码时,x,y要定义为矩阵。
模型要定义成一个继承自nn.Module的类:
二.使用类设计模型
call:
args & kwargs
三.构造损失和优化器
四.训练周期
**此处笔者有个小错误,输出应该是loss.item(),不然输出结果就如下图所示。
运行结果:
迭代了100次,还没有收敛,可以再多迭代几轮,也不要太多,以免模型过拟合。
整体代码:
import torch
x_data=torch.Tensor([[1.0],[2.0],[3.0]])
#3*1的矩阵,行是样本,列是feature
y_data=torch.Tensor([[2.0],[4.0],[6.0]])
class LinearModel(torch.nn.Module):
# nn.module公共基类
def __init__(self):
super(LinearModel,self).__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(size_average=False) #损失函数
optimizer=torch.optim.SGD(model.parameters(),lr=0.01)
#optim里的都是优化器,parameters可以找到所有参数
for epoch in range(100):
y_pred=model(x_data) #y_hat
loss=criterion(y_pred,y_data) #loss
print(epoch,loss.item())
optimizer.zero_grad() #梯度清零
loss.backward() #反馈
optimizer.step() #更新
print("w=",model.linear.weight.item())
print("b=",model.linear.bias.item())
#test model
x_test=torch.Tensor([[4.0]])
y_test=model(x_test)
print("y_pred=",y_test.data)