天天看點

5、使用PyTorch 實作線性回歸

視訊:​​《PyTorch深度學習實踐》完結合集_哔哩哔哩_bilibili​​

使用PyTorch 實作線性回歸(4步):

1、建構資料集

2、設計模型(使用類)

3、構造損失函數(loss)和優化器(optimizer)

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

5、使用PyTorch 實作線性回歸

1、準備資料

#1.準備資料,注意都是矩陣形式
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])      

2、設計模型

5、使用PyTorch 實作線性回歸

(使用torcn.nn下的Linear模型)

2.設計模型(類) 繼承nn.Module 以便使用其方法
class LinearModel(torch.nn.Module):

    #初始化
    def __init__(self):
        super(LinearModel,self).__init__()
        self.linear = torch.nn.Linear(1,1) #Linear是一個線性單元

    #前饋方法
    def forward(self, x):
        y_pred = self.linear(x)   #實際上調用對象linear的__call__()方法,linear的__call__()方法執行forward前饋
        return y_pred

model = LinearModel()      

3、損失和優化器

#3 loss 和 optimizer(優化器)
criterion = torch.nn.MSELoss(size_average=False) #不需要求均值
# 優化器。 model.parameters()擷取模型中需要優化的參數,lr(learning rate,學習率)
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)      

4、訓練

#4 訓練過程
for epoch in range(100):
    #前饋
    y_pred = model(x_data)
    #計算損失
    loss = criterion(y_pred,y_data)
    print("epoch={},loss={}".format(epoch,loss))

    optimizer.zero_grad()#歸零
    #反向傳播
    loss.backward()
    #更新、優化參數
    optimizer.step()      
import torch

#1.準備資料,注意都是矩陣形式
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])

#2.設計模型(類) 繼承nn.Module 以便使用其方法
class LinearModel(torch.nn.Module):

    #初始化
    def __init__(self):
        super(LinearModel,self).__init__()
        self.linear = torch.nn.Linear(1,1) #Linear是一個線性單元

    #前饋方法
    def forward(self, x):
        y_pred = self.linear(x)   #實際上調用對象linear的__call__()方法,linear的__call__()方法執行forward前饋
        return y_pred

model = LinearModel()

#3 loss 和 optimizer(優化器)
criterion = torch.nn.MSELoss(size_average=False) #不需要求均值
# 優化器。 model.parameters()擷取模型中需要優化的參數,lr(learning rate,學習率)
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)



#4 訓練過程
for epoch in range(100):
    #前饋
    y_pred = model(x_data)
    #計算損失
    loss = criterion(y_pred,y_data)
    print("epoch={},loss={}".format(epoch,loss))

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


#Test, 檢視模型參數及測試訓練效果
print('w={}'.format(model.linear.weight.item()))
print('b={}'.format(model.linear.bias.item()))
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = {} for x = {}'.format(y_test.data,x_test.data))