天天看點

【PyTorch深度學習實踐】第5講 用Pytorch實作線性回歸

視訊位址:[https://www.bilibili.com/video/BV1Y7411d7Ys?p=5]

實作步驟:

1.準備資料集

2.設計資料模型,前向傳播計算預測值

3.構造損失函數(目的為反向傳播)和優化器(更新梯度)

4.訓練周期(前饋、回報、更新)

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):
        super(LinearModel, self).__init__()
        # 第一個參數輸入次元 第二個參數輸出次元
        self.linear = torch.nn.Linear(1, 1)
    # 前饋
    def forward(self, x):
        # 繼承 _call_(),實際上調用
        y_pred = self.linear(x)
        return y_pred

model = LinearModel()

criterion = torch.nn.MSELoss(reduction='sum')
# 優化器 model.parameters()擷取模型中需要優化的參數
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 訓練
for epoch in range(100):
    # 前饋
    y_pred = model(x_data)
    # 損失
    loss = criterion(y_pred, y_data)
    print(epoch, loss.item())

    # 梯度清零
    optimizer.zero_grad()
    # 反向傳播
    loss.backward()
    # 更新優化參數
    optimizer.step()

    print('w=', model.linear.weight.item())
    print('b=', model.linear.bias.item())

x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred=', y_test.data)