成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Python完成1個全連接層的神經(jīng)元網(wǎng)絡(luò)

89542767 / 552人閱讀

  本文關(guān)鍵闡述了Python完成1個全連接層的神經(jīng)元網(wǎng)絡(luò),文章內(nèi)容緊扣主題進行詳盡的基本介紹,具有很強的實用價值,必須的朋友可以學習一下


  序言


  在本文中,提前準備用Python重新開始完成1個全連接層的神經(jīng)元網(wǎng)絡(luò)。你可能會說,為何需要自己去完成,有許多庫和架構(gòu)能夠給我們做這些事,例如Tensorflow、Pytorch等。這兒只想說僅有自己親自完成了,就是自己的。


  想起今日他從接觸到了從事神經(jīng)元網(wǎng)絡(luò)有關(guān)工作早已是多少2、3年多,在其中也試著用tensorflow或pytorch架構(gòu)去完成某些傳統(tǒng)互聯(lián)網(wǎng)。但是對于反向傳播身后體制還是挺模糊不清。


  梯度方向


  梯度方向是函數(shù)公式升高更快方位,速度最快的方位換句話說正確的方向函數(shù)公式樣子很險峻,那樣都是函數(shù)公式減少速度最快的方位。


  盡管有關(guān)某些基礎(chǔ)理論、梯度消失和節(jié)點飽和狀態(tài)能夠傷害1個1、2、3可是細究或是沒有自信,當然沒有親自動手去完成過個反向傳播和完善練習全過程。所以覺得或是浮于表層,學有所用而。


  最近這幾天有段空余時間、因此運用這一段休息日即將把這一部分知識總結(jié)一下下、全面了解掌握

01.png

  大家可能很多人都清楚訓練神經(jīng)網(wǎng)絡(luò)的一個過程,便是升級網(wǎng)絡(luò)參數(shù),升級更新的趨勢是減少交叉熵值。其實就是將學習上的問題變換因為一個改善的難題。我們該如何升級主要參數(shù)呢?我們應該測算參加練習主要參數(shù)相較于損害函數(shù)的導數(shù),接著求得梯度方向,接著應用梯度下降法來升級主要參數(shù),迭代更新這一過程,都可以找到1個最好解決方案來降到最低交叉熵。


  我們都知道反向傳播關(guān)鍵是用來清算交叉熵相較于權(quán)重值和參考點的導函數(shù)


  或許已經(jīng)聽見或讀到了,一些關(guān)于在互聯(lián)網(wǎng)根據(jù)反向傳播來傳送誤差的信息內(nèi)容。再根據(jù)神經(jīng)細胞的w和b對誤差成就的尺寸。其實就是將誤差安排到每個神經(jīng)細胞上。但是這里的誤差(error)是什么意思呀?這一誤差的準確的界定到底是什么呢?答案就是這種誤差是通過每層神經(jīng)元網(wǎng)絡(luò)所成就的,并且某一層樓誤差是后續(xù)層誤差前提下平攤的,網(wǎng)絡(luò)里第層誤差用以表明。


  反向傳播都是基于4個基本方程的,通過這個方程式來數(shù)據(jù)誤差和交叉熵,這兒把這4個方程式一一列舉


  對于如何講解這一4個方程式,接著想要1期共享來闡述。


  classNeuralNetwork(object):
  def__init__(self):
  pass
  defforward(self,x):
  #回到前向傳播的Z可能就是w和b特征函數(shù),鍵入激活函數(shù)前的值
  #回到激活函數(shù)傷害值A(chǔ)
  #z_s,a_s
  pass
  defbackward(self,y,z_s,a_s):
  #回到前向傳播中學到參數(shù)導函數(shù)dwdb
  pass
  deftrain(self,x,y,batch_size=10,epochs=100,lr=0.001):
  pass

02.png

  我們是神經(jīng)網(wǎng)絡(luò)學習全過程,其實就是練習全過程。主要分兩階段前向傳播和后向傳播


  在前向傳播函數(shù)中,關(guān)鍵測算傳遞的Z和A,有關(guān)Z和A指的是什么請參閱前邊報表


  在反向傳播中測算可學習培訓自變量w和b的導函數(shù)


  def__init__(self,layers=[2,10,1],activations=['sigmoid','sigmoid']):
  assert(len(layers)==len(activations)+1)
  self.layers=layers
  self.activations=activations
  self.weights=[]
  self.biases=[]
  foriinrange(len(layers)-1):
  self.weights.append(np.random.randn(layers[i+1],layers))
  self.biases.append(np.random.randn(layers[i+1],1))


  layers主要參數(shù)用以特定每層神經(jīng)細胞的數(shù)量


  activations為每層特定激活函數(shù),其實就是


  來簡易解悉一下下編碼assert(len(layers)==len(activations)+1)


  foriinrange(len(layers)-1):
  self.weights.append(np.random.randn(layers[i+1],layers))
  self.biases.append(np.random.randn(layers[i+1],1))
  因為權(quán)重值連接每個層神經(jīng)細胞的w和b,可能就兩兩層之間的方程式,上面編碼是對
  前向傳播
  deffeedforward(self,x):
  #回到前向傳播的值
  a=np.copy(x)
  z_s=[]
  a_s=[a]
  foriinrange(len(self.weights)):
  activation_function=self.getActivationFunction(self.activations)
  z_s.append(self.weights.dot(a)+self.biases)
  a=activation_function(z_s[-1])
  a_s.append(a)
  return(z_s,a_s)

03.png

  這里激活函數(shù),這個函數(shù)返回值是一個函數(shù),在python用lambda來返回一個函數(shù),這里簡答留下一個伏筆,隨后會對其進行修改。


  staticmethod
  def getActivationFunction(name):
  if(name=='sigmoid'):
  return lambda x:np.exp(x)/(1+np.exp(x))
  elif(name=='linear'):
  return lambda x:x
  elif(name=='relu'):
  def relu(x):
  y=np.copy(x)
  y[y<0]=0
  return y
  return relu
  else:
  print('Unknown activation function.linear is used')
  return lambda x:x
  [staticmethod]
  def getDerivitiveActivationFunction(name):
  if(name=='sigmoid'):
  sig=lambda x:np.exp(x)/(1+np.exp(x))
  return lambda x:sig(x)*(1-sig(x))
  elif(name=='linear'):
  return lambda x:1
  elif(name=='relu'):
  def relu_diff(x):
  y=np.copy(x)
  y[y>=0]=1
  y[y<0]=0
  return y
  return relu_diff
  else:
  print('Unknown activation function.linear is used')
  return lambda x:1

04.png

  反向傳播


  這是本次分享重點


  def backpropagation(self,y,z_s,a_s):
  dw=[]#dC/dW
  db=[]#dC/dB
  deltas=[None]*len(self.weights)#delta=dC/dZ計算每一層的誤差
  #最后一層誤差
  deltas[-1]=((y-a_s[-1])*(self.getDerivitiveActivationFunction(self.activations[-1]))(z_s[-1]))
  #反向傳播
  for i in reversed(range(len(deltas)-1)):
  deltas<i>=self.weights[i+1].T.dot(deltas[i+1])*(self.getDerivitiveActivationFunction(self.activations<i>)(z_s<i>))
  #a=[print(d.shape)for d in deltas]
  batch_size=y.shape[1]
  db=[d.dot(np.ones((batch_size,1)))/float(batch_size)for d in deltas]
  dw=[d.dot(a_s<i>.T)/float(batch_size)for i,d in enumerate(deltas)]
  #返回權(quán)重(weight)矩陣and偏置向量(biases)
  return dw,db


  綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)硪欢ǖ膸椭?/p>

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/128844.html

相關(guān)文章

  • 【DL-CV】卷積神經(jīng)網(wǎng)絡(luò)

    摘要:神經(jīng)網(wǎng)絡(luò)的補充前篇后篇數(shù)據(jù)預處理權(quán)重初始化經(jīng)典神經(jīng)網(wǎng)絡(luò)搞明白后,我們接下來看看他的變種,也是本系列的主角卷積神經(jīng)網(wǎng)絡(luò)。卷積神經(jīng)網(wǎng)絡(luò)一個普通的卷積神經(jīng)網(wǎng)絡(luò)由各種層按順序堆疊而成,這些層主要分三類卷積層池化層和全連接層。 【DL-CV】神經(jīng)網(wǎng)絡(luò)的補充【DL-CV】數(shù)據(jù)預處理&權(quán)重初始化 經(jīng)典神經(jīng)網(wǎng)絡(luò)搞明白后,我們接下來看看他的變種,也是本系列的主角——卷積神經(jīng)網(wǎng)絡(luò)(Convolution...

    freewolf 評論0 收藏0
  • 【DL-CV】卷積神經(jīng)網(wǎng)絡(luò)

    摘要:神經(jīng)網(wǎng)絡(luò)的補充前篇后篇數(shù)據(jù)預處理權(quán)重初始化經(jīng)典神經(jīng)網(wǎng)絡(luò)搞明白后,我們接下來看看他的變種,也是本系列的主角卷積神經(jīng)網(wǎng)絡(luò)。卷積神經(jīng)網(wǎng)絡(luò)一個普通的卷積神經(jīng)網(wǎng)絡(luò)由各種層按順序堆疊而成,這些層主要分三類卷積層池化層和全連接層。 【DL-CV】神經(jīng)網(wǎng)絡(luò)的補充【DL-CV】數(shù)據(jù)預處理&權(quán)重初始化 經(jīng)典神經(jīng)網(wǎng)絡(luò)搞明白后,我們接下來看看他的變種,也是本系列的主角——卷積神經(jīng)網(wǎng)絡(luò)(Convolution...

    ls0609 評論0 收藏0
  • 徒手實現(xiàn)CNN:綜述論文詳解卷積網(wǎng)絡(luò)的數(shù)學本質(zhì)

    摘要:本論文將嘗試概述卷積網(wǎng)絡(luò)的架構(gòu),并解釋包含激活函數(shù)損失函數(shù)前向傳播和反向傳播的數(shù)學推導。本文試圖只考慮帶有梯度下降優(yōu)化的典型卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)的制定。 近日南洋理工大學研究者發(fā)布了一篇描述卷積網(wǎng)絡(luò)數(shù)學原理的論文,該論文從數(shù)學的角度闡述整個卷積網(wǎng)絡(luò)的運算與傳播過程。該論文對理解卷積網(wǎng)絡(luò)的數(shù)學本質(zhì)非常有幫助,有助于讀者「徒手」(不使用卷積API)實現(xiàn)卷積網(wǎng)絡(luò)。論文地址:https://arxiv....

    eternalshallow 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<