溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于Pytorch的神經網絡如何實現Regression

發布時間:2022-03-15 12:46:32 來源:億速云 閱讀:213 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關基于Pytorch的神經網絡如何實現Regression,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

    1.引言

    我們之前已經介紹了神經網絡的基本知識,神經網絡的主要作用就是預測與分類,現在讓我們來搭建第一個用于擬合回歸的神經網絡吧。

    2.神經網絡搭建

    2.1 準備工作

    要搭建擬合神經網絡并繪圖我們需要使用python的幾個庫。

    import torch
    import torch.nn.functional as F
    import matplotlib.pyplot as plt
     
    x = torch.unsqueeze(torch.linspace(-5, 5, 100), dim=1)
    y = x.pow(3) + 0.2 * torch.rand(x.size())

     既然是擬合,我們當然需要一些數據啦,我選取了在區間 基于Pytorch的神經網絡如何實現Regression 內的100個等間距點,并將它們排列成三次函數的圖像。

    2.2 搭建網絡

    我們定義一個類,繼承了封裝在torch中的一個模塊,我們先分別確定輸入層、隱藏層、輸出層的神經元數目,繼承父類后再使用torch中的.nn.Linear()函數進行輸入層到隱藏層的線性變換,隱藏層也進行線性變換后傳入輸出層predict,接下來定義前向傳播的函數forward(),使用relu()作為激活函數,最后輸出predict()結果即可。

    class Net(torch.nn.Module):
        def __init__(self, n_feature, n_hidden, n_output):
            super(Net, self).__init__()
            self.hidden = torch.nn.Linear(n_feature, n_hidden)
            self.predict = torch.nn.Linear(n_hidden, n_output)
        def forward(self, x):
            x = F.relu(self.hidden(x))
            return self.predict(x)
    net = Net(1, 20, 1)
    print(net)
    optimizer = torch.optim.Adam(net.parameters(), lr=0.2)
    loss_func = torch.nn.MSELoss()

    網絡的框架搭建完了,然后我們傳入三層對應的神經元數目再定義優化器,這里我選取了Adam而隨機梯度下降(SGD),因為它是SGD的優化版本,效果在大部分情況下比SGD好,我們要傳入這個神經網絡的參數(parameters),并定義學習率(learning rate),學習率通常選取小于1的數,需要憑借經驗并不斷調試。最后我們選取均方差法(MSE)來計算損失(loss)。

    2.3 訓練網絡

    接下來我們要對我們搭建好的神經網絡進行訓練,我訓練了2000輪(epoch),先更新結果prediction再計算損失,接著清零梯度,然后根據loss反向傳播(backward),最后進行優化,找出最優的擬合曲線。

    for t in range(2000):
        prediction = net(x)
        loss = loss_func(prediction, y)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    3.效果

    使用如下繪圖的代碼展示效果。

    for t in range(2000):
        prediction = net(x)
        loss = loss_func(prediction, y)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        if t % 5 == 0:
            plt.cla()
            plt.scatter(x.data.numpy(), y.data.numpy(), s=10)
            plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=2)
            plt.text(2, -100, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 10, 'color': 'red'})
            plt.pause(0.1)
    plt.ioff()
    plt.show()

    基于Pytorch的神經網絡如何實現Regression

    基于Pytorch的神經網絡如何實現Regression

    最后的結果: 

    基于Pytorch的神經網絡如何實現Regression

    4. 完整代碼

    import torch
    import torch.nn.functional as F
    import matplotlib.pyplot as plt
     
    x = torch.unsqueeze(torch.linspace(-5, 5, 100), dim=1)
    y = x.pow(3) + 0.2 * torch.rand(x.size())
    class Net(torch.nn.Module):
        def __init__(self, n_feature, n_hidden, n_output):
            super(Net, self).__init__()
            self.hidden = torch.nn.Linear(n_feature, n_hidden)
            self.predict = torch.nn.Linear(n_hidden, n_output)
        def forward(self, x):
            x = F.relu(self.hidden(x))
            return self.predict(x)
    net = Net(1, 20, 1)
    print(net)
    optimizer = torch.optim.Adam(net.parameters(), lr=0.2)
    loss_func = torch.nn.MSELoss()
    plt.ion()
    for t in range(2000):
        prediction = net(x)
        loss = loss_func(prediction, y)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        if t % 5 == 0:
            plt.cla()
            plt.scatter(x.data.numpy(), y.data.numpy(), s=10)
            plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=2)
            plt.text(2, -100, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 10, 'color': 'red'})
            plt.pause(0.1)
    plt.ioff()
    plt.show()

    關于“基于Pytorch的神經網絡如何實現Regression”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女