Pytorch實現神經網絡模型求解線性回歸


autograd 及Variable

Autograd: 自動微分

  autograd包是PyTorch中神經網絡的核心, 它可以為基於tensor的的所有操作提供自動微分的功能, 這是一個逐個運行的框架, 意味着反向傳播是根據你的代碼來運行的, 並且每一次的迭代運行都可能不同.

Variable

tensor是硬幣的話,那Variable就是錢包,它記錄着里面的錢的多少,和錢的流向

  • 詳細見https://zhuanlan.zhihu.com/p/34298983

線性回歸

"""
# @Time    :  2020/9/14
# @Author  :  Jimou Chen
"""
import numpy as np
import matplotlib.pyplot as plt
from torch import nn, optim
from torch.autograd import Variable
import torch
import os

os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'


# 構建神經網絡模型
class LinearRegression(nn.Module):
    # 定義網絡結構
    def __init__(self):
        super().__init__()  # 初始化父類
        # 全連接層
        self.fc = nn.Linear(1, 1)  # 輸入1個,輸出1個

    # 定義網絡計算,(前向的計算)
    def forward(self, x):
        # x 是整個網絡的輸入,傳給全連接層做計算
        output = self.fc(x)
        return output  # 返回輸出值


if __name__ == '__main__':
    # 隨機生成0-1內的100個數據
    x_data = np.random.rand(100)
    # 0-0.01內的噪點數據,尺寸和x_data一樣
    noise = np.random.normal(0, 0.01, x_data.shape)
    # print(noise.shape,x_data.shape)
    # 因變量
    y_data = x_data * 0.1 + 0.2 + noise
    print(y_data.shape)

    plt.scatter(x_data, y_data)
    plt.show()

    # 轉成2維
    x_data = x_data.reshape(-1, 1)
    y_data = y_data.reshape(-1, 1)

    # 把numpy類型轉成tensor
    x_data = torch.FloatTensor(x_data)
    y_data = torch.FloatTensor(y_data)
    # 轉換成pytorch環境里面的變量
    inputs = Variable(x_data)
    target = Variable(y_data)

    # 建模,神經網絡模型
    model = LinearRegression()
    # 定義代價函數,取均方差代價函數
    loss = nn.MSELoss()
    # 定義優化器,取梯度下降法,傳入模型參數和學習率
    optimizer = optim.SGD(model.parameters(), lr=0.1)
    # for name, param in model.named_parameters():
    #     print(name,param)

    # 訓練模型1000次
    for i in range(1000):
        out = model(inputs)
        # 計算loss
        mse_loss = loss(out, target)
        # 梯度清零
        optimizer.zero_grad()
        # 計算梯度
        mse_loss.backward()
        # 修改權值
        optimizer.step()
        if i % 200 == 0:
            print(i, mse_loss.item())

    predict = model(inputs)
    plt.scatter(x_data, y_data)
    plt.plot(x_data, predict.data.numpy(), 'r-', lw=3)
    plt.show()

D:\Anaconda\Anaconda3\python.exe D:/Appication/PyCharm/Git/computer-vision/PytorchLearning/LinearRegression/linear_regression.py
(100,)
0 0.1716347187757492
200 0.00019752216758206487
400 0.00011990861094091088
600 0.00011977301619481295
800 0.00011977282701991498

Process finished with exit code 0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM