閱讀 |《神經網絡編程》讀書打卡

花了幾天時間把《神經網絡編程》這本書看完了,買這本書的原因是在豆瓣看到評分很高,於是就下單了,現在想想評分人數挺少的,應該有刷分的嫌疑。不過認真讀完後,還是覺得作爲一本入門級別的人工智能書籍,這本書還是很不錯的,作者是英國人,在內容把控上,比如難度,深度,循序漸進的安排,都是可圈可點的,即使是門外漢,按照順序都很容易看懂。在這裏插入圖片描述

下面對本書做一個閱讀小結,因此列出了該書的目錄詳情,方便自己以後回顧:

第 1 章 神經網絡如何工作 001

1.1 尺有所短,寸有所長 001
1.2 一臺簡單的預測 003
1.3 分類器與預測器並無太大差別 008
1.4 訓練簡單的分類 011
1.5 有時候一個分類器不足以求解問題 020
1.6 神經元——大自然的計算機器 024
1.7 在神經網絡中追蹤信號 033
1.8 憑心而論,矩陣乘法大有用途 037
1.9 使用矩陣乘法的三層神經網絡示例 043
1.10 學習來自多個節點的權重 051
1.11 多個輸出節點反向傳播誤差 053
1.12 反向傳播誤差到更多層中 054
1.13 使用矩陣乘法進行反向傳播誤差 058
1.14 我們實際上如何更新權重 061
1.15 權重更新成功範例 077
1.16 準備數據 078

第 2 章 使用Python進行DIY 083

2.1 Python 083
2.2 交互式Python = IPython 084
2.3 優雅地開始使用Python 085
2.4 使用Python製作神經網絡 105
2.5 手寫數字的數據集MNIST 121

第 3 章 趣味盎然 153

3.1 自己的手寫數字 153
3.2 神經網絡大腦內部 156
3.3 創建新的訓練數據:旋轉圖像 160
3.4 結語 164

附錄A 微積分簡介 165

A.1 一條平直的線 166
A.2 一條斜線 168
A.3 一條曲線 170
A.4 手繪微積分 172
A.5 非手繪微積分 174
A.6 無需繪製圖表的微積分 177
A.7 模式 180
A.8 函數的函數 182

附錄B 使用樹莓派來工作 186

B.1 安裝IPython 187
B.2 確保各項工作正常進行 193
B.3 訓練和測試神經網絡 194
B.4 樹莓派成功了 195

本書用於識別手寫數字實現的一個三層神經網絡Python代碼,正確率約爲95%:

import numpy

import scipy.special

import matplotlib.pyplot

%matplotlib inline



class neuralNetwork :
    # 初始化
    def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate) :

        self.inodes = inputnodes
        self.hnodes = hiddennodes
        self.onodes = outputnodes

        self.wih = numpy.random.normal(0.0, pow(self.hnodes, -0.5), (self.hnodes, self.inodes))
        self.who = numpy.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.hnodes))

        self.lr = learningrate

        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
    	hidden_errors = numpy.dot(self.who.T, output_errors)

    	self.who += self.lr * numpy.dot((output_errors * final_outputs * (1 - final_outputs)), numpy.transpose(hidden_outputs))

    	self.wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1 - 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 = scipy.activation_function(hidden_inputs)


    	final_inputs = numpy.dot(self.who, hidden_outputs)
    	final_outputs = scipy.activation_function(final_inputs)

    	return final_outputs


	# 訓練&測試神經網絡


   	input_nodes = 784
   	hidden_nodes = 100
   	output_nodes = 10

   	learning_rate = 0.3

   	n = neuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)



   	# 訓練
   	training_data_file = open("mnist_dataset/mnist_train.csv",'r')
   	training_data_list = training_data_file.readlines()
   	training_data_file.close()

   	epochs = 5

   	for e in epochs :
   		for record in training_data_list :
   			all_values = record.split(',')
   			inputs = (numpy.asfarray(all_values[1:]) / 255 * 0.99) + 0.01
   			targets = numpy.zeros(output_nodes) + 0.01
   			targets[int(all_values[0])] = 0.99
   			n.train(inputs, targets)
   			pass
   		pass

    # 測試

   	test_data_file = open("mnist_dataset/mnist_test.csv",'r')
   	test_data_list = test_data_file.readlines()
   	test_data_file.close()


   	scorecard = []

   	for record in test_data_list :
   		all_values = record.split(',')
   		correct_label = int(all_values[0])
   		inputs = (numpy.asfarray(all_values[1:]) / 255 * 0.99) + 0.01
   		outputs = n.query(inputs)
   		label = numpy.argmax(outputs)

   		if (label == correct_label) :
   			scorecard.append(1)
   		else :
   			scorecard.append(0)
   			pass
   		pass


   	scorecard_array = numpy.asarray(scorecard)
   	print ("Performance = ", scorecard_array.sum() / scorecard_array.size) 

The end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章