O'Reilly: Tensorflow.js学习手册
定 价:98 元
由于人们对AI的广泛需求以及JavaScript的无处不在,TensorFlow.js应运而生。利用这个Google框架,经验丰富的AI老手和Web开发人员可以帮助AI驱动的网站走向更光明的未来。在这本指南中,本书作者Gant Laborde(机器学习和Web领域Google开发者专家)为广大技术人员提供了一种端到端的实战方法来学习TensorFlow.js基础知识,数据科学家、工程师、Web开发人员、学习以及研究人员都能从中受益。
深入学习神经网络架构、DataFrame、TensorFlow Hub、模型转换、迁移学习等内容之前,首先将完成一些基本的TensorFlow.js示例。学完这本书之后,你会了解如何用TensorFlow.js构建和部署产品级深度学习系统。
前言如果你选择不做决定,那你还是做了一个选择。Geddy Lee(Rush 乐队)开始吧人们总喜欢当事后诸葛亮。我应该在价格还是X 的时候买一些比特币,或者如果我在创业公司Y 出名之前申请入职就好了。在这个世界里,我们总会遇到这种关键的时刻,会决定我们的将来是好是坏。时间从不倒退,但在我们前进的路上,会不断遭遇先前的选择带来的教训。你很幸运,能有这本书,能在这个时刻做决定。由于人工智能的发展,软件行业的基础正在发生改变。这些变化最终将由那些抓住机遇为世界塑造未来的人决定。机器学习是一种探索新的可能性的冒险,结合广泛普及的JavaScript,原有的桎梏在逐渐消失。就像我在AI 演讲中对观众所说的那样,你们不是只为了创建这样的软件而走到了今天这一步。现在就开始吧,看看我们的想象力会把我们带往何方。为什么选择TensorFlow.js?TensorFlow 是市场上最流行的机器学习框架之一。它由Google 的顶尖人才提供支持,并负责为世界上最具影响力的众多公司提供原动力。TensorFlow.js是TensorFlow 推出的无比强大的JavaScript 框架,超过了所有竞争对手。简而言之,如果你想得到JavaScript 框架的强大功能,只有一种选择,这就是TensorFlow.js。为什么要读这本书?两类读者会喜欢这本书的内容并从中受益:JavaScript 开发人员如果你熟悉JavaScript,但以前从未接触过机器学习,这本书将成为你的指南。它会介绍这个框架,让你在实践中通过创建令人兴奋的项目主动学习。通过各种项目的构建,你将了解机器学习的基础知识和实战经验。虽然我们不会回避数学或更深层次的概念,但也不会过于复杂化。如果你正在用JavaScript 构建网站,并想获得新的超能力,请阅读这本书。AI 专家如果你熟悉TensorFlow,甚至了解线性代数的基本原则,这本书将为你提供大量例子,展示如何将你的技能带入JavaScript。在这里,我们将利用TensorFlow.js 框架阐述、展示和描绘各个核心概念。这会帮助你将你的丰富知识应用于客户端浏览器或物联网(IoT)等边缘设备上的媒体。请阅读这本书,学习如何将你的创造力拓展到各种不同设备来提供丰富的交互体验。本书要求读者具备JavaScript 中级水平,能阅读和理解现代JavaScript 代码。本书概述编写本书的大纲时,我意识到必须做出选择。我可以完成一个旋风式的冒险,探索机器学习的各种应用,并用一些具体的小例子逐一介绍,或者我也可以专一地选择一条路,循序渐进地展示概念的逐步发展。在对我的朋友和关注者做过调查后,我发现大家更需要后者。为了力求简洁,保证这本书不超过1000 页,我决定删除所有JavaScript 框架,主要专注于以实战方式对AI 的视觉方面进行探索。每一章的末尾都有一些复习题和一个特别的思考题,来考察你的学习情况。思考题小节都经过精心设计,以巩固你学到的TensorFlow.js 知识。各章内容第1 章和第2 章首先介绍核心概念和一个具体的例子。这种阴阳法(概念 实例)反映了这本书的教学风格。每一章都建立在前几章提到的内容、术语和函数基础上。第3 章至第7 章会介绍如何理解和实现现有AI 工具和数据。你将创建出色的模型库,并且能够在项目中使用众多数据科学家创建的模型。第8 章到第11 章会赋予你创造力,帮助你有效地使用TensorFlow.js。你可以在JavaScript 中训练模型,我坚信这是整本书中最有趣也最激动人心的部分之一。第12 章是最后的挑战。最后一章提出了一个顶石项目,使你能够将本书所学融会贯通,以你自己的方式表述和运用所学的知识。学习目标读完这本书之后,不论你以前的经验如何,都将能够在TensorFlow.js 中查找、实现、调整和创建机器学习模型。你能够识别出网站中哪些方面要应用机器学习,并且能够具体实现。排版约定本书采用以下排版约定。斜体表示新术语、URL、电子邮件地址、文件名和文件扩展名。等宽字体(Constant Width)表示程序清单,在段落内表示程序元素,例如变量、函数名称、数据库、数据类型、环境变量、语句和关键字。粗体等宽字体(Constant width bold)表示应由用户原封不动输入的命令或其他文本。斜体等宽字体(Constant width italic)表示应该替换成用户提供值的文本,或者由上下文决定的值。使用代码示例这本书的补充材料(代码示例、练习等)可以从https://github.com/GantMan/learn-tfjs 下载。如果你有技术问题,或者使用代码示例时遇到问题,请发送电子邮件至bookquestions@oreilly.com。本书的目的是要帮助你完成工作。一般来讲,如果书中提供了示例代码,你可以在你的程序和文档中使用这些示例代码,不需要联系我们来得到许可,除非你直接复制了大部分的代码。例如,如果你在编写一个程序,使用了本书中的多段代码,这并不需要得到许可。但是出售或发行OReilly 书的示例代码则需要得到许可。回答问题时如果引用了这本书的文字和示例代码,这不需要得到许可。但是如果你的产品文档借用了本书中的大量示例代码,则需要得到许可。我们希望但不严格要求标明引用出处。引用信息通常包括书名、作者、出版商和ISBN。例如,Learning TensorFlow.js by Gant Laborde(OReilly).Copyright 2021 Gant Laborde, 978-1-492-09079-3。如果你认为你在使用代码示例时超出了合理使用范围或者上述许可范围,可以随时联系我们:permissions@oreilly.com。OReilly 在线学习平台(OReilly Online Learning)近40 年来,OReilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。OReilly 的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及OReilly 和200 多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。联系我们请把对本书的评价和问题发给出版社。美国:OReilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中国:北京市西城区西直门南大街2号成铭大厦C座807室(100035)奥莱利技术咨询(北京)有限公司针对这本书,我们还建有一个网页,列出了有关勘误、示例和其他信息。可以通过以下地址访问这个页面:https://oreil.ly/learning-tensorflow-js。如果对这本书有什么意见,或者询问技术上的问题,请发送电子邮件至errata@oreilly.com。要了解关于我们的图书和课程的新闻和信息,请访问我们的网站:http://www.oreilly.com。我们的Facebook: http://facebook.com/oreilly。我们的Twitter: http://twitter.com/oreillymedia。我们的YouTube: http://www.youtube.com/oreillymedia。致谢我想对OReilly 的编辑、制作人员和员工说声谢谢,在写这本书的过程中,与他们一起工作真是一件幸事。当然,要感谢杰出的Laurence Moroney,他是这本书序言的作者。在我的成长过程中,你一直是我的偶像,激励着我前进。我从你身上学到了很多,我将在你的机器学习课程和成果基础上继续成长。这本书的技术审校是我有幸共事过的最友好、最细致的人。Laura Uzcátegui你的善意而鼓舞人心的反馈读起来很温暖。你的直觉让我对这本书充满信心。Vishwesh Ravi Shrimali你听懂了我所有的笑话。你显然是一个睿智而友善的人,在这方面,你让我变得更好。感谢你的忠告和智慧。Jason Mayes在你被选为这本书的技术编辑之前我就认识你了,所以我不仅把你当作队友,更当作朋友,共同让这本书尽可能地完美。你的反馈很细致,很明智,绝对不可替代。衷心感谢你。Axel Damian Sirota我能从你的每一个反馈中感受到你的热忱和支持。你投入大量时间给予了明智和善意的建议。你的艺术才能绝对是对这本书的一份难得的礼物。Lee Warrick你不断地审查和质疑,让我更好地完成我的所有工作。这本书是我因你的洞察力而取得成就的最新例证。Michele Cronin我喜欢我们的每一次会谈。你简直是快乐之源!谢谢你的坦诚。你让这本书读起来毫不费力。我永远也不知道你是怎么做到的。特别感谢Frank von Hoven III,感谢你提出的所有问题,感谢你一页一页手写的反馈(见图1)。你的才华和诚实一直在有力地鼓舞着我。最后,感谢我亲爱的家人,他们尽量避免打断我,但也知道我什么时候需要打断。Alicia,亲爱的,你比我自己更了解我。每当我需要动力时,你用提神的咖啡给我惊喜,而当我需要停下来休息时,你就会给我一杯美酒。每一天的美好都是因为你。
Gant Laborde是Infinite Red的创始者,同时也是一位导师、兼职教授、作家和获奖演讲者。作为Google开发者专家,他从多个角度介绍了TensorFlow.js,使这个概念更容易理解。
目录序 .1前言 .3第1 章 AI 是魔法 . 111.1 JavaScript 的AI 之路 . 121.2 什么是智能? 131.3 AI 历史 . 151.4 神经网络 161.5 如今的AI 191.6 为什么选择TensorFlow.js? . 201.6.1 强大支持. 201.6.2 在线阅读. 211.6.3 离线阅读. 211.6.4 隐私 211.6.5 多样性 . 211.7 机器学习类型 221.7.1 快速定义:有监督学习 231.7.2 快速定义:无监督学习 231.7.3 快速定义:半监督学习 231.7.4 快速定义:强化学习 241.7.5 信息过载. 251.8 AI 无处不在 251.9 框架全貌 26什么是模型? 271.10 本书内容 281.10.1 相关代码 291.10.2 各章小节 321.10.3 常见AI/ML 术语 . 321.11 本章复习 36复习题 . 36第2 章 TensorFlow.js 简介 382.1 你好,TensorFlow.js 382.2 利用TensorFlow.js 402.3 准备TensorFlow.js 412.4 在浏览器中设置TensorFlow.js . 422.4.1 使用NPM 432.4.2 包含脚本标记 432.5 在Node 中设置TensorFlow.js 442.6 检验TensorFlow.js 是否正常工作 46下载和运行示例 . 472.7 真正使用TensorFlow.js 492.7.1 Toxicity 分类器 502.7.2 加载模型. 562.7.3 分类 582.8 自己动手 592.9 本章复习 592.9.1 思考题: 卡车警报! . 592.9.2 复习题 . 60第3 章 张量介绍 623.1 为什么使用张量? 623.2 你好,张量 . 633.2.1 创建张量. 653.2.2 数据练习的张量 . 683.3 张量闪亮登场 713.3.1 张量提供速度 713.3.2 张量提供直接访问 . 713.3.3 张量批处理数据 . 723.4 内存中的张量 723.4.1 撤销张量. 733.4.2 自动张量清理 743.5 张量获取 76获取张量数据 773.6 张量操作 793.6 1 张量和数学 793.6.2 使用张量实现推荐 . 813.7 本章复习 873.7.1 思考题: 是什么让你如此独特? 873.7.2 复习题 . 88第4 章 图像张量 904.1 视觉张量 914.2 快速图像张量 944.3 JPG、PNG 和GIF,天呐! 974.3.1 浏览器: 张量到图像 . 984.3.2 浏览器: 图像到张量 . 994.3.3 Node: 张量到图像 1024.3 4 Node: 图像到张量 1064.4 常见图像修改 . 1084.4.1 镜像图像张量 1084.4.2 调整图像张量大小 1114.4.3 裁剪图像张量 1144.4.4 新的图像工具 1154.5 本章复习 1154.5.1 思考题: 随机张量排序 . 1164.5.2 复习题 117第5 章 模型介绍 1195.1 加载模型 1205.1.1 通过公共URL 加载模型 . 1215.1.2 从其他位置加载模型 . 1235.2 第一个模型 1245.2.1 加载、编码和询问模型 1255.2.2 解释结果 1285.2.3 清理棋盘 1305.3 第一个TensorFlow Hub 模型 . 1305.3.1 探索TFHub 1315.3.2 使用Inception v3 . 1325.4 第一个叠加模型 1345.4.1 本地化模型 . 1355.4.2 标记检测结果 1375.5 本章复习 1405.5.1 思考题: 可爱的脸 1415.5.2 复习题 142第6 章 高级模型和UI . 1436.1 再谈MobileNet 144SSD MobileNet . 1466.2 包围框输出 1496.2.1 读取模型输出 1496.2.2 显示所有输出 1516.3 清理检测结果 . 1526.3.1 质量检查 1536.3.2 IoU 和NMS 1546.4 增加文本叠加 . 1596.4.1 解决低对比度问题 1596.4.2 解决绘制顺序问题 1616.5 连接到网络摄像头 1646.5.1 从图像到视频 1656.5.2 激活网络摄像头 1656.5.3 绘制检测结果 1666.6 本章复习 1686.6.1 思考题: 头号侦探 1686.6.2 复习题 169第7 章 建模资源 1707.1 利用外部模型 . 1717.1.1 模型动物园 . 1717.1.2 转换模型 1717.2 第一个定制模型 1757.2.1 认识Teachable Machine 1767.2.2 使用Teachable Machine 1787.2.3 采集数据和训练 1797.2.4 验证模型 1817.3 机器学习问题 . 1847.3.1 少量数据 1847.3.2 差数据 1847.3.3 数据偏差 1857.3.4 过拟合 1857.3.5 欠拟合 1867.4 获得数据集 187流行的数据集 1887.5 本章复习 1907.5.1 思考题: R.I.P. 转换MNIST 1907.5.2 复习题 191第8 章 训练模型 1928.1 训练基础 1938.1.1 数据准备 1948.1.2 设计模型 1958.1.3 明确学习指标 1978.1.4 训练模型 1998.1.5 综合 1998.2 非线性训练基础 2028.2.1 收集数据 2038.2.2 为神经元增加激活函数 2048.2.3 监视训练 2068.2.4 改进训练 2088.3 本章复习 2148.3.1 思考题: 模型架构师 2148.3.2 复习题 215第9 章 分类模型和数据分析 . 2179.1 分类模型 2189.2 泰坦尼克号 220Titanic 数据集 2219.3 Danfo.js . 2229.3.1 准备Titanic 数据 . 2239.3.2 使用Titanic 数据进行训练 . 2299.4 特征工程 2329.4.1 Dnotebook 2329.4.2 Titanic 数据可视化 . 2349.4.3 创建特征(即预处理) 2379.4.4 完成特征工程后的训练结果 2409.4.5 审查结果 2409.5 本章复习 2419.5.1 思考题: 开船 . 2429.5.2 复习题 242第10 章 图像训练 . 24410.1 理解卷积 . 24510.1.1 卷积简要总结 . 24610.1.2 增加卷积层 24810.2 理解最大池化 24910.2.1 最大池化简要总结 25010.2.2 增加最大池化层 25110.3 训练图像分类 252处理图像数据 25310.4 戴上分院帽 25410.4.1 开始 . 25610.4.2 转换图像文件夹 25810.4.3 CNN 模型 . 26110.4.4 训练和保存 26510.5 测试模型 . 26610.5.1 建立一个绘图板 26710.5.2 读取绘图板 26810.6 本章复习 . 27110.6.1 思考题: 保存魔法 27110.6.2 复习题 272第11 章 迁移学习 . 27411.1 迁移学习如何工作? 275迁移学习神经网络 . 27611.2 简单的MobileNet 迁移学习 . 277TensorFlow Hub 象棋识别! 27911.3 利用分层模型实现迁移学习 . 28411.3.1 删减MobileNet 模型层 28511.3.2 分层特征模型 . 28711.3.3 统一模型 28711.4 不需要训练 288简单的KNN:兔子和跑车 . 28911.5 本章复习 . 29211.5.1 思考题: 快速学习 . 29311.5.2 复习题 294第12 章 Dicify: 顶石项目 29512.1 骰子挑战 . 29612.2 计划 29712.2.1 数据 . 29712.2.2 训练 . 29912.2.3 网站 . 29912.3 生成训练数据 30012.4 训练 30412.5 网站界面 . 30612.5.1 分解成骰子 30712.5.2 重构图像 30912.6 本章复习 . 31112.6.1 思考题: 简单的二值化 31312.6.2 复习题 314后记 315附录A 复习题答案 319附录B 思考题答案 326附录C 专利和授权 337