python實(shí)現(xiàn)BackPropagation算法
實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏置更新,很重要的一部就是使用BackPropagation(反向傳播)算法。具體來(lái)說(shuō),反向傳播算法就是用誤差的反向傳播來(lái)計(jì)算w(權(quán)重)和b(偏置)相對(duì)于目標(biāo)函數(shù)的導(dǎo)數(shù),這樣就可以在原來(lái)的w,b的基礎(chǔ)上減去偏導(dǎo)數(shù)來(lái)更新。其中我上次寫的python實(shí)現(xiàn)梯度下降中有一個(gè)函數(shù)backprop(x,y)就是用來(lái)實(shí)現(xiàn)反向傳播的算法。(注:代碼并非自己總結(jié),github上有這個(gè)代碼的實(shí)現(xiàn)https://github.com/LCAIZJ/neural-networks-and-deep-learning)
def backprop(self,x,y):
nabla_b = [np.zeros(b.shape) for b in self.biases]
nabla_w = [np.zeros(w.shape) for w in self.weights]
# 通過輸入x,前向計(jì)算輸出層的值
activation = x
activations = [x]# 存儲(chǔ)的是所以的輸出層
zs = []
for b,w in zip(self.biases,self.weights):
z = np.dot(w,activation)+b
zs.append(z)
activation = sigmoid(z)
activations.append(activation)
# 計(jì)算輸出層的error
delta = self.cost_derivative(activations[-1],y)*sigmoid_prime(zs[:-1])
nabla_b[-1] = delta
nabla_w[-1] = np.dot(delta,activations[-2].transpose())
#反向更新error
for l in xrange(2,self.num_layers):
z = zs[-l]
sp = sigmoid_prime(z)
delta = np.dot(self.weight[-l+1].transpose(),delta)*sp
nabla_b[-l] = delta
nabla_w[-l] = np.dot(delta,activations[-l-1].transpose())
return (nabla_b,nabla_w)
其中,傳入的x和y是一個(gè)單獨(dú)的實(shí)例。
def cost_derivative(self,output_activation,y): return (output_activation-y) def sigmoid(z): return 1.0/(1.0+np.exp(z)) def sigmoid_prime(z): return sigmoid(z)*(1-sigmoid(z))
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- MySQL數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別介紹(Transaction Isolation Level)
- spring事物傳播propagation類別含義詳解
- spring事務(wù)Propagation及其實(shí)現(xiàn)原理詳解
- JavaScript中使用stopPropagation函數(shù)停止事件傳播例子
- js中的preventDefault與stopPropagation詳解
- 關(guān)于event.cancelBubble和event.stopPropagation()的區(qū)別介紹
- Jquery阻止事件冒泡 event.stopPropagation
- 阻止JavaScript事件冒泡傳遞(cancelBubble 、stopPropagation)
- 淺談spring中isolation和propagation的用法
相關(guān)文章
Python使用Networkx實(shí)現(xiàn)復(fù)雜的人物關(guān)系圖
日常工作、生活中我們經(jīng)常會(huì)遇到一些復(fù)雜的事務(wù)關(guān)系,比如人物關(guān)系,那如何才能清楚直觀的看清楚這些任務(wù)關(guān)系呢?所以小編給大家介紹了Python如何使用Networkx實(shí)現(xiàn)復(fù)雜的人物關(guān)系圖,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下2023-11-11
Python無(wú)權(quán)點(diǎn)文件轉(zhuǎn)化成鄰接矩陣方式
這篇文章主要介紹了Python無(wú)權(quán)點(diǎn)文件轉(zhuǎn)化成鄰接矩陣方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
Pytorch中的torch.nn.Linear()方法用法解讀
這篇文章主要介紹了Pytorch中的torch.nn.Linear()方法用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
詳解Python的hasattr() getattr() setattr() 函數(shù)使用方法
這篇文章主要介紹了詳解Python的hasattr() getattr() setattr() 函數(shù)使用方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07

