阅读 |《神经网络编程》读书打卡

花了几天时间把《神经网络编程》这本书看完了,买这本书的原因是在豆瓣看到评分很高,于是就下单了,现在想想评分人数挺少的,应该有刷分的嫌疑。不过认真读完后,还是觉得作为一本入门级别的人工智能书籍,这本书还是很不错的,作者是英国人,在内容把控上,比如难度,深度,循序渐进的安排,都是可圈可点的,即使是门外汉,按照顺序都很容易看懂。 在这里插入图片描述

下面对本书做一个阅读小结,因此列出了该书的目录详情,方便自己以后回顾:

第 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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值