最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Pytorch 使用Pytorch擬合多項(xiàng)式(多項(xiàng)式回歸)

 更新時(shí)間:2018年05月24日 08:44:13   作者:ZhichaoDuan  
這篇文章主要介紹了詳解Pytorch 使用Pytorch擬合多項(xiàng)式(多項(xiàng)式回歸),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

使用Pytorch來(lái)編寫(xiě)神經(jīng)網(wǎng)絡(luò)具有很多優(yōu)勢(shì),比起Tensorflow,我認(rèn)為Pytorch更加簡(jiǎn)單,結(jié)構(gòu)更加清晰。

希望通過(guò)實(shí)戰(zhàn)幾個(gè)Pytorch的例子,讓大家熟悉Pytorch的使用方法,包括數(shù)據(jù)集創(chuàng)建,各種網(wǎng)絡(luò)層結(jié)構(gòu)的定義,以及前向傳播與權(quán)重更新方式。

比如這里給出

    

很顯然,這里我們只需要假定

這里我們只需要設(shè)置一個(gè)合適尺寸的全連接網(wǎng)絡(luò),根據(jù)不斷迭代,求出最接近的參數(shù)即可。

但是這里需要思考一個(gè)問(wèn)題,使用全連接網(wǎng)絡(luò)結(jié)構(gòu)是毫無(wú)疑問(wèn)的,但是我們的輸入與輸出格式是什么樣的呢?

只將一個(gè)x作為輸入合理嗎?顯然是不合理的,因?yàn)槊恳粋€(gè)神經(jīng)元其實(shí)模擬的是wx+b的計(jì)算過(guò)程,無(wú)法模擬冪運(yùn)算,所以顯然我們需要將x,x的平方,x的三次方,x的四次方組合成一個(gè)向量作為輸入,假設(shè)有n個(gè)不同的x值,我們就可以將n個(gè)組合向量合在一起組成輸入矩陣。

這一步代碼如下:

def make_features(x): 
 x = x.unsqueeze(1) 
 return torch.cat([x ** i for i in range(1,4)] , 1) 

我們需要生成一些隨機(jī)數(shù)作為網(wǎng)絡(luò)輸入:

def get_batch(batch_size=32): 
 random = torch.randn(batch_size) 
 x = make_features(random) 
 '''Compute the actual results''' 
 y = f(x) 
 if torch.cuda.is_available(): 
  return Variable(x).cuda(), Variable(y).cuda() 
 else: 
  return Variable(x), Variable(y) 

其中的f(x)定義如下:

w_target = torch.FloatTensor([0.5,3,2.4]).unsqueeze(1) 
b_target = torch.FloatTensor([0.9]) 
 
def f(x): 
 return x.mm(w_target)+b_target[0] 

接下來(lái)定義模型:

class poly_model(nn.Module): 
 def __init__(self): 
  super(poly_model, self).__init__() 
  self.poly = nn.Linear(3,1) 
 
 def forward(self, x): 
  out = self.poly(x) 
  return out 
if torch.cuda.is_available(): 
 model = poly_model().cuda() 
else: 
 model = poly_model() 

接下來(lái)我們定義損失函數(shù)和優(yōu)化器:

criterion = nn.MSELoss() 
optimizer = optim.SGD(model.parameters(), lr = 1e-3) 

網(wǎng)絡(luò)部件定義完后,開(kāi)始訓(xùn)練:

epoch = 0 
while True: 
 batch_x,batch_y = get_batch() 
 output = model(batch_x) 
 loss = criterion(output,batch_y) 
 print_loss = loss.data[0] 
 optimizer.zero_grad() 
 loss.backward() 
 optimizer.step() 
 epoch+=1 
 if print_loss < 1e-3: 
  break 

到此我們的所有代碼就敲完了,接下來(lái)我們開(kāi)始詳細(xì)了解一下其中的一些代碼。

在make_features()定義中,torch.cat是將計(jì)算出的向量拼接成矩陣。unsqueeze是作一個(gè)維度上的變化。

get_batch中,torch.randn是產(chǎn)生指定維度的隨機(jī)數(shù),如果你的機(jī)器支持GPU加速,可以將Variable放在GPU上進(jìn)行運(yùn)算,類(lèi)似語(yǔ)句含義相通。

x.mm是作矩陣乘法。

模型定義是重中之重,其實(shí)當(dāng)你掌握Pytorch之后,你會(huì)發(fā)現(xiàn)模型定義是十分簡(jiǎn)單的,各種基本的層結(jié)構(gòu)都已經(jīng)為你封裝好了。所有的層結(jié)構(gòu)和損失函數(shù)都來(lái)自torch.nn,所有的模型構(gòu)建都是從這個(gè)基類(lèi) nn.Module繼承的。模型定義中,__init__與forward是有模板的,大家可以自己體會(huì)。

nn.Linear是做一個(gè)線性的運(yùn)算,參數(shù)的含義代表了輸入層與輸出層的結(jié)構(gòu),即3*1;在訓(xùn)練階段,有幾行是Pytorch不同于別的框架的,首先loss是一個(gè)Variable,通過(guò)loss.data可以取出一個(gè)Tensor,再通過(guò)data[0]可以得到一個(gè)int或者float類(lèi)型的值,我們才可以進(jìn)行基本運(yùn)算或者顯示。每次計(jì)算梯度之前,都需要將梯度歸零,否則梯度會(huì)疊加。個(gè)人覺(jué)得別的語(yǔ)句還是比較好懂的,如果有疑問(wèn)可以在下方評(píng)論。

下面是我們的擬合結(jié)果

其實(shí)效果肯定會(huì)很好,因?yàn)橹皇且粋€(gè)非常簡(jiǎn)單的全連接網(wǎng)絡(luò),希望大家通過(guò)這個(gè)小例子可以學(xué)到Pytorch的一些基本操作。往后我們會(huì)繼續(xù)更新,完整代碼請(qǐng)戳,https://github.com/ZhichaoDuan/PytorchCourse

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

相關(guān)文章

  • pyecharts繪制儀表盤(pán)的實(shí)現(xiàn)

    pyecharts繪制儀表盤(pán)的實(shí)現(xiàn)

    有時(shí)候大家想把自己繪制好的可視化圖片集中到一個(gè)頁(yè)面,整合成儀表盤(pán),集中給同事或者他人來(lái)呈現(xiàn),但又不知道該怎么做,今天小編就來(lái)分享一個(gè)pyecharts繪制儀表盤(pán)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-06-06
  • 基于Python實(shí)現(xiàn)GeoServer矢量文件批量發(fā)布

    基于Python實(shí)現(xiàn)GeoServer矢量文件批量發(fā)布

    由于矢量圖層文件較多,手動(dòng)發(fā)布費(fèi)時(shí)費(fèi)力,python支持的關(guān)于geoserver包又由于年久失修,無(wú)法在較新的geoserver版本中正常使用。本文為大家準(zhǔn)備了Python自動(dòng)化發(fā)布矢量文件的代碼,需要的可以參考一下
    2022-07-07
  • Python matplotlib畫(huà)曲線例題解析

    Python matplotlib畫(huà)曲線例題解析

    這篇文章主要介紹了Python matplotlib畫(huà)曲線例題解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python執(zhí)行等待程序直到第二天零點(diǎn)的方法

    python執(zhí)行等待程序直到第二天零點(diǎn)的方法

    這篇文章主要介紹了python執(zhí)行等待程序直到第二天零點(diǎn)的方法,涉及Python等待程序的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-04-04
  • python中Pytest常用的插件

    python中Pytest常用的插件

    這篇文章主要介紹了python中Pytest常用的插件,Pytest是Python的一種單元測(cè)試框架,與unittest相比,使用起來(lái)更簡(jiǎn)潔、效率更高,也是目前大部分使用python編寫(xiě)測(cè)試用例的小伙伴們的第一選擇了
    2022-06-06
  • Selenium爬取b站主播頭像并以昵稱(chēng)命名保存到本地

    Selenium爬取b站主播頭像并以昵稱(chēng)命名保存到本地

    這篇文章主要介紹了使用Selenium自動(dòng)化爬取b站主播頭像并以昵稱(chēng)命名保存到本地的方法,代碼簡(jiǎn)單完整,對(duì)于大家練習(xí)Selenium自動(dòng)化有一定的幫助,需要的朋友可以參考下
    2021-04-04
  • jupyter notebook的安裝與使用詳解

    jupyter notebook的安裝與使用詳解

    這篇文章主要介紹了jupyter notebook的安裝與使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • python設(shè)置環(huán)境變量的原因和方法

    python設(shè)置環(huán)境變量的原因和方法

    在本篇文章中我們給大家整理了關(guān)于python為什么要設(shè)置環(huán)境變量的相關(guān)知識(shí)點(diǎn),有興趣的朋友們參考下。
    2019-06-06
  • python簡(jiǎn)單鼠標(biāo)自動(dòng)點(diǎn)擊某區(qū)域的實(shí)例

    python簡(jiǎn)單鼠標(biāo)自動(dòng)點(diǎn)擊某區(qū)域的實(shí)例

    今天小編就為大家分享一篇python簡(jiǎn)單鼠標(biāo)自動(dòng)點(diǎn)擊某區(qū)域的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • apache部署python程序出現(xiàn)503錯(cuò)誤的解決方法

    apache部署python程序出現(xiàn)503錯(cuò)誤的解決方法

    這篇文章主要給大家介紹了關(guān)于在apahce部署python程序出現(xiàn)503錯(cuò)誤的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)同樣遇到這個(gè)問(wèn)題的朋友們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-07-07

最新評(píng)論

巴塘县| 安仁县| 六枝特区| 莎车县| 鄂州市| 广汉市| 满洲里市| 疏勒县| 安龙县| 汉寿县| 和政县| 鹤壁市| 平罗县| 靖边县| 安塞县| 内丘县| 高青县| 城固县| 襄城县| 寿宁县| 无为县| 上虞市| 措勤县| 潮州市| 马尔康县| 册亨县| 灵丘县| 增城市| 临朐县| 昭觉县| 香港 | 锦屏县| 稻城县| 平阴县| 唐海县| 江津市| 繁峙县| 许昌县| 富平县| 宜君县| 泰兴市|