仅仅用于自己记录pytorch学习记录
线性回归模型
(1)准备数据集
数据:三个数据x=[x1,x2,x3] y=[y1,y2,y3]
import torch
#线性回归,我们使用三组数据,分别是(1,2),(2,4),(3,6)
x_data = torch.tensor([[1.0],[2.0],[3.0]])
y_data = torch.tensor([[2.0],[4.0],[6.0]])
(2)设计模块
所有模块都是继承与nn.moudle类别
关于nn.Linear()用法,可以参考这个篇文章,因为我们输入神经元的个数为1(即一个点的x轴坐标),输出神经元个数也是1(wx+b的值)
用法参考
我们自己定义有个线性回归类,这个类继承于torch.nn.module这个类类别必须要重载init函数和forward函数,一个负责类的初始化(相当于构造),一个负责前向传播super().init()必须要有的。
class LinearModel(torch.nn.Module):
def __init__(self):
#调用父类的构造__init__()
super(LinearModel,self).__init__()
#构造对象,linear是Linear()的实例化对象,帮我们完成wx+b的计算
#输入神经元1个,输出神经元也是1个,输入一个点的x轴坐标,输出一个wx+b的预测值y
self.linear =torch.nn.Linear(1,1)
def forward(self,x):
#一个初始化类带参数,表明其是callbale的,即__callable__()
y_pred=self.linear(x)
return y_pred
(3)建立损失和优化器
#实例化自己的模型
model =LinearModel()
#构建定义损失函数
criterion =torch.nn.MSELoss(size_average =False)
#构建定义优化器,使用SGD下降
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
(4)开始训练
其中step函数是用来更新
#构建定义优化器,使用SGD下降
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
for epoch in range(100):
#先算预测值
y_pred=model(x_data)
#计算损失
loss=criterion(y_pred,x_data)
print(epoch,loss.item())
#梯度回0,pytorch里面必须要有的步骤
optimizer.zero_grad()
#权重传播
loss.backward()
#更新
optimizer.step()
(5)打印结果展示
#linear里面的权重w和偏置b打印出来,必须要有这个函数
print("w= ",model.linear.weight.item())
print("w= ",model.linear.bias.item())
(6)测试模型
#数据测试
x_test=torch.tensor([4.0])
y_test=model(x_test)
#取出训练好的预测值
print(y_test.data)
大家也可以试一试其他的优化器
全部代码
import torch
x_data = torch.tensor([[1.0],[2.0],[3.0]])
y_data = torch.tensor([[2.0],[4.0],[6.0]])
class LinearModel(torch.nn.Module):
def __init__(self):
#调用父类的构造__init__()
super(LinearModel,self).__init__()
#构造对象,linear是Linear()的实例化对象,帮我们完成wx+b的计算
#输入神经元1个,输出神经元也是1个,输入一个点的x轴坐标,输出一个wx+b的预测值y
self.linear =torch.nn.Linear(1,1)
def forward(self,x):
#一个初始化类带参数,表明其是callbale的,即__callable__()
y_pred=self.linear(x)
return y_pred
#实例化自己的模型
model =LinearModel()
#构建定义损失函数
criterion =torch.nn.MSELoss(size_average =False)
#构建定义优化器,使用SGD下降
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
for epoch in range(100):
#先算预测值
y_pred=model(x_data)
#计算损失
loss=criterion(y_pred,x_data)
print(epoch,loss.item())
#梯度回0,pytorch里面必须要有的步骤
optimizer.zero_grad()
#权重传播
loss.backward()
#更新
optimizer.step()
#linear里面的权重w和偏置b打印出来,必须要有这个函数
print("w= ",model.linear.weight.item())
print("w= ",model.linear.bias.item())
#数据测试
x_test=torch.tensor([4.0])
y_test=model(x_test)
#取出训练好的预测值
print(y_test.data)