PyTorch深度学习实践——用pytorch实现线性回归

参考资料

参考资料1:https://blog.csdn.net/bit452/article/details/109677086
参考资料2:http://biranda.top/Pytorch%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0005%E2%80%94%E2%80%94%E5%8F%8D%E5%90%91%E4%BC%A0%E6%92%AD%E7%AE%97%E6%B3%95/#%E9%97%AE%E9%A2%98%E6%8F%90%E5%87%BA

用pytorch实现线性回归

PyTorch深度学习实践——用pytorch实现线性回归_第1张图片
PyTorch深度学习实践——用pytorch实现线性回归_第2张图片
代码:

import torch
#数据作为矩阵参与Tensor计算,3×1的矩阵,行是3,行是样本数,列是1,列是特征数。
x_data = torch.Tensor([[1.0],
                       [2.0],
                       [3.0]])
y_data = torch.Tensor([[2.0],
                       [4.0],
                       [6.0]])

#固定继承于Module
class LinearModel(torch.nn.Module):
    #构造函数初始化
    def __init__(self):
        #调用父类的init
        super(LinearModel, self).__init__()
        #Linear对象包括weight(w)以及bias(b)两个成员张量
        #Applies a linear transformation to the incoming data: y = Ax+ b
        #class torch.nn.Linear(in_features, out_features, bias=True),输入数据特征数,输出数据特征数,是否有bias(默认有)
        self.linear = torch.nn.Linear(1,1)#Class nn.Linear contain two member Tensors: weight and bias.

    #前馈函数forward,对父类函数中的overwrite
    def forward(self, x):
        #x={Tensor:(3,1)}
        y_pred = self.linear(x)#linear也是继承于module,是可call的。
        # 这里self.linear(x)是调用linear中的__call__(),__call__()函数中调用其forward()计算wx+b
        return y_pred
    #反馈函数backward由module自动根据计算图生成

#构建model
model = LinearModel()

#构造的criterion对象所接受的参数为(y',y)
#求均方误差(mean square error, MSE)
criterion = torch.nn.MSELoss(reduction='sum')#loss求和,'sum': the output will be summed.
#model.parameters()用于检查模型中所能进行优化的张量
#learningrate(lr)表学习率,可以统一也可以不统一
#optimizer优化器不会构成计算图
#optimizer = torch.optim.SGD(model.parameters(), lr=0.01) #SGD是随机梯度下降
optimizer = torch.optim.Rprop(model.parameters(), lr=0.01)#Rprop是最好模型对于这个训练来说

for epoch in range(100):
    #x_data={Tensor:(3,1)},y_data={Tensor:(3,1)},y_pred={Tensor:(3,1)},
    y_pred = model(x_data)#前馈计算y_pred
    loss = criterion(y_pred,y_data)#前馈计算损失loss
    print(epoch,loss.item()) #打印调用loss时调用item(),loss此时是标量
    optimizer.zero_grad()#梯度清零
    loss.backward() #梯度反向传播
    optimizer.step()#根据传播的梯度以及学习率更新参数

#Output
#输出w和 b
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())

#TestModel
#预测输入 4 ,输出多少
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)

print('y_pred = ',y_test.data)

结果:
PyTorch深度学习实践——用pytorch实现线性回归_第3张图片

你可能感兴趣的:(PyTorch,深度学习实践,深度学习,pytorch)