科技>计算机>计算机科学
TensorFlow.NET 实战  

TensorFlow.NET 实战  "

作者:仇华,陈海平
ISBN:9787121443091
定价:¥129.0
字数:786千字
页数:548
出版时间:2022-10
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

本书基于 TensorFlow.NET 框架,详细介绍了.NET 平台下深度学习的基础原理和应用技术,不仅阐述了算法原理,还演示了实践代码和运行效果,其中完整示例主要采用的语言为 C#和 F#。全书分为 3 个部分:第一部分介绍了核心 API 的用法和基础示例,包括数据类型、张量、Eager Mode、自动求导、线性回归、逻辑回归、tf.data、深度神经网络和 AutoGraph 机制,读者可以通过学习这一部分内容快速入门;第二部分重点演示了.NET Keras 的用法,包括模型、网络层、常用 API、模型搭建和模型训练,读者可以由此掌握主流的深度学习方法;第三部分主要是生产应用和案例实操,包括 GPU 环境搭建、自定义数据集训练、图像分类、目标检测、迁移学习、自然语言处理、生成对抗网络和 F#应用案例,每个案例均有完整的代码。本书涵盖深度学习的方法和实践,主要面向在校大学生、生产技术人员和研究人员,适合具备.NET 编程基础,希望通过.NET 技术开发深度学习应用的读者阅读。

前言

推荐序 在 IT 技术飞速发展的今天,云计算、人工智能、大数据和云原生应用等新兴技术的发展为 我们的生活带来了翻天覆地的变化,也对软件开发者提出了更高的要求,特别是在人工智能开 发领域,应运而生的新概念让人目不暇接。 作为一个.NET 开发者,在开发机器学习项目的过程中会遇到很多困难。主要原因之一是我 们认为 C#不是适合该工作的编程语言,Python 和 R 语言才是,而 C#语言更适合用于机器学习 的前期数据分析阶段。 不知道各位有没有思考一下为什么微软公司要在.NET 平台上引入机器学习,以及我们为什 么要探索机器学习。 一个原因是,机器学习技术正在跨越鸿沟。事实上,这个鸿沟是非常难以跨越的,之所 以那么多的高科技产品只在小众范围内流传,而没有被主流市场接受,是因为相关技术没有 跨越这个鸿沟。最早的机器学习算法可以追溯到 20 世纪初,到今天为止,已经过去了 100 多 年。从 1980 年机器学习技术成为一个独立的方向开始算起,到现在已经过去了 40 多年。在 这 100 多年中,经过一代又一代人的努力,近几年机器学习技术终于跨越了鸿沟。跨越鸿沟 意味着机器学习技术正在从仅有少数人掌握的时代过渡到大多数人掌握的时代。微软公司的 CEO 萨提亚·纳德拉在他写的《刷新:重新发现商业与未来》一书中提出“民主化”的人工 智能,ML.NET 正是要完成这项使命的载体之一。如何实现人工智能“民主化”,让它惠及每 个人?如何让每个人打造自己的人工智能?在医疗、教育和零售机构中,打造一个相适应的 人工智能是至关重要的。当我们谈人工智能的时候,不能空谈任何一个人工智能公司,而要 “民主化”人工智能,让人工智能真正落地应用到个人。 我们应该探索机器学习的另一个原因是,作为人类,我们会产生大量数据,却无法处理全 部数据;从技术上讲,我们面临无法从数据中提取信息的问题。此时,机器学习模型可以帮助 我们处理海量的数据。 在.NET 生态上,人工智能领域有一个开源团队 SciSharp Stack,他们为 TensorFlow 提供 了.NET Standard Binding,旨在用 C#实现完整的 TensorFlow API,允许.NET 开发人员使用跨平 台的.NET Standard 框架开发、训练和部署机器学习模型。他们打造了一个完全属于.NET 开发 人员自己的机器学习平台——TensorFlow.NET,对于 C#开发人员来说,这是一个零学习成本的 机器学习平台,该平台集成了大量的 API 和底层封装,力图使 TensorFlow 的 Python 代码风格 和编程习惯无缝移植到.NET 平台上。 虽然有大量的 TensorFlow 文档可以参考,但是对于初学者来说,其中涉及的知识难免晦涩, 特别是对于.NET 的开发人员来说,缺少便于上手的指南及来自生产实践的案例总结。因此,一 本系统地介绍 TensorFlow.NET 的图书是很有必要的,这样可以让更多的.NET 开发人员把人工 智能应用于生产实践之中。 这是本书的目的和价值。本书采用.NET 5.0 进行实践,可能在本书发布的时候.NET 6.0 已经发布,代码从.NET 5.0 升级到.NET 6.0 是很平滑的,请务必一边实际运行代码,一边阅 读本书。 微软 MVP、腾讯云 TVP、华为云 MVP 张善友 序一 几年前一次偶然的机会接触到机器学习领域,对于我这样习惯了十几年强规则型机器编码 的“老码农”来说,就像发现了一块新大陆。我充满了好奇,于是迫不及待地开启了机器学习 探索之旅。在经历了满世界找文档、看论文和研究算法后,我渐渐地发现了自己力所能及并可 能有所贡献的机会。在互联网上能找到的有关机器学习方面的示例中,几乎 99%的示例都是用 Python 写的,剩下的是用 C/C++写的,可以说是 Python“独霸天下”的局面,让人误以为做机 器学习项目就必须用 Python。这个情况让我萌生了移植一些常用的机器学习库到.NET 生态的想 法,最初的想法是通过迁移这些库来加深对机器学习的掌握程度,揭开“时髦”词汇人工智能 (AI)和机器学习(ML)背后的秘密。 目前机器学习流行的基础库 NumPy 是首先要进行移植的,于是产生了 NumSharp 这个张量 计算库,移植过程并不是很顺利,因为张量计算对于我来说是一个全新的概念。要实现一个和 现有 NumPy 库可以相互替换的.NET 库比想象中更难,最具有挑战性的是它对函数性能的要求 很高。最后的效果是只移植了表面上的接口和一小部分 API,满足了少部分模型的计算要求, 但性能较差,.NET 天生在这方面不能和 C/C++ 相提并论,虽然有 SIMD 的加持,但是实现起 来仍然非常不方便。 随着对机器学习的不断深入了解,我逐步接触了神经网络和深度学习知识。神经网络带我 进入了一个魔幻的世界,里面充满未知。当时谷歌的 TensorFlow 开源深度学习框架正火遍全球, 同时期的 PyTorch 崭露头角,所以第一个进入目标移植深度学习库的就是 TensorFlow 了,我称 之为 TensorFlow.NET。 移植工作从“Hello World!”开始,API 逐步增多,复杂性随之增加,从静态图到动态图, 再到上层的 Keras,基本上都实现了。在代码编写的过程中,因为项目从一开始就是在 GitHub 上开源的,所以我不断收到各种各样的使用反馈。正因为有这样的反馈互动,我才有了不断 完善这个项目的动力。在此过程中,我结识了仇华——在图像识别领域深耕多年的朋友,并 产生了应该编写一本关于如何使用 TensorFlow.NET 的书籍的想法,把现有的示例代码通过图 文讲解的方式呈现给读者,于是有了这本《TensorFlow.NET 实战》。书中详细介绍了从张量计 算到神经网络模型的搭建,从理论编码到工业场景重现的剖析,示例涵盖线性回归、逻辑回 归、全连接神经网络、文本分类、图像分类和迁移学习等,是帮助.NET 开发者进入机器学习 世界的宝贵资料。 最后要感谢在项目编码和宣传上给予过我帮助的人,特别是家人对我在开源项目方面的支 持,因为做开源项目几乎占用了我所有的业余时间和精力,照顾 3 个孩子的重任都由我太太承 担了。 SciSharp Stack 开源社区创办者 陈海平 序二 我写这本书的初衷原本是为 SciSharp Stack 开源社区贡献一点自己的力量,为国内使用 C# 开发 TensorFlow 深度学习模型的小伙伴们提供一个快速入门的指南。写着写着,我发现很多语 法和代码需要搭配理论知识才能更好地读懂,因而逐渐添加了很多机器学习和深度学习的理论 知识,包括在 TensorFlow 2.x 之后出现的一些新特性的专题说明,如 Eager Mode、AutoGraph 和 Keras 等。同时考虑到本书的定位,尽量避开了复杂数学公式的推导,而以 API 文档说明和 实践应用为主。作为市面上第一本,也是目前唯一的一本 TensorFlow.NET 开源库官方出品的专 门面向.NET 开发者的 TensorFlow 中文开发书籍,很多社区的小伙伴和.NET 开发者在本书的编 写过程中提供了宝贵的建议,在大家的热切推荐下,书中增加了大量的案例实践,包括图像分 类、目标检测、自然语言、生成对抗等不同领域的应用。 2021 年年底,这本入门手册终于接近完成。记得我是在 2019 年 11 月认识的陈海平先生, 对于我个人来说,他是我进入开源社区这个新世界的领路人。当时我在实际项目开发过程中遇 到了一个比较困难的抉择(后来发现几乎所有.NET 开发者在实际项目中应用深度学习框架都会 遇到这个痛点),就是现有深度学习框架以 Python 语言开发为主和实际工业项目以 C#语言开发 为主之间的矛盾。网络上有很多的解决方案。大约花了 1 个月的时间,我对常见的各种解决方 案进行了现场项目测试和多维度的比较,综合考虑深度学习模型 GPU 训练的必要性和在实际项 目中部署的便利性后,选择了 TensorFlow.NET 作为自己的项目开发框架。找准方向后,我深入 学习和了解了这个框架,惊喜地发现这个框架的创立者陈海平先生是一名华人,并且几乎凭一 己之力创建了 TensorFlow.NET 这个超级庞大而复杂的项目,陈海平先生的开发能力和开源精神 令我敬佩不已,他在我心中成为大神级的存在,本书中的案例代码几乎都是他开发的。 从 2019 年加入 SciSharp Stack 开源社区起,在大约 1 年的时间里,我陆续发表了一些 TensorFlow.NET 相关的技术博客文章,并在一些大学校园和研究生院里给学校的老师和同学们 宣导 TensorFlow.NET 在实际工业项目中的应用,也在微软年度的.NET 大会上给大家做了 TensorFlow.NET 的专题报告。作为谷歌苏州 TensorFlow User Group 的创立者,我在每一次社区 的技术公益活动中都会对 TensorFlow.NET 进行推广和入门应用讲解。期间,我也经常和海平聊 起要给 TensorFlow.NET 出一个官方教程,并在 GitHub 上创建了库进行教程的更新,断断续续 地出了一些入门视频教程和技术文章,但迟迟没有系统地开展出书的工作。转折点大约在 2020 年的 12 月,F#语言之父 Don Syme 大神加入了我们的 SciSharp Stack 开源社区,带来了 F# 语言爱好者的开发团体。至此,C#和 F#这两大.NET 核心开发语言的开发者们都加入了我们的 社区。随着社区成员的壮大和热度的提升,出书的任务迫在眉睫,官方教程的需求愈加热烈, 因此我们打算静下心来快速地把这个教程制作完成。 出书比想象中要难,在差不多 1 年半的时间里,这件事几乎占用了我所有的个人业余时间, 写书过程中的点滴故事我至今记忆犹新。在每个夜深人静的晚上,查询资料、斟酌语词、编写 测试代码,为了确保这类技术书籍的准确性,书中的每个案例和代码都需要仔细地编写完,并 在机器上实际跑一遍,不断调试优化,确保读者在实践过程中没有错误。可以说,这是我目前 做过的单个工程量最大的事情,但是回首看,也收获了很多,对于 TensorFlow 的整体框架有了 更系统的认识,对机器学习和深度学习的发展历史和理论结构也有了更深入的了解。为了讲清 楚 F#的应用,我学习了一门新的语言,深深感受到了函数式编程的魅力所在。 IT 技术更新飞快,深度学习领域的各种创新是层出不穷的,在本书的编写过程中, TensorFlow 从 1.x 升级到了 2.x,新增了很多功能和特性,.NET 也推出了.NET 5.0,.NET 6.0 的 预览版也发布了,正式版不久也要面世。本书尽量做到与时俱进,书中的代码主要基于 TensorFlow 2.x 和.NET 5.0,读者可以根据时下最新的语言和框架版本进行升级应用。本书适用 于有一些机器学习或深度学习基础,希望在实际生产项目中应用 TensorFlow 的.NET 开发者和 工程师。在编写此书的过程中,由于个人能力有限,书中肯定有很多的不足和缺陷,也有很多 案例没有来得及开发完成,包括时序分析和时下比较热门的 Transform 模型等,希望广大读者 能提供宝贵的意见和想法,我们期望有机会在下一版本或英文版中得到完善。 本书的出版得到了 SciSharp Stack 社区、微软技术俱乐部、TensorFlow User Group 的多位 小伙伴的帮助和支持,他们不但为本书的示例代码提供了建议和测试结果,而且提供了本书的 方向和需求点,为本书的完成做出了重要贡献。 本书中的案例代码主要来自 SciSharp Stack Examples,其中 C#部分主要由陈海平提供,F# 部分主要由 Vianney P.提供。生成对抗网络的案例代码由社区成员彭波提供,卷积神经网络可视 化的案例代码和张量查看器由社区成员久永提供,煤矿矿区的时间序列预测应用案例代码由社 区成员孙翔宇提供。在此特别表示感谢。 本书的出版过程得到了微软技术俱乐部的潘淳校长、盛派网络科技的苏震巍主席、.NET 圈子知名的微软 MVP 张善友队长和数据工程畅销书作者齐伟老师的共同指导和大力帮助。在 此一并表示由衷的谢意。 衷心感谢电子工业出版社的符隆美编辑对本书的细致编校及出版流程跟进。 感谢我的太太在我写书过程中给予的关注和大力支持,因为写书占据了我太多的业余时间 和精力,家里两个孩子全交给太太照顾了。依稀记得,2019 年的大年夜晚上,在老家父母的家 中,我刚刚完成了第 2 篇关于 TensorFlow.NET 的案例文章,并在笔记本电脑上使用 GPU 成功测试了代码,而窗外,我的太太正带着两个孩子在放烟花。也记得,不知多少个伏案疾书的夜 晚,每当完成一个章节并提交到了 GitHub,我都会在写书计划表上划去一项,并在心里暗自庆 祝进度又推进一格,在此真诚地感谢太太给我创造的专注的写作环境。 最后,感谢所有支持并帮助我们社区的朋友。 SciSharp Stack 开源社区核心组成员 仇华(Henry)

目录

第一部分 TensorFlow.NET API 入门 第 1 章 TensorFlow.NET 介绍 ................................................................................... 2 1.1 TensorFlow.NET 特性 .................................................................................................. 2 1.2 TensorFlow.NET 开源库结构 ...................................................................................... 3 第 2 章 数据类型与张量详解 ........................................................................................ 6 2.1 数据类型 ...................................................................................................................... 6 2.2 张量详解 ...................................................................................................................... 7 2.3 常量与变量 .................................................................................................................. 8 2.4 字符串常见操作 .........................................................................................................11 2.5 基本张量操作 ............................................................................................................ 14 2.6 维度变换 .................................................................................................................... 19 2.7 合并分割 .................................................................................................................... 22 2.8 广播机制 .................................................................................................................... 24 第 3 章 Eager Mode 详解 ............................................................................................ 28 3.1 Eager Mode 说明 ........................................................................................................ 28 3.2 Eager Mode 比较 ........................................................................................................ 29 3.3 Eager Mode 数值运算 ................................................................................................ 31 3.4 Eager Mode 张量降维运算 ........................................................................................ 32 3.5 Eager Mode 矩阵运算 ................................................................................................ 35 3.6 print 与 tf.print 特性对比 ........................................................................................... 37 第 4 章 自动求导原理与应用 ....................................................................................... 44 4.1 机器学习中的求导 .................................................................................................... 44 4.2 简单函数求导 ............................................................................................................ 45 4.3 复杂函数求偏导 ........................................................................................................ 46 第 5 章 线性回归实操 ...................................................................................................... 48 5.1 线性回归问题 ............................................................................................................ 48 5.2 TensorFlow 下的线性回归 ........................................................................................ 50 5.3 C#和 Python 的性能比较 .......................................................................................... 54 第 6 章 MNIST 手写字符分类逻辑回归 ............................................................................ 56 6.1 经典的 MNIST 手写字符分类问题 .......................................................................... 56 6.2 逻辑回归代码实操 .................................................................................................... 63 第 7 章 tf.data 数据集创建与预处理 ................................................................................ 77 7.1 tf.data 介绍 ................................................................................................................. 77 7.2 tf.data 数据集创建 ..................................................................................................... 78 7.3 tf.data 数据预处理 ..................................................................................................... 81 7.4 tf.data 数据使用 ......................................................................................................... 89 第 8 章 深度神经网络实践 ............................................................................................................ 91 8.1 深度神经网络介绍 .................................................................................................... 91 8.2 TensorFlow.NET 代码实操 1:DNN with Eager ...................................................... 93 8.3 TensorFlow.NET Keras 模型搭建的 3 种方式 ........................................................ 105 8.4 TensorFlow.NET 代码实操 2:DNN with Keras .....................................................116 第 9 章 AutoGraph 机制详解 .............................................................................................. 131 9.1 AutoGraph 机制说明 ............................................................................................... 131 9.2 AutoGraph 机制原理 ............................................................................................... 144 9.3 AutoGraph 编码规范 ............................................................................................... 146 第二部分 .NET Keras 简明教程 第 10 章 Keras 简要介绍 ................................................................................................... 149 10.1 Keras 特性 .............................................................................................................. 149 10.2 Keras 版本说明 ...................................................................................................... 150 第 11 章 模型与层 ................................................................................................................... 152 11.1 Keras 常用的模型与层 .......................................................................................... 152 11.2 自定义层 ................................................................................................................ 155 11.3 自定义模型 ............................................................................................................ 157 11.4 模型常用 API 概述 ................................................................................................ 160 第 12 章 Keras 常用 API 说明 ........................................................................................... 167 12.1 回调函数 ................................................................................................................ 167 12.2 数据集预处理 ........................................................................................................ 169 12.3 优化器 .................................................................................................................... 172 12.4 损失函数 ................................................................................................................ 175 12.5 评估指标 ................................................................................................................ 180 第 13 章 Keras 搭建模型的 3 种方式 ............................................................................ 184 13.1 Sequential API 方式 ............................................................................................... 185 13.2 Functional API 方式 ............................................................................................... 186 13.3 自定义模型 ............................................................................................................ 188 第 14 章 Keras 模型训练 ..................................................................................................... 194 14.1 内置 fit 训练 ........................................................................................................... 194 14.2 自定义训练 ............................................................................................................ 196 第三部分 生产应用与案例 第 15 章 CPU 和 GPU 环境下的 TensorFlow.NET 应用 ........................................... 201 15.1 CPU 和 GPU 环境搭建及安装 .............................................................................. 201 15.2 TensorFlow.NET 的图像利器 SharpCV ................................................................ 221 第 16 章 工业生产环境应用案例 ......................................................................................... 228 16.1 工业机器视觉领域应用 ........................................................................................ 228 16.2 工业时间序列预测领域应用 ................................................................................ 247 第 17 章 在 C#下使用 TensorFlow.NET 训练自己的数据集 .......................................... 254 17.1 项目说明 ................................................................................................................ 254 17.2 模型介绍 ................................................................................................................ 254 17.3 数据集说明 ............................................................................................................ 256 17.4 代码说明 ................................................................................................................ 256 17.5 总结 ........................................................................................................................ 274 第 18 章 视觉图像分类 ....................................................................................................... 275 18.1 卷积神经网络实现图像分类 ................................................................................ 277 18.2 卷积神经网络详解 ................................................................................................ 287 18.3 深入了解卷积神经网络 ........................................................................................ 319 第 19 章 视觉目标检测 ................................................................................................................ 347 19.1 视觉目标检测原理简述 ........................................................................................ 347 19.2 YOLO v3 模型推理实践 ....................................................................................... 360 19.3 YOLO v3 模型训练实践 ....................................................................................... 374 第 20 章 迁移学习应用 ................................................................................................................ 393 20.1 迁移学习原理简述 ................................................................................................ 393 20.2 Inception v3 网络 ................................................................................................... 396 20.3 迁移学习代码实操 ................................................................................................ 400 第 21 章 自然语言处理 ................................................................................................................ 426 21.1 自然语言处理简述 ................................................................................................ 426 21.2 词向量 .................................................................................................................... 429 21.3 文本分类代码实操 ................................................................................................ 446 第 22 章 生成对抗网络 ................................................................................................................ 467 22.1 生成对抗网络简述 ................................................................................................ 467 22.2 生成对抗网络实战案例 ........................................................................................ 479 第 23 章 F#应用案例 .................................................................................................................... 500 23.1 F#简明教程 ............................................................................................................ 500 23.2 F#案例实践 ............................................................................................................ 513 参考文献 ............................................................................................................................................ 534

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个