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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

反向传播+代码实现

發(fā)布時間:2024/7/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 反向传播+代码实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

y=wx的反向傳播代碼實現(xiàn)?

import torch x_data = [1.0, 2.0, 3.0] y_data = [2.0, 4.0, 6.0]#w是Tensor(張量類型),Tensor中包含data和grad,data和grad也是Tensor。 # grad初始為None,調用l.backward()方法后w.grad為Tensor, # 故更新w.data時需使用w.grad.data。 # 如果w需要計算梯度,那構建的計算圖中,跟w相關的tensor都默認需要計算梯度。 w=torch.Tensor([1.0]) #True:需要計算梯度 w.requires_grad=Truedef forward(x):return x * w# 構建計算圖 def loss(x,y):y_pred=forward(x)return (y_pred-y)*(y_pred-y)print("訓練之前:",4,forward(4).item()) for epoch in range(100):for x,y in zip(x_data,y_data):l=loss(x,y)#自動將需要梯度的地方計算出來#存儲到w中#l.backward()會把計算圖中所有需要梯度(grad)的地方都會求出來,# 然后把梯度都存在對應的待求的參數(shù)中,最終計算圖被釋放。l.backward()print("grad:",x,y,w.grad.item())#grad是修改后的w權值#data是轉化為標量 不能使用張量計算 會發(fā)生自動類型轉換w.data=w.data-0.01*w.grad.data#要單個所以要釋放,如果是連續(xù)的則不需要清零# w.data.zero_() 錯w.grad.data.zero_()print("進程輪數(shù):",epoch,l.item()) print("訓練之后:",4,forward(4).item())

y=w1x+w2x+b的反向傳播代碼實現(xiàn)?

import torchx_data = [1.0,2.0,3.0] y_data = [2.0,4.0,6.0] #學習率 learn_rate=0.01#True:需要計算梯度 w1=torch.tensor([1.0]) w1.requires_grad=Truew2=torch.tensor([1.0]) w2.requires_grad=Trueb=torch.tensor([1.0]) b.requires_grad=Truedef forward(x):return w1*x+w2*x+bdef loss(x,y):y_test=forward(x)return (y_test-y)*(y_test-y)print("訓練之前:",4,forward(4).item()) for epoch in range(100):for x,y in zip(x_data,y_data):#損失函數(shù)原型l=loss(x,y)l.backward()#pytorch中,.item()方法 是得到一個元素張量里面的元素值print("grad:",x,y,w1.grad.item(),w2.grad.item(),b.grad.item())#orch.autograd包主要功能是完成網(wǎng)絡反向傳播時的鏈式求導#過程大致為:先通過輸入的tensor數(shù)據(jù)類型的變量在神經(jīng)網(wǎng)絡的前向傳播中生成一張計算圖,#然后再根據(jù)這個計算圖和輸出結果準確計算出各個參數(shù)需要更新的梯度,并通過完成反向傳播對參數(shù)進行梯度更新。#在實踐中使用autograd包中的variable類進行封裝,封裝之后計算圖中每一個節(jié)點就是一個variable對象#因此如果用X代表選中的節(jié)點,那么X.data 就是tensor數(shù)據(jù)對象,X.grad就是X的梯度對象,X.grad.data就是X的梯度數(shù)據(jù)值啦w1.data=w1.data-learn_rate*w1.grad.dataw2.data=w2.data-learn_rate*w2.grad.datab.data=b.data-learn_rate*b.grad.dataw1.grad.data.zero_()w2.grad.data.zero_()b.grad.data.zero_()print("輪數(shù):",epoch,l.item()) print("訓練之后:",4,forward(4).item())

總結

以上是生活随笔為你收集整理的反向传播+代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。