描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111632665
【编辑推荐】
专门录制30小时共43段配套教学视频带领读者无障碍学习
在人工智能的高门槛前建立了多级容易跨越的台阶
提供比较平滑的学习路线,极大地降低了读者的学习难度
从深度学习的数学基础讲起,再重点剖析神经网络的原理与深度学习算法
详解机器视觉、自然语言处理、生成对抗网络等领域的13个应用案例
【了解本书】
深度学习需要哪些数学基础?
神经网络的内部如何运作?
神经网络为何具备学习改进能力?
什么是误差反向回归?
什么叫做损失函数?
什么叫做激活函数?
如何处理过度拟合?
如何避开框架手动实现一个神经网络?
什么叫做卷积运算?
如何用卷积网络识别图片内容?
神经网络如何从图片中抽取信息?
用于训练网络的图片数据不足时该怎么办?
网络为何能够读懂人类文章?
什么叫做LSTM网络模型?
如何将单词转换为可计算的向量?
如何让模糊的语言变得精确和可计算?
如何将深度学习应用到具体项目中?
在实践中运用深度学习技术时遇到问题怎么解决?
……
通过阅读本书,你将了解这些复杂问题背后的原理,甚至你都可以自己解决这些问题。
本书核心知识
【理论基础】
深度学习所需的微积分、线性代数及概率论知识
神经网络运用误差回传改进识别效果的数学原理
使用导数极值原理实现网络学习功能
卷积运算流程及卷积网络识别图片的深层原理
单词向量化的数学模型及LSTM网络层运行原理
【理论实践】
使用导数求极值原理获取多元变量函数的*小值
手写一个能识别数字图片的神经网络
用代码实现卷积运算的具体过程
使用keras构建能识别猫狗图片的网络
使用keras构建能识别文字情绪的神经网络
TensorFlow框架基本原理和使用方法
【高级项目实践】
编解码网络原理及图片去噪实践
生成型对抗性网络及手写数字图片生成实践
增强性学习网络及用其解决平衡车模拟难题
实现单词向量化对应的Skim-Gram数学模型
使用LSTM网络构建智能对话机器人
实现图片内容在不同艺术风格下的变迁效应
抓取识别图片或视频流中的不同物体
实现类似于网易云音乐那样的推荐引擎
实现类似于淘宝拍立得功能的图片搜索引擎
【2位专家推荐】
段超 北京邮电大学国际学院企业顾问团专家
王静逸 神兔未来科技有限公司创始人
【超值配书资源】
30小时教学视频
实例源代码文件
相关数据文件
本书通过理论与项目实践相结合的方式引领读者进入人工智能技术的大门。书中首先从人工智能技术的数学基础讲起,然后重点剖析神经网络的运行流程,*后以大量的实际项目编码实践方式帮助读者扎实地掌握人工智能开发所需要的基本理论知识和核心开发技术。
本书共15章,涵盖的内容有神经网络初体验;深度学习的微积分基础;深度学习的线性代数基础;神经网络的理论基础;用Python从零实现识别手写数字的神经网络;神经网络项目实践;使用神经网络实现机器视觉识别;用深度学习实现自然语言处理;自动编解码网络和生成型对抗性网络;增强性学习网络的开发实践;TensorFlow入门;使用TensorFlow和Keras开发高级自然语言处理系统;使用TensorFlow和Keras实现高级图像识别处理系统;使用 TensorFlow和Keras打造智能推荐系统;深度学习重要概念和技巧总结。
本书尽可能通过细致的讲解降低读者入门人工智能编程的门槛。书中案例丰富,内容非常实用,特别适合有志于投身人工智能领域的IT专业人士或学生阅读。阅读本书需要读者具有一定的数学基础。
第1章 神经网络初体验 1
1.1 开发环境的安装 1
1.2 快速构建一个识别手写数字图片的神经网络 2
第2章 深度学习中的微积分基础 8
2.1 实数中的无理数 8
2.2 什么叫极限 10
2.3 函数的连续性 12
2.4 函数求导 13
2.5 导数的一般法则 15
2.6 间套函数的链式求导法则 17
2.7 多变量函数与偏导数 19
2.8 导数与极值 19
2.9 使用导数寻求函数的最小值 21
第3章 深度学习的线性代数基础 25
3.1 常量与向量 26
3.2 矩阵及相关操作 26
3.3 tensor——多维向量 28
3.4 向量范数 30
第4章 神经网络的理论基础 31
4.1 详解神经网络中的神经元激活函数 31
4.2 使用矩阵运算驱动神经网络数据加工链 38
4.3 通过反向传播算法回传误差改进链路权重 42
4.4 使用矩阵和梯度下降法实现神经网络的迭代训练 45
4.5 手算梯度下降法,详解神经网络迭代训练过程 53
第5章 用Python从零实现识别手写数字的神经网络 58
5.1 基本框架的搭建 58
5.2 实现网络的迭代训练功能 62
5.3 网络训练,识别手写数字图片 64
第6章 神经网络项目实践 70
6.1 使用神经网络分析电影评论的正能量和负能量 70
6.2 使用神经网络实现新闻话题分类 78
6.3 使用神经网络预测房价中位数 83
第7章 使用神经网络实现机器视觉识别 90
7.1 卷积神经网络入门 90
7.2 从零开始构造一个识别猫、狗图片的卷积网络 93
7.3 使用预先训练的卷积网络实现图像快速识别 101
7.4 视觉化神经网络的学习过程 105
7.5 揭秘卷积网络的底层原理 109
第8章 用深度学习实现自然语言处理 124
8.1 Word Embedding 单词向量化 124
8.2 概率论的一些重要概念 130
8.3 skip-gram单词向量化算法的数学原理 136
8.4 使用预先训练好的单词向量实现新闻摘要分类 140
8.5 RNN——具有记忆功能的神经网络 143
8.6 LSTM网络层详解及其应用 145
8.7 使用RNN和CNN混合的“鸡尾酒疗法”提升网络运行效率 148
第9章 自动编解码网络和生成型对抗性网络 150
9.1 自动编解码器网络的原理与实现 150
9.2 去噪型编解码网络 154
9.3 使用自动编解码网络实现黑白图片上色 157
9.4 生成型对抗性网络 162
9.5 生成型对抗性网络的代码实现 163
9.6 条件性生成型对抗性网络 169
第10章 增强性学习网络开发实践 176
10.1 增强性学习网络的基本原理 176
10.2 开发环境配置 177
10.3 增强性学习网络的数学原理 179
10.4 Bellman函数和最优化 180
10.5 Bellman等式的推导 181
10.6 用实例讲解Bellman函数的应用 182
10.7 解决冰冻湖问题 185
10.8 ε贪婪算法 188
10.9 运用神经网络和Bellman函数解决Cartpole问题 188
第11章 TensorFlow入门 193
11.1 TensorFlow图运算原理 193
11.2 TensorFlow代码实践 195
11.3 TensorFlow的输入、变量、输出及运算操作 197
11.4 TensorFlow的变量定义 200
11.5 TensorFlow的运算输出及运算操作 201
11.6 用TensorFlow开发神经网络的相关操作 204
11.7 开发TensorFlow程序应注意的事项 207
11.8 使用TensorFlow开发神经网络 213
第12章 使用TensorFlow和Keras 开发高级自然语言处理系统 218
12.1 Skip-Gram算法实现 218
12.2 使用RNN网络模型的基本原理 230
12.3 代码实现RNN网络 232
12.4 LSTM网络的结构原理 242
12.5 使用LSTM网络实现人机问答系统 247
第13章 使用TensorFlow和Keras 实现高级图像识别处理系统 256
13.1 实现艺术风格的转换 256
13.2 使用胶囊网络实现服装识别 266
13.3 使用TensorFlow API 实现精准物体识别 285
13.4 DeeDream:使用神经网络构造具有惊悚审美效果的艺术作品 293
第14章 使用TensorFlow和Keras 打造智能推荐系统 300
14.1 创造一个网易云音乐推荐引擎 300
14.2 使用TensorFlow构建高质量商品推荐系统 309
14.3 实现淘宝“拍立淘”图片搜索引擎 313
第15章 深度学习的重要概念和技巧总结 319
……
2013年3月,人类社会迎来了历史性的转折点。谷歌的AlphaGo干脆利落地击败了围棋世界冠军李世石,由此掀起了人们对人工智能的关注热潮。与此同时,也标志着人类正式进入了智能时代。
围棋向来被认为是计算机永远无法攻克的人类智慧阵地,甚至很多人一度把围棋的“棋道”看做是“天道”在人间的表现。计算机要在围棋上战胜人类的确很难。长久以来,由于围棋走法的变化万千,传统思维下的计算机程序根本无法应对围棋所展现的复杂局面。
然而谷歌的DeepMind团队转换了思维方式,将围棋看做是一道数学题,看成是一种数理统计规律在现实世界的呈现。从这个角度来看,围棋“道”的神秘面纱被揭开。其实它并不神秘,而是一种概率性呈现。我们可以应用概率论、数理统计等原理,通过构建模型,然后使用大量实际数据来训练模型。于是我们可以看到,在围棋千变万化表面下的不变本质其实是蕴含在模型中的。
人工智能解决问题的思维是如此美妙!它是一种全新的思维方式,通过数学模型的方式对万事万物进行解构,然后再用强大的算力抽象出隐藏在事物表象下的规律,因此它是一种高阶思维方式。当你掌握了人工智能的思维方式,特别是人工智能开发技术,那就相当于你能执时代趋势之牛耳,在未来的激烈竞争中立于不败之地。
对于IT技术人员而言,人工智能的入门曲线极为陡峭,想要掌握它,需要非常扎实的数学理论基础,而且还要把原有的离散化逻辑思维方式转变为数据流似的连续型思维方式。图书市场上虽然已经有了不少人工智能技术书籍,但它们都很少考虑到如何帮助读者顺利度过思维模式转变的困难,本书希望在这方面能做一些有益的尝试。
本书特色
? 内容丰富,不仅涵盖了掌握人工智能技术所需要的数学理论知识,而且还通过大量的项目实战将理论应用于实践。
? 直击人工智能学习的痛点和难点。知其然容易,而知其所以然很难。本书首先通过引入微积分、线性代数和概率论等数学理论知识,为读者掌握人工智能算法奠定了理论基础;然后详细地剖析了神经网络的运行原理,揭开了神经网络的神秘面纱;最后通过一系列项目实践,让读者通过编码的方式全面掌握深度学习的理论和技术。
? 强调理论与实践的结合。本书通过大量的项目实践,帮助读者反复“咀嚼”原本难啃的理论知识。
? 大量的实战案例能将深度学习从高台阶转换为低台阶,从而让读者能够循序渐进、一步一个脚印地进入人工智能的殿堂。
本书内容
本书共15章,首先从人工智能技术的数学基础讲起,然后剖析神经网络的运行原理,最后以大量的实战案例增强读者对理论的理解和把握。
第1章快速构建了一个能够实现手写数字图片识别的神经网络,让读者通过实践可以获得对人工智能的感性认识,从而为后续的理性认知打下基础。
第2章介绍了深度学习所需要的微积分知识,特别是详细介绍了导函数与极值点,以及如何利用梯度下降法求取函数的最小值点,这是深度网络进行训练的理论基础。
第3章介绍了深度学习所需要的线性代数知识,包括张量、向量及矩阵运算等多种概念。深度学习在应用时需要把数据向量化,因此本章对理解后续项目所需要的数据处理技术非常重要。
第4章介绍了神经网络的相关概念和体系结构,通过介绍神经元、激活函数、误差反向回传和梯度下降法等概念,让读者对神经网络的运行流程心知肚明。
第5章是第4章的延续和扩展,用编码的方式把第4章中介绍的概念和算法落地实现,从而通过实践加深对第4章中相关概念的理解和掌握。
第6~8章进入实战阶段,通过Keras框架实现了深度学习的具体应用。通过实现图像识别和自然语言处理等多个项目,帮助读者深入理解深度学习的开发技巧,特别是对Keras框架的运用。
第9、10章进入提升阶段,其中,第9章介绍了两种高级网络模式,带领读者理解编解码网络和对抗性生成网络,从而了解这两种网络如何产生相应的“黑科技”效应;第10章通过神经网络和Bellman函数来解决Cartpole问题。
第11~14章首先介绍了人工智能开发中常用的TensorFlow框架;然后进行了一系列有较高难度的项目实战,其中深入剖析了自然语言处理的算法细节,并尝试实现了高级图形图像处理系统,例如艺术风格的转换、图片和视频流中进行物体识别等;最后介绍了人工智能技术在电商领域中的商业化应用,也就是各种推荐系统的实现。
第15章对全书讲解过的概念和开发技巧进行了归纳和总结。
本书配套资源
本书涉及的所有源代码都能在Python 3.0及以上版本的运行环境中正确运行。这些源代码需要读者自行下载。请登录华章公司的网站www.hzbook.com,搜索到本书,然后单击“资料下载”按钮即可在本书页面上找到“配书资源”下载链接。
为了方便使用,作者将每章对应的源代码存放在相应的文件夹中,读者可以轻易地使用Anacoda编程环境进行加载和运行。
另外,由于有些项目对于没有GPU的读者而言运行时间会非常长,因此作者将训练好的网络以文件的方式进行了存储,读者在进行项目实践时可以按照本书中给出的方式加载相应的网络参数,从而跳过耗时的网络训练步骤,节省不必要的时间浪费。
本书读者对象
本书适合有志于投身人工智能领域的IT专业人士或相关院校的学生阅读。具体包括:
? Python程序员;
? 对人工智能编程感兴趣的人员;
? 神经网络研究人员;
? 对深度学习技术感兴趣的人员;
? 想转行到人工智能领域的技术人员;
? 深度学习项目研发人员;
? 高校相关专业的学生;
? 专业培训机构的学员。
阅读本书需要读者具有一定的数学基础。
本书作者
本书由陈屹编写。作者数学专业毕业,有十几年的软件开发经验,曾在微软、联想和RealNetworks等国内外知名公司从事开发工作,熟练掌握C 、Java和Python等开发语言,擅长算法逻辑和架构设计。
感谢在写作和出版过程中给予作者大量帮助的各位编辑!
由于作者水平所限,加之写作时间较为仓促,书中可能还存在一些疏漏和不足之处,敬请各位读者批评指正。
最后祝读书快乐!
作者
众所周知,深度学习的入门门槛颇高。陈屹编写的这本书颇有特色,主要体现在书中循序渐进、由浅入深地将一个难度颇大的技术话题分解成多个难度比较小的知识点,然后带领读者逐个击破,*后一举拿下深度学习这块非常难啃的骨头。这本书在高门槛前建立了多级容易跨越的台阶,让读者的学习曲线比较平滑,极大地降低了学习难度,推荐给有志于从事人工智能的工程师和爱好者研读。
——北京邮电大学国际学院企业顾问团专家 段超
在大数据和人工智能时代,技术趋势出现了范式变迁,软件开发的价值链出现了偏移。早前开发者掌握了常用的开发语言和一定的编码技术,能实现项目要求的功能,就能拿到不低的工资。如今随着人工智能时代的到来,只有那些数学基础和算法知识扎实的工程师,才可以利用趋势实现价值的进一步提升。本书详细阐述了深度学习的内在原理,并辅以多个项目实战案例增强读者的学习效果。任何想爬上技术食物链*的工程师都可以将本书作为学习和实践的指导书,提升自己在人工智能领域的能力,从而实现价值的跃迁。
——神兔未来科技有限公司创始人 王静逸
第1章 神经网络初体验
对于有过游泳学习经验的人而言,学习的第一课并不是听理论讲解或看视频演示,而是先跳入水中,感觉水的浮力,让身体充分感知水的流动,一旦身体有了切实体会,也就是感性认知,后面再进行动作理解等理性认知上的学习,就容易接受多了。
如果你连水都没碰过,就给你讲解一堆游泳理论,你只会雾里看花,越看越糊涂。传统教育的一大弊病在于没下水就给你灌输一大堆晦涩的理论,容易使学员对这些知识望而生畏,让他们感觉学游泳非常难。
我们不重复传统教育的老毛病,就让我们先“下水”,感觉水的浮力吧。
1.1 开发环境的安装
我们先快速构造一个能识别手写数字图片的神经网络,让大家感受一下现在看起来还有点神秘的神经网络到底是什么样子。本节我们先完成开发环境的安装。
我们使用的开发语言是Python,开发环境用的是Anacoda,请读者先安装相关软件。我们要使用的开发框架叫Keras,它的安装可以执行下面的命令:
install –c conda-forge keras
如果上面的命令执行顺利,会看到如图1-1所示的结果。
图1-1 Keras框架安装结果
这里需要强调一点,请读者朋友选择Linux作为开发环境,因为Keras框架对Windows系统的支持不是很好,使用Windows安装Keras容易出现各种问题。
1.2 快速构建一个识别手写数字图片的神经网络
人工智能的本质是分析海量数据,从数据中抽取出潜在的底层特征。要想让神经网络有好的结果,必须准备足够多的合乎规格的数据,因此第一步我们要做的是加载数据。在Anacoda中启动一个基于Python 3的编程页面,输入下面的代码用于加载数据。
#将手写数字图片数据集加载到程序中
from keras import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
print(train_images.shape)
mnist对应的是网络训练需要的数据集,它里面包含了几千张手写数字图片,同时每张图片都有一个标签,例如图片里面的数字是9,那么该图片就会对应一个数字标签9。神经网络编程需要的数据一定有如下特点:
数据分两部分,一部分用于训练网络,一部分用于检测网络的训练结果。上面的代码加载的数据中,(train_images,train_labels)用来训练网络,(test_images,test_labels)用于检验网络训练结果。
上面的代码运行后,结果如图1-2所示。
图1-2 代码运行结果1
第一行输出结果表明,train_images是一个三维数组,数组中包含60000个元素,每个元素是一个二维数组,数组的行和列都是28。其实train_images数组包含了60000张图片,每张图片的宽和高都是28个像素。
train_labels对应的是图片标签,读者可使用Print(train_labels)查看其内容,例如笔者打印后第一个元素5表示train_images数组中的一张图片是数字5。
接下来我们把测试数组中的第一张图片绘制出来,相应代码如下:
#从测试图片集中选取第一张图片并绘制出来
digit = test_images[0]
import matplotlib.pyplot as plt
plt.imshow(digit, cmap=plt.cm.binary)
plt.show()
上面的代码运行后,结果如图1-3所示。
图1-3 代码运行结果2
不难看出,图片表示的是数字7,它与其对应的标签test_label[0]表示的内容一致。人很容易识别出图片表达的含义,但机器如何识别呢?在人工智能,特别是深度学习发明之前,要做到这点几乎不可能,但有了神经网络后,机器识别图片就可以做到手到擒来。我们看看如何构建一个具备如此魔力的神经网络,相应代码如下:
#快速构建一个能识别手写数字图片的神经网络
from keras import models
from keras import layers
network = models.Sequential()
#增加含有512个神经元的网络层
network.add(layers.Dense(512, activation=’relu’, input_shape(28*28,)))
#由于要将图片识别成10种不同类别,因此最后一层有10个神经元
network.add(layers.Dense(10, activation=’softmax’))
现在我们不需要完全明白以上代码的含义,只需要大概了解就行。神经网络分很多层,代码构建的网络有两层,models.Sequential()表示网络层与层间的连接就像火车车厢一样首尾相连,第一层网络有512个节点,input_shape(28×28)表示它接收输入的数据格式是28×28个元素的二维向量,activation=’relu’表示一种数学运算,这里我们先不做关注。
第二层有10个节点,actvitation=’softmax’也表示一种特殊的数学运算。这10个节点将向外输出10个结果。
这里先展示一个神经网络运行的基本模型,如图1-4所示。如果不理解也没有关系,只是让读者心中有个概念就可以。
图1-4 网络逻辑模型
我们把训练数据从最顶层的网络层输入,在我们的问题中,输入就是train_images包含的数字图片。每层网络都包含很多个参数,输入的数据与这些参数做某种数学运算后,所得结果就传给下一层,你可以把网络层看作是哈希函数,将输入数据转换成另一种数据。
这种传递和运算一直传到最后一层,网络就输出它对输入数据的认知结果。例如我们输入的是数字图片,那么网络就输出它认为图片表示的数字,然后我们把网络输出的结果与正确结果比对,如果结论错误,那么就通过损失函数计算错误结果与正确结果的差距。然后差距会传给链路参数优化器,优化器会修改每一层网络里面的链路参数,使下次再次输入相同数据时,网络计算的结果与正确结果的差距进一步缩小,当差距为0时网络计算结果就是正确的。
这个流程往往需要进行成千上万次,只有每一层网络的链路参数修改得足够精确后,网络才能对输入的数据做出正确的识别。这些流程关乎一系列数学运算,我们在后续章节会深入讲解。
我们通过代码完成了图1-4的上半部分工作,接下来看看下半部分的实现,代码如下:
network.compile(optimizer=’rmsprop’, loss=’categorical_crossentropy’,metrics=
[‘accuracy’])
代码中的optimizer对应图1-4中链路参数优化器部分,loss对应损失函数部分,metrics表示如何衡量网络输出效果的好坏,如果想认为网络输出的结果与正确结果相同的比例越高就越好,那么metrics就设置为accuracy,就如同我们代码所做那样。
接下来我们要把数据提供给网络,以便它从数据中抽取普遍规律。在把数据输入给网络前,需要把数据做一下预处理,相关代码如下:
#在将图片输入到网络前,我们需要把图片像素点的值转换到区间[0,1]之间,如此有助于提高网络运行的准确性
train_images = train_images.reshape((60000, 28*28))
train_images = train_images.astype(‘float32’) / 255
test_images = test_images.reshape((10000, 28*28))
test_images = test_images.astype(‘float32’) / 255
代码中reshape(60000,28*28)的意思是,train_images原来含有60 000个元素,每个元素是28×28的二维数组,现在把它转换成含有60 000个元素,每个元素是28×28个元素的一维数组。由于数字图片是灰度图,每个像素点对应一个大小不超过255的整数值,代码train_images.astype(‘float32’) / 255将每个像素点对应的值转换为0~1之间的浮点数。
接下来我们把图片标记数组也做一些更改,例如test_images[0]数字图片是7,它对应的标签是整数7,我们把它改成一个含有10个元素的数组,然后把第7个元素设置为1,其余都设置成0。例如test_labels[0]的值由7转变为[0,0,0,0,0,0,0,1,0,0],相应代码如下:
”’
图片对应的标签是一个数值,用于表示图片内容。例如手写数字图片7,它对应的标签就是数字7,
但网络擅长于处理向量类型的数据,因为我们要将图片区分成10个分类,因此我们将标签转换为
含有10个元素的向量,对于数字7,我们将向量的第7个分量设置为1,其余设置为0
”’
from keras.utils import to_categorical
print(“before change: “, test_labels[0])
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
print(“after change: “, test_labels)
代码运行后,结果如图1-5所示。
图1-5 代码运行结果3
数据格式处理完毕后,用一行代码就能将数据输入网络:
”’
epochs = 5表示使用输入的数据循环训练网络5次,batch_size表示网络每次从
输入数据集中抽取出128份数据进行计算
”’
network.fit(train_images, train_labels, epochs = 5, batch_size = 128)
代码中,train_images是用于训练网络的图片,train_labels对应图片标记,batch_size=128表示网络一次读取128张图片进行运算,epochs=5表示对图片的读取计算反复进行5次。这些知识点在后面的章节会详细阐述。代码运行后,结果如图1-6所示。
图1-6 代码运行结果4
图1-6显示的是网络训练过程中的改进情况,acc表示正确率,也就是网络对训练数据中图片识别的正确率,该值随着循环次数的增加而不断改进。接着我们把测试数据传入网络,看看网络识别正确率如何,代码如下:
”’
让训练后的网络对测试数据进行预测,检验网络的预测准确率
”’
test_loss, test_acc = network.evaluate(test_images, test_labels, verbose=1)
print(test_loss)
print(‘test_acc’, test_acc)
以上代码运行后,结果如图1-7所示。
图1-7 代码运行结果5
运行结果表明,网络对测试数据图片识别正确率达到了97%以上,也就是10 000张测试图片,网络能正确识别9700张。网络识别率受到数据量、运算能力和调优方法等影响,后续章节中会深入分析这些因素。
最后我们选取一张数字图片输入到网络中看看识别结果,代码如下:
from keras.datasets import mnist
”’
上面的代码只是检测网络的预测准确率,为了更形象地展示网络识别能力,我们专门从测试数据集中
抽取一张图片,让网络判断图片里面的数字
”’
(train_images, train_labels), (test_images, test_labels) = mnist. load_
data()
digit = test_images[1]
plt.imshow(digit, cmap=plt.cm.binary)
plt.show()
#将抽取的图片输入网络,并让网络判断图片表示的数值
test_images = test_images.reshape((10000, 28*28))
res = network.predict(test_images)
for i in range(res[1].shape[0]):
if (res[1][i] == 1):
print(“the number for the picture is : “, i)
break
我们把数据重新加载一遍,然后先把测试图片数组中下标为1的图片绘制出来,predict用于识别图片数组中每一种图片所对应的数字,识别结果存储在数组res中,res数组每个元素对应一个含有10个元素的数组,假设识别结果是1,那么数组就把下标为1的元素设置为1,其余元素设置为0,也就是[0,1,0,0,0,0,0,0,0,0]。
下标为1的图片对应的识别结果是res[1],我们看看它对应数组中的哪个元素,那么网络就认为图片对应哪个数字。上面的代码运行后,结果如图1-8所示。
图1-8 代码运行结果6
从图1-8中我们看到,输入网络的数组图片表示数字2,网络识别结果也是2,所以网络的识别结果是正确的。在神经网络算法没有发明之前,实现这种功能的算法叫OCR,也就是光字符识别,其实现异常复杂,而且效果不佳,有了深度学习后,我们用不到百行的代码就实现了相应功能,由此可见深度学习的强大威力。
评论
还没有评论。