
致谢
本书整体结构得益于弗朗索瓦·肖莱所著的《Python 深度学习》一书,不同之处就是将后者中的代码用 JavaScript 语言进行重写,为 JavaScript 生态增添了很多全新的内容,展现了深度学习领域中的一些新进展。当然,如果没有弗朗索瓦·肖莱在 Keras 上所做的先驱性工作,就不会有本书的诞生,也不会有 TensorFlow.js 的整个高阶 API。
感谢谷歌 TensorFlow.js 团队同事的强力支持,让我们在编写本书以及所有相关代码的过程中感受到快乐和满足。感谢 Daniel Smilkov 和 Nikhil Thorat,他们在低阶 WebGL 内核和反向传播算法上的开创性工作和重要贡献,为构建模型以及训练模型打下了坚实的基础。感谢 Nick Kreeger,他在 Node.js 对 TensorFlow 的 C 语言库绑定方面所做的努力,实现了在浏览器端和 Node.js 端使用同样的代码运行神经网络。感谢 David Soergel 和 Kangyi Zhang,本书第 6 章得益于他们所做的 TensorFlow.js 数据 API。感谢 Yannick Assogba,他所做的数据可视化工作支撑了第 7 章的创作。感谢 Ping Yu,他在 TensorFlow Ops 层接口方面的工作,对于第 11 章中描述的性能优化技术是不可或缺的。感谢 Ann Yuan,正是由于她专注于性能优化工作,因此本书示例的运行速度能够达到今天的程度。同时,感谢 Sarah Sirajuddin、Sandeep Gupta 和 Brijesh Krishnaswami,TensorFlow.js 项目的长期成功与他们的领导是分不开的。
感谢 D. Sculley,多亏了他仔细审阅每一个章节,保障我们的写作免于偏离正确轨道。特别感谢 Fernanda Viegas、Martin Wattenberg、Hal Abelson 和很多其他的谷歌同事,他们对本书的创作给予了极大的鼓励。感谢弗朗索瓦·肖莱、Nikhil Thorat、Daniel Smilkov、Jamie Smith、Brian K. Lee、Augustus Odena 和 Suharsh Sivakumar,他们的详细审阅与反馈让我们的文笔和内容有了质的改变。
与全世界的软件开源社区一起工作和互动,是只有像 TensorFlow.js 这样的项目才有的独特乐趣。TensorFlow.js 有幸拥有一群才华横溢又干劲十足的社区贡献者,其中有 Manraj Singh、Kai Sasaki、Josh Gartman、Sasha Illarionov、David Sanders、syt123450@,等等。他们孜孜不倦的工作拓展了 TensorFlow.js 的功能并提高了软件的质量,其中 Manraj Singh 还贡献了本书第 3 章使用的网络钓鱼检测(phishing-detection)示例。
感谢 Manning 出版社的编辑团队,感谢 Brian Sawyer、Jennifer Stout、Rebecca Rinehart、Mehmed Pasic 等人的辛勤工作,他们的努力让我们可以专注于创作本书的内容。感谢 Marc-Philip Huget 在开发过程中提供的技术审阅支持。还要感谢其他所有的审阅者:Alain Lompo、Andreas Refsgaard、Buu Nguyen、David DiMaria、Edin Kapic、Edwin Kwok、Eoghan O’Donnell、Evan Wallace、George Thomas、Giuliano Bertoti、Jason Hales、Marcio Nicolau、Michael Wall、Paulo Nuin、Pietro Maffi、Polina Keselman、Prabhuti Prakash、Ryan Burrows、Satej Sahu、Suresh Rangarajulu、Ursin Stauss 和 Vaijanath Rao,是他们的建议让本书变得更好。
感谢参加 Manning 抢鲜线上课程(MEAP)的读者,他们发现并指出了许多排版和技术上的错误。
最后,如果没有家人的充分理解和巨大牺牲,我们很难做到今天这一切。蔡善清对他的妻子 Wei、他的父母和岳父、岳母在本书成书的一年中所提供的帮助和支持表达最深切的谢意。斯坦利·比列斯奇感谢他的父母和继父、继母,他们所提供的后盾和指引,促成了他在理工领域的成就,同时还要感谢妻子 Constance 的爱与支持。埃里克·D. 尼尔森在此想对所有的朋友和家人说:“谢谢你们!”