日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pytorch(二) --梯度下降法

發布時間:2023/12/15 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pytorch(二) --梯度下降法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

針對y=wx+b,利用梯度下降法求得相對應的w和b,此時,w和b是一個近似解,而不是確切解。

上圖是針對y=wx的梯度下降法的步驟,y=w*x+b的步驟與之類似,只不過分為兩步,w和b。
代碼如下所示:

import numpy as np import matplotlib.pyplot as plt#y = 2*x+3 x_data = [1.0,2.0,3.0] y_data = [5.0,7.0,9.0]#隨機初始化w和b w=1.0 b=1.0 lr = 0.01 def forward(x):return w*x+b #損失函數 def cost(xs,ys):cost = 0for x,y in zip(xs,ys):y_pred = forward(x)cost+=(y_pred-y)**2return cost/len(xs) #梯度降函數 def gradient(xs,ys):gradw=0gradb=0for x,y in zip(xs,ys):gradw+=2*x*(x*w+b-y)gradb+=2*(x*w+b-y)return gradw/len(xs),gradb/len(xs) epoch_list = [] cost_list = [] print('predict (before training)',4,forward(4)) for epoch in range(10000):#迭代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


與真實結果相差很小,比起窮舉法,節省很多時間。

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(二) --梯度下降法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。