使用pytorch內建的自動求導寫的BP演算法

2021-08-21 13:48:11 字數 1229 閱讀 4830

求導是我心頭的乙個大問題,當然高數上求求還是沒問題的。神經網路中鏈式法則太多以後就會暈。。

我的z8300寨版,從win10裝了lubuntu,但是tf對cpu要求太高,只能裝1。5版本的tf,我就放棄了,現在轉來學pytorch,發現這個框架真的很好理解。可能我個人比較喜歡這樣的動態圖吧~

import torch

from torch.autograd import variable

import numpy as np

_input=torch.tensor([[0.05],[0.10]])

_ty=torch.tensor([[0.01],[0.99]]) #standrd output

_b1=torch.tensor([0.35])

_b2=torch.tensor([0.60])

##########################3

w1=variable(torch.tensor([[0.15,0.2],[0.25,0.30]]),requires_grad=true)

w2=variable(torch.tensor([[0.40,0.45],[0.5,0.55]]),requires_grad=true)

h1=w1.mm(_input)+_b1

h1=h1.sigmoid()

_out=w2.mm(h1)+_b2

_out=_out.sigmoid()

loss=((_out-_ty)*(_out-_ty)/2).sum() #here can use sum() or mean()

loss.backward() #start backwarding

print(_out,loss)

print(w2.grad)

print(w1.grad)

w2.data.sub_(0.5*w2.grad)

w1.data.sub_(0.5*w1.grad)

h1=w1.mm(_input)+_b1

h1=h1.sigmoid()

_out=w2.mm(h1)+_b2

_out=_out.sigmoid()

loss=((_out-_ty)*(_out-_ty)/2).sum() #here can use sum() or mean()

loss.backward() #start backwarding

print(_out,loss)

pytorch中Variable的自動求導

pytorch中variable這個變數具有自動求導功能,只需要在引數列表中加入 requires grad true 舉個例子 我們如下定義 我們對矩陣進行簡單的求導var 12 34 var begin 1 2 3 4 end var 1 3 24 我們對該矩陣平方的均值進行求導,從而有如下的表...

PyTorch學習筆記 自動求梯度

在深度學習中,我們經常需要對函式求梯度 gradient pytorch提供的autograd包能夠根據輸 和前向傳播過程自動構建計算圖,並執 反向傳播。本節將介紹如何使用autograd包來進 自動求梯度的有關操作。建立 個tensor並設定requires grad屬性為true x torch...

pytorch中的Autograd 自動微分

例如 import torch as t import numpy as np from torch.autograd import variable x variable t.ones 2,2 requires grad true variable對tensor的封裝 print x 輸出tens...