欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

pytorch實(shí)現(xiàn)多項(xiàng)式回歸

 更新時(shí)間:2021年04月09日 17:33:03   作者:逝去〃年華  
這篇文章主要為大家詳細(xì)介紹了pytorch實(shí)現(xiàn)多項(xiàng)式回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

pytorch實(shí)現(xiàn)多項(xiàng)式回歸,供大家參考,具體內(nèi)容如下

一元線性回歸模型雖然能擬合出一條直線,但精度依然欠佳,擬合的直線并不能穿過每個(gè)點(diǎn),對于復(fù)雜的擬合任務(wù)需要多項(xiàng)式回歸擬合,提高精度。多項(xiàng)式回歸擬合就是將特征的次數(shù)提高,線性回歸的次數(shù)使一次的,實(shí)際我們可以使用二次、三次、四次甚至更高的次數(shù)進(jìn)行擬合。由于模型的復(fù)雜度增加會帶來過擬合的風(fēng)險(xiǎn),因此需要采取正則化損失的方式減少過擬合,提高模型泛化能力。希望大家可以自己動手,通過一些小的訓(xùn)練掌握pytorch(案例中有些觀察數(shù)據(jù)格式的代碼,大家可以自己注釋掉)

# 相較于一元線性回歸模型,多項(xiàng)式回歸可以很好的提高擬合精度,但要注意過擬合風(fēng)險(xiǎn)
# 多項(xiàng)式回歸方程 f(x) = -1.13x-2.14x^2+3.12x^3-0.01x^4+0.512
import torch
import matplotlib.pyplot as plt
import numpy as np
# 數(shù)據(jù)準(zhǔn)備(測試數(shù)據(jù))
x = torch.linspace(-2,2,50)
print(x.shape)
y = -1.13*x - 2.14*torch.pow(x,2) + 3.15*torch.pow(x,3) - 0.01*torch.pow(x,4) + 0.512
plt.scatter(x.data.numpy(),y.data.numpy())
plt.show()

# 此時(shí)輸入維度為4維
# 為了拼接輸入數(shù)據(jù),需要編寫輔助數(shù)據(jù),輸入標(biāo)量x,使其變?yōu)榫仃?,使用torch.cat拼接
def features(x): # 生成矩陣
    # [x,x^2,x^3,x^4]
    x = x.unsqueeze(1)
    print(x.shape)
    return torch.cat([x ** i for i in range(1,5)], 1)
result = features(x)
print(result.shape)
# 目標(biāo)公式用于計(jì)算輸入特征對應(yīng)的標(biāo)準(zhǔn)輸出
# 目標(biāo)公式的權(quán)重如下
x_weight = torch.Tensor([-1.13,-2.14,3.15,-0.01]).unsqueeze(1)
b = torch.Tensor([0.512])
# 得到x數(shù)據(jù)對應(yīng)的標(biāo)準(zhǔn)輸出
def target(x):
    return x.mm(x_weight) + b.item()

# 新建一個(gè)隨機(jī)生成輸入數(shù)據(jù)和輸出數(shù)據(jù)的函數(shù),用于生成訓(xùn)練數(shù)據(jù)

def get_batch_data(batch_size):
    # 生成batch_size個(gè)隨機(jī)的x
    batch_x = torch.randn(batch_size)
    # 對于每個(gè)x要生成一個(gè)矩陣
    features_x = features(batch_x)
    target_y = target(features_x)
    return features_x,target_y

# 創(chuàng)建模型
class PolynomialRegression(torch.nn.Module):
    def __init__(self):
        super(PolynomialRegression, self).__init__()
        # 輸入四維度 輸出一維度
        self.poly = torch.nn.Linear(4,1)

    def forward(self, x):
        return self.poly(x)

# 開始訓(xùn)練模型
epochs = 10000
batch_size = 32
model = PolynomialRegression()
criterion = torch.nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(),0.001)

for epoch in range(epochs):
    print("{}/{}".format(epoch+1,epochs))
    batch_x,batch_y = get_batch_data(batch_size)
    out = model(batch_x)
    loss = criterion(out,batch_y)
    optimizer.zero_grad()
    loss.backward()
    # 更新梯度
    optimizer.step()
    if (epoch % 100 == 0):
        print("Epoch:[{}/{}],loss:{:.6f}".format(epoch,epochs,loss.item()))
    if (epoch % 1000 == 0):
        predict = model(features(x))
        print(x.shape)
        print(predict.shape)
        print(predict.squeeze(1).shape)
        plt.plot(x.data.numpy(),predict.squeeze(1).data.numpy(),"r")
        loss = criterion(predict,y)
        plt.title("Loss:{:.4f}".format(loss.item()))
        plt.xlabel("X")
        plt.ylabel("Y")
        plt.scatter(x,y)
        plt.show()

擬合結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Windows和Linux下Python輸出彩色文字的方法教程

    Windows和Linux下Python輸出彩色文字的方法教程

    這篇文章主要介紹了在Windows和Linux中Python輸出彩色文字的方法,通過設(shè)置彩色文字給大家更醒目的效果,文中給出了詳細(xì)的介紹和示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-05-05
  • python suds訪問webservice服務(wù)實(shí)現(xiàn)

    python suds訪問webservice服務(wù)實(shí)現(xiàn)

    這篇文章主要介紹了python suds訪問webservice服務(wù)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Python+OpenCV實(shí)現(xiàn)鼠標(biāo)畫瞄準(zhǔn)星的方法詳解

    Python+OpenCV實(shí)現(xiàn)鼠標(biāo)畫瞄準(zhǔn)星的方法詳解

    所謂瞄準(zhǔn)星指的是一個(gè)圓圈加一個(gè)圓圈內(nèi)的十字線,就像玩射擊游戲狙擊槍開鏡的樣子一樣。本文將利用Python+OpenCV實(shí)現(xiàn)鼠標(biāo)畫瞄準(zhǔn)星,感興趣的可以嘗試一下
    2022-08-08
  • jupyter?notebook?中使用ipython?魔法指令的詳細(xì)過程

    jupyter?notebook?中使用ipython?魔法指令的詳細(xì)過程

    在?Jupyter?Notebook?中,IPython?魔法指令為數(shù)據(jù)分析和探索提供了很多便利,這篇文章主要介紹了jupyter?notebook?中使用ipython?魔法指令的詳細(xì)過程,需要的朋友可以參考下
    2024-06-06
  • Python中Parsel的兩種數(shù)據(jù)提取方式詳解

    Python中Parsel的兩種數(shù)據(jù)提取方式詳解

    在網(wǎng)絡(luò)爬蟲的世界中,數(shù)據(jù)提取是至關(guān)重要的一環(huán),Python 提供了許多強(qiáng)大的工具,其中之一就是 parsel 庫,下面我們就來深入學(xué)習(xí)一下Parsel的兩種數(shù)據(jù)提取方式吧
    2023-12-12
  • python的函數(shù)最詳解

    python的函數(shù)最詳解

    這篇文章主要介紹了詳解python中各種的函數(shù),是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • Python3.5裝飾器典型案例分析

    Python3.5裝飾器典型案例分析

    這篇文章主要介紹了Python3.5裝飾器,結(jié)合實(shí)例形式分析了裝飾器修飾有參數(shù)函數(shù)、裝飾器修飾函數(shù)參數(shù)等情況相關(guān)使用技巧,需要的朋友可以參考下
    2019-04-04
  • python如何寫try語句

    python如何寫try語句

    在本篇文章里小編給大家整理的是一篇關(guān)于python寫try語句的方法相關(guān)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。
    2020-07-07
  • Django+Bootstrap實(shí)現(xiàn)計(jì)算器的示例代碼

    Django+Bootstrap實(shí)現(xiàn)計(jì)算器的示例代碼

    本文主要介紹了Django+Bootstrap實(shí)現(xiàn)計(jì)算器的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 基于PyQt5自制簡單的文件內(nèi)容檢索小工具

    基于PyQt5自制簡單的文件內(nèi)容檢索小工具

    這篇文章主要為大家詳細(xì)介紹了如何基于PyQt5自制一個(gè)簡單的文件內(nèi)容檢索小工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05

最新評論