一、基礎知識提要:

解釋:
(1)X指代輸入層或隱藏層與對應層之間的權重W與其輸入資料做向量和的結果;W指代該層級的權重;下標中h,o指的是hidden層和output層對應的資料
(2)第三個公式是權重更新公式,α表示學習率(決定更新的幅度大小),Ek指該層(k層)的方向傳播錯誤,Ok也是表示第k層輸出,上標T表示矩陣轉置,
感興趣的同學可去查找權重更新公式的推導程序(在書本P72-76(順便指出P117的本公式有錯誤,P76頁為正確的))
二、神經網路模型及資料:
(1)本次使用的為最簡單的三層神經網路模型包含一個輸入層、隱藏層、輸出層:

(2)資料:雖然本次代碼搭建的為神經網路的框架,不需要對資料進行操作,但是需要說明的是資料都是矩陣形式的,需要注意代碼中轉置的地方,
三:代碼及其注釋
1 import numpy 2 import scipy.special 3 4 class neuralNetwork : 5 #初始化神經網路 6 def _init_(self, inputnodes, hiddennodes, outputnodes, learningrate) : 7 #傳入引數輸入層,隱藏層及輸出層的結點數 8 self.inodes = inputnodes 9 self.hnodes = hiddennodes 10 self.onodes = outputnodes 11 #初始化神經網路中的權重矩陣 12 self.wih = numpy.random.normal(0.0, pow(self.hnodes, -0.5),(self.hnodes, self.inodes)) 13 self.who = numpy.random.normal(0.0, pow(self.onodes, -0.5),(self.onodes, self.hnodes)) 14 #初始化神經網路的學習率 15 self.lr = learningrate 16 #S函式 17 self.activation_function = lambda x: scipy.special.expit(x) 18 19 pass 20 21 22 #訓練神經網路 23 def train(self, input_list, targets_list) : 24 #將輸入及目標輸出轉化為二維numpy陣列 25 inputs = numpy.array(input_list, ndmin=2).T 26 targets = numpy.array(targets_list, ndmin=2).T 27 #計算隱藏層輸出,后者為前者輸出后進行sigmoid函式計算后的結果 28 hidden_inputs = numpy.dot(self.wih, inputs) 29 hidden_outputs = self.activation_function(hidden_inputs) 30 #計算輸出層輸出 31 final_inputs = numpy.dot(self.who, hidden_outputs) 32 final_outputs = self.activation_function(final_inputs) 33 #計算輸出層輸出 34 output_errors = targets - final_outputs 35 #計算隱藏層輸出 36 hidden_errors = numpy.dot(self.who.T, output_errors) 37 #更新權重 38 self.who += self.lr * numpy.dot((output_errors * final_outputs * (1.0 - final_outputs)), numpy.transpose(hidden_outputs)) 39 self.wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)), numpy.transpose(inputs)) 40 41 pass 42 43 #查詢神經網路 44 def query(self, inputs_list) : 45 inputs = numpy.array(inputs_list, ndmin=2).T 46 47 hidden_inputs = numpy.dot(self.wih, inputs) 48 hidden_outputs = self.activation_function(hidden_inputs) 49 50 final_inputs = numpy.dot(self.who, hidden_outputs) 51 final_outputs = self.activation_function(final_inputs) 52 53 return final_outputs
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/192029.html
標籤:其他
上一篇:一文解讀網路爬蟲 (轉)
