05-用pytorch实现线性回归
回归
线性模型
损失函数

训练步骤:

数据
在PyTorch中,计算图是小批量的,所以$X$和$Y$是$3 \times 1$张量。
import torch
import numpy as np
data = np.array([
    [1.0,2.0],
    [2.0,4.0],
    [3.0,6.0]
])
data = torch.Tensor(data)
x_data,y_data = data[:,:-1],data[:,-1]
x_data,y_data
设计模型
在以前的学习中,重点是求导数,现在学习pytorch后,重点是如何构造计算图。
class LinearModel(torch.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
    
lm = LinearModel()首先我们的模型类应该继承自nn.Module,它是所有神经网络模块的基类。
class LinearModel(torch.nn.Module):
	...然后必须实现成员方法__init__()和forward()
class LinearModel(torch.nn.Module):
    def __init__(self,):
        super(LinearModel,self).__init__()
        ...
        
    def forward(self,x):
		...构造nn.Linear对象,类nn.Linear包含了权重$w$和偏置$b$。
self.linear = torch.nn.Linear(1,1)
类神经网络。Linear实现了神奇的__call__()方法,使类的实例可以像函数一样被调用,且通常会调用forward()。
    def forward(self,x):
        y_pred = self.linear(x) # 里面做了wx+b的运算
        return y_pred损失函数和优化器
criterion = torch.nn.MSELoss(reduction='sum') # 损失函数
optimizer = torch.optim.SGD(lm.parameters(),lr=0.01) # 优化器损失函数


torch.optim.Adagrad
torch.optim.Adam
torch.optim.Adamax
torch.optim.ASGD
torch.optim.RMSprop
* torch.optim.Rprop
torch.optim.SGD前馈与反馈
for epoch in range(100):
    y_pred = lm(x_data)
    loss = criterion(y_pred,y_data)
    print(epoch,loss)
    
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()注意:由于
.backward()计算的级将被累积。所以在使用backward之前,请记住将grad设置为0!
输出权重与偏置
print("w=",lm.linear.weight.item())
print("b=",lm.linear.bias.item())测试数据
x_test = torch.Tensor([[4.0]])
y_test = lm(x_test)
print("y_pred=",y_test.data)
最后更新于
这有帮助吗?
