《Python神经网络编程》是一本自己动手用Python编写神经网络的力作。该书详细介绍了理解神经网络如何工作所必须的基础知识,并介绍了所需的微积分知识和树莓派知识。读者可以通过这本书学习到搭建神经网络的各种技巧和方法。不仅如此,该书还提供了大量的实例和案例,帮助读者更好地理解神经网络的工作原理。无论是对Python编程的初学者还是对神经网络感兴趣的读者来说,这本书都是非常值得一读的。欢迎下载体验这本令人激动的书籍!
Python神经网络编程 电子书封面
读者评价
之前有一个新闻说,中小学以后要开展人工智能教学,结果很多人来嘲讽。我就想起来虽然我大四的时候才第一次用C++去自己写BP-ANN的代码,其大致原理和概念我中学的时候就已经熟悉了。其实九十年代以来,有很多期刊、学位论文、教材、手册等出版物上都会有这方面的概念性介绍,很难不注意到。
我毕竟不是应用数学或计算机类的,之前我对这种最简单的ANN的印象就是一种什么工作都可以掺和一下,效果可能很好也可能很差的黑箱模型,十多年前已经过时(起码也得来个SVM啊!)但最近因为深度学习又再次走红的工具。Make Your Own Neural Network这本书对我显然是过于简单了,但我居然从每一部分都学到了非常多的新的东西,它让我对ANN的认识整个提升了一个层次。
这本书最让人惊讶的一部分就是模型优化部分了。本来我以为是一个玩具代码,没想到其表现真正达到了工业级别。优化后对手写数字的识别率逼近98%,而它仅仅是一个三层的全连接的最朴素的BP-ANN!
作者把这本书写的非常简单,而可以看出来他的功力其实很强。如果你有基本的机器学习知识的话,可以看出他把很多重要的概念展现于极为简单的例子之中。比如XOR问题,超参数,学习率,过拟合,模型容量等等概念,他可能没有明确的说出来,但都有点到。中学生如果能吃透这本书,以后接触和进入真正的机器学习将会非常顺畅。
作者功力强大的地方还体现在,他把ANN的其实还挺复杂的概念讲得很清楚。值得承认,我之前虽然用过、写过ANN,但我很多公式怎么来的、为什么这么来的都还是糊涂的。这本书的目标读者可是没有微积分和线性代数基础的人士,我感觉至少稍微花点功夫这些人都能把ANN的具体原理和细节弄得非常清楚了。
最后,作者一定也是科研界老油条,他搭起来模型之后,调教的方法非常学院派,这一段儿我甚至有种读到论文的感觉。这样的内容让中学生看到也是有好处的,他们会建立起来一个有条理的思维方式。
真是生不逢时,我高中的时候没有(流行)python,没有人开展人工智能的教学,没人写出这么有意思的科普读物,于是错过了很多有趣的东西啊。
内容介绍
《Python神经网络编程》首先从简单的思路着手,详细介绍了理解神经网络如何工作所必须的基础知识。第一部分介绍基本的思路,包括神经网络底层的数学知识,第2部分是实践,介绍了学习Python编程的流行和轻松的方法,从而逐渐使用该语言构建神经网络,以能够识别人类手写的字母,特别是让其像专家所开发的网络那样地工作。第3部分是扩展,介绍如何将神经网络的性能提升到工业应用的层级,甚至让其在Raspberry Pi上工作。
本书适合想要从事神经网络研究和探索的读者学习参考,也适合对人工智能、机器学习和深度学习等相关领域感兴趣的读者阅读。
目录
- 第 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
神经网络的大的概括就是:给定输入,经过一些处理,得到输出。当不知道具体的运算处理方式时,尝试使用模型来估计其运作方式,在这个过程中可以基于模型输出和已知真实实例之间的比较来得到误差、调整参数。 常见的神经网络模型包括分类器和预测器。通俗而言,分类器是将已有数据分开;预测是根据给定输入,给出预测的输出。本质上没有太大差别。在分类过程中其实就是要找到线分开各组数据,关键就是确定这条线,也就是确定斜率。在书中给的直线分类器的例子中,就是随机一个斜率,然后用一组组正确的数据来逐步修正这个斜率: delt A = E/x,其中A是斜率。但是这样直线的斜率只会取决于最后一个样本而不会顾及到前面的样本。为了改进,每次只要变化delt A 的一部分,这也就是学习率的由来。调节学习率,单一的训练样本就不能主导整个学习过程,也可以减少噪声的影响。复杂的分类器也是这样的思想。 神经网络,正如名字所示,灵感来自动物的神经元细胞,毕竟大脑真的很神奇。神经元的结构包括树突和轴突,电信号从一端沿着轴突再传到树突,这样就从一个神经元传到另一个神经元。简单说,生物的神经元也是接受电信号输入,再输出另一个电信号。不过生物神经元与简单的线性函数不一样,不能简单的对输入做出反应。可以这样认为,在产生输出之前,输入必须达到一个阈值。直观上,神经元不希望传递微小的噪声信号,而只传递有意识的明显的信号。 我们用激活函数来表达这种方式。
清晰易懂,只用了一点数学(目标读者是高中生,书中稍许用到的微积分知识,在附录也有解释),就把神经网络的构造和原理讲得很清楚。讲完理论,作者在书的第二部分进入实践,一步步编写了一段应用神经网络模型识别手写数字的代码,几乎每一步都伴有详细讲解。个人感觉是,如果预先有一点点python的知识(比如花几个小时学完这个免费在线课程),会更容易理解这些代码。第三部分篇幅不长,主要是在某些方面略作延伸,意图应该是希望激发读者进一步探究的兴趣。书中的计算和公式偶有小错误,基本都能通过上下文发现,也可以到这个博客搜索勘误。 目前人工智能,机器学习之类的名词太火热,似乎哪里都能碰到。比如我所在的哲学圈,有时聊着聊着也会有人抛出这些词来,但我觉得多数情况下,无论言者闻者其实都不甚了了。通过阅读本书,多少可以对人工智能的某一小方面有点实质性的了解,庶几不至于让这类讨论完全变成空谈。