3_linear_regression

線性迴歸

import torch
from torch.autograd import Variable
import torch.nn as nn


class Model(nn.Module):
	'''
	構造損失函數和優化器。
	在SGD構造函數中對model.parameters()的調用將包含作爲模型成員的兩個			nn.Linear模塊的可學習參數。
	'''
    def __init__(self):
        super(Model, self).__init__()
        self.linear = nn.Linear(1, 1)

    def forward(self, x):
        y_pred = self.linear(x)
        return y_pred

    def run(self):
        model = Model()
        # 損失函數
        criterion = nn.MSELoss(reduction='sum')
        # 優化器
        optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

        for epoch in range(500):
            y_pred = model(x_data)
            loss = criterion(y_pred, y_data)
            print(epoch, loss.item())
            # 執行反向傳播並更新權重後置零梯度。
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

        hour_var = Variable(torch.Tensor([[4.0]]))
        y_pred = model(hour_var)
        print('predict (after training)', 4, model(hour_var).data[0][0])


if __name__ == "__main__":
    print("Life is short, You need Python!")
    x_data = Variable(torch.Tensor([[1.0], [2.0], [3.0]]))
    y_data = Variable(torch.Tensor([[2.0], [4.0], [6.0]]))
    m = Model()
    m.run()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章