之前的文章有提到,pytorch的入門讓人無比愉悅的。但畢竟是深度學(xué)習(xí),我說的門檻是和tensorflow比,本身深度學(xué)習(xí)對(duì)于微積分,線性代數(shù)和概率論還是有一定要求的。當(dāng)然,還是那句話,其實(shí)深度學(xué)習(xí)涉及的數(shù)學(xué)原理,比什么SVM,CRF要簡單太多,而且深度學(xué)習(xí)的變化和應(yīng)用場景比前者要多得多,所以學(xué)習(xí)深度學(xué)習(xí)是很有意義的。 很多官方或非官方的demo,都是長篇大論,因?yàn)橐菔疽粋€(gè)例子,需要準(zhǔn)備數(shù)據(jù),其實(shí)大部分的代碼是在準(zhǔn)備數(shù)據(jù),預(yù)處理,與深度學(xué)習(xí)本身沒有太大關(guān)系。這樣看起來不直觀,把初學(xué)者都給嚇住了。所以,打算寫一個(gè)入門系列,就是手動(dòng)造一些簡單的數(shù)據(jù),就是為了演示用。 本文要實(shí)現(xiàn)線性函數(shù)的擬合,就是比如y = 2*x+3這樣的線性函數(shù)。首先標(biāo)準(zhǔn)的步驟,導(dǎo)入torch和Variable。 import torch 然后準(zhǔn)備簡單的數(shù)據(jù),x=1,2,3, y = 2,4,6, 線性關(guān)系就是y=2*x。注意這里的tensor是3行一列,然后轉(zhuǎn)為Variable。 x_data = Variable(torch.Tensor([[1.0],[2.0],[3.0]])) 然后就可以定義網(wǎng)絡(luò)了,所有的模型都需要繼承自nn.Module。然后定義一個(gè)線性層,參數(shù)為1,1。實(shí)現(xiàn)forward函數(shù),用作訓(xùn)練迭代。 import torch.nn as nn 直接實(shí)例化模型,并定義損失函數(shù),這里按我們高數(shù)里學(xué)的,使用最小二乘法。然后使用隨機(jī)梯度下降對(duì)所有可優(yōu)化參數(shù)進(jìn)行優(yōu)化,lr是learning_rate學(xué)習(xí)速率,也就是梯度變化步長。 model = Model() params = model.parameters() 開發(fā)循環(huán)迭代500次,用x_data通過model得到y(tǒng)_pred,也是一個(gè)3x1的矩陣。然后通過criterion求loss值。 for epoch in range(500): optimizer.zero_grad() 這里值得注意就是每個(gè)epoch,梯度都要?dú)w零。 print('訓(xùn)練完成!') 最后使用訓(xùn)練好的模型去測(cè)試,看下結(jié)果: 訓(xùn)練完成! x_test:4,預(yù)測(cè)值為7.975748 關(guān)于作者:魏佳斌,互聯(lián)網(wǎng)產(chǎn)品/技術(shù)總監(jiān),北京大學(xué)光華管理學(xué)院(MBA),特許金融分析師(CFA),資深產(chǎn)品經(jīng)理/碼農(nóng)。偏愛python,深度關(guān)注互聯(lián)網(wǎng)趨勢(shì),人工智能,AI金融量化。致力于使用最前沿的認(rèn)知技術(shù)去理解這個(gè)復(fù)雜的世界。 |
|