資源簡介
創建基本的神經網絡,通過使用MNIST訓練數據集進行訓練,使用MNIST測試集和自己創建的手寫數字圖像數據對神經網絡進行測試
代碼片段和文件信息
import?numpy
import?scipy.special
import?matplotlib.pyplot
import?imageio
import?glob
#?神經網絡類定義
class?neuralNetwork:
????#?初始化神經網絡
????def?__init__(self?inputnodes?hiddennodes?outputnodes?learningrate):
????????#?設置每個輸入、隱藏、輸出層的節點數
????????self.inodes?=?inputnodes
????????self.hnodes?=?hiddennodes
????????self.onodes?=?outputnodes
????????#?鏈接權值矩陣,wih?and?who
????????#?數組中的權重是w_i_j,其中鏈路是從節點i到下一層的節點j
????????#?w11?w21
????????#?w12?w22?etc
????????self.wih?=?numpy.random.normal(0.0?pow(self.inodes?-0.5)?(self.hnodes?self.inodes))
????????self.who?=?numpy.random.normal(0.0?pow(self.hnodes?-0.5)?(self.onodes?self.hnodes))
????????#?學習速率
????????self.lr?=?learningrate
????????#?激活函數是s型函數
????????self.activation_function?=?lambda?x:?scipy.special.expit(x)
????????pass
????#?訓練神經網絡
????def?train(self?inputs_list?targets_list):
????????#?將輸入列表轉換為二維數組
????????inputs?=?numpy.array(inputs_list?ndmin=2).T
????????targets?=?numpy.array(targets_list?ndmin=2).T
????????#?計算信號到隱藏層
????????hidden_inputs?=?numpy.dot(self.wih?inputs)
????????#?計算從隱含層出現的信號
????????hidden_outputs?=?self.activation_function(hidden_inputs)
????????#?計算信號到最終的輸出層
????????final_inputs?=?numpy.dot(self.who?hidden_outputs)
????????#?計算從最終輸出層出現的信號
????????final_outputs?=?self.activation_function(final_inputs)
????????#?輸出層誤差為(目標值-實際值)
????????output_errors?=?targets?-?final_outputs
????????#?隱藏層錯誤是output_errors,按權重分割,在隱藏節點處重新組合
????????hidden_errors?=?numpy.dot(self.who.T?output_errors)
????????#?更新隱藏層和輸出層之間的鏈接的權重
????????self.who?+=?self.lr?*?numpy.dot((output_errors?*?final_outputs?*?(1.0?-?final_outputs))
????????????????????????????????????????numpy.transpose(hidden_outputs))
????????#?更新輸入層和隱藏層之間的鏈接的權值
????????self.wih?+=?self.lr?*?numpy.dot((hidden_errors?*?hidden_outputs?*?(1.0?-?hidden_outputs))
????????????????????????????????????????numpy.transpose(inputs))
????????pass
????#?查詢神經網絡
????def?query(self?inputs_list):
????????#?將輸入列表轉換為二維數組
????????inputs?=?numpy.array(inputs_list?ndmin=2).T
????????#?計算信號到隱藏層
????????hidden_inputs?=?numpy.dot(self.wih?inputs)
????????#?計算從隱含層出現的信號
????????hidden_outputs?=?self.activation_function(hidden_inputs)
????????#?計算信號到最終的輸出層
????????final_inputs?=?numpy.dot(self.who?hidden_outputs)
????????#?計算從最終輸出層出現的信號
????????final_outputs?=?self.activation_function(final_inputs)
????????return?final_outputs
#?輸入、隱藏和輸出節點的數量
input_nodes?=?784
hidden_nodes?=?200
output_nodes?=?10
#?學習速率
learning_rate?=?0.1
#?創建神經網絡實例
n?=?neuralNetwork(input_nodeshidden_nodesoutput_nodes?learning_rate)
#?將mnist訓練數據CSV文件加載到列表中
training_data_file?=?open(“MNIST_data/mnist_train.csv“?‘r‘)
training_data_list?=?training_data_file.readlines()
training_data_file.close()
#?訓練神經網絡
#?epochs是訓練數據集用于訓練的次數
epochs?=?10
for?e?in?range(epochs):
????#?檢查訓練數據集中的所有記錄
????for?record?in?training_data_list:
????????#?用逗號分隔記錄
????????all_values
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2020-06-15?12:43??Handwritten_digit_recognition\
?????文件????????6987??2020-06-15?11:46??Handwritten_digit_recognition\Handwritten.py
?????目錄???????????0??2020-06-15?12:42??Handwritten_digit_recognition\MNIST_data\
?????文件????18299443??2020-06-14?22:42??Handwritten_digit_recognition\MNIST_data\mnist_test.csv
?????文件???109635994??2020-06-14?22:42??Handwritten_digit_recognition\MNIST_data\mnist_train.csv
?????文件?????7840016??1998-01-26?23:07??Handwritten_digit_recognition\MNIST_data\t10k-images.idx3-ubyte
?????文件???????10008??1998-01-26?23:07??Handwritten_digit_recognition\MNIST_data\t10k-labels.idx1-ubyte
?????文件????47040016??1996-11-18?23:36??Handwritten_digit_recognition\MNIST_data\train-images.idx3-ubyte
?????文件???????60008??1996-11-18?23:36??Handwritten_digit_recognition\MNIST_data\train-labels.idx1-ubyte
?????文件???????17699??2020-06-14?23:03??Handwritten_digit_recognition\Number2.png
?????文件???????31649??2020-06-15?11:43??Handwritten_digit_recognition\Number4.png
?????文件???????20778??2020-06-15?09:18??Handwritten_digit_recognition\Number6.png
?????文件???????????0??2020-03-04?20:55??Handwritten_digit_recognition\__init__.py
評論
共有 條評論