Pytorch(二) --梯度下降法
生活随笔
收集整理的這篇文章主要介紹了
Pytorch(二) --梯度下降法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
針對y=wx+b,利用梯度下降法求得相對應的w和b,此時,w和b是一個近似解,而不是確切解。
上圖是針對y=wx的梯度下降法的步驟,y=w*x+b的步驟與之類似,只不過分為兩步,w和b。
代碼如下所示:
最終的結果如下所示:
epoch: 9999 w= 2.0000000000202744 b= 2.9999999999539115 loss= 3.061922477666832e-22
與真實結果相差很小,比起窮舉法,節省很多時間。
SGD(隨機梯度下降法)
上面求梯度的方法是利用了所有的樣本求梯度,而在面對大量的樣本時,這樣做耗時嚴重,而且樣本中所摻雜的噪聲樣本會影響最終的結果,因此,隨機梯度下降法是很好的選擇,每次只選擇一個樣本求梯度,然后更新梯度,最終也會獲得很好的結果。
兩種求梯度方法的優缺點:
1)
優點:可以并行計算,計算效率高。
缺點:最終的結果誤差較大。
2)
優點:最終的結果較為準確。
缺點:不能并行計算,計算效率比較低。
采取折中的辦法------Mini batch
SGD代碼如下所示:
def SGD(x,y):return 2*x*(x*w+b-y),2*(x*w+b-y) epoch_list = [] cost_list = [] print('predict (before training)',4,forward(4)) for epoch in range(10000):cost_val = cost(x_data,y_data)gradw,gradb = gradient(x_data,y_data)w-=lr*gradwb-=lr*gradbprint('epoch:',epoch,'w=',w,'b=',b,'loss=',cost_val)epoch_list.append(epoch)cost_list.append(cost_val) print('predict (after training)',4,forward(4)) plt.plot(epoch_list,cost_list) plt.ylabel('cost') plt.xlabel('epoch') plt.show()結果如下:
epoch: 9999 w= 2.0000000000202744 b= 2.9999999999539115 loss= 3.061922477666832e-22
努力加油a啊
總結
以上是生活随笔為你收集整理的Pytorch(二) --梯度下降法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超九成美国小商家将涌入,TikTok 蒙
- 下一篇: Pytorch(三) --反向传播