## 前言一

由于计算，海量数据存储和互联网技术等关键领域的共同发展，机器学习领域呈现了巨大的发展。许多人的日常生活中的许多技术和事件，直接或间接地受到自动学习的影响。语音识别，手机上的图像分类或垃圾邮件检测等技术的例子，使得一些应用成为可能，它们只出现在十年前科幻小说中。股票市场模型或医疗模型中的学习的使用，对我们的社会产生了巨大的影响。此外，具有巡航控制，无人机和各种机器人的汽车将在不久的将来影响社会。

深度学习是机器学习的一个子类型，自 2006 年重新发现以来，无疑是爆发性扩张的领域之一。事实上，硅谷的许多创业公司都专注于此，而谷歌，Facebook，微软或 IBM 等大型科技公司都有开发和研究团队。深度学习甚至引起了大学之外和研究领域的兴趣：许多专业杂志（如 Wired）甚至是通用杂志（如纽约时报，Bloomberg 或 BBC）为这个主题撰写了很多文章。

这种兴趣促使许多学生，企业家和投资者加入深度学习。由于产生的所有兴趣，几个软件包已被制作成“开源”的。作为库的主要推动者之一，我们在 2012 年作为博士生在伯克利（Caffe）开发了它。我可以说，TensorFlow 将成为研究人员和中小企业公司用于实现他们的深度学习和机器学习的想法的主要工具之一，它出现在本书中并由 Google（加州）设计，我自 2013 年以来一直在那里研究它。对此的保证是参与该项目的工程师和顶尖研究人员的数量，它最终得到了开源。

我希望这本入门书能够帮助有兴趣在这个非常有趣的领域开始冒险的读者。我要感谢作者，我很高兴了解到它传播这项技术的努力。在开源项目发布两个月后，他在创纪录的时间内写了这本书（首先是西班牙语版本）。这是巴塞罗那活力的另一个例子，它有兴趣成为这一技术场景中的参与者之一，无疑将影响我们的未来。

Oriol Vinyals，Google Brain 的研究科学家


## 前言二


> 教育是你用来改变世界的最有力的武器。  
> 
> Nelson Mandela

本书的目的是有助于将这些知识转播给工程师，它们希望在激动人心的机器学习世界中扩展智慧。我相信任何具有工程背景的人都可能会发现，深度学习和机器学习的应用对他们的工作很有价值。

鉴于我的背景，读者可能会想知道为什么我提出了编写这种新的深度学习技术的挑战。我的研究重点是逐步从超级计算架构和运行时转向大数据工作负载的执行中间件，最近转向大规模数据的机器学习平台。

正是作为一名工程师，而不是数据科学家，我认为我可以为这一主题贡献这种介绍性的方法，并且它对早期阶段的许多工程师都有帮助；然后他们会选择深入了解他们的需求。

我希望这本书能为这个我非常喜爱的教育世界增添一些价值。我认为知识就是解放，应该让所有人都能获得。因此，本书的内容将在网站 [www.JordiTorres.eu/TensorFlow](http://www.jorditorres.eu/TensorFlow) 上完全免费提供。如果读者发现内容有用并认为适当补偿作者的写作，网站上有一个标签可以用于捐赠。另一方面，如果读者更喜欢选择纸质副本，你可以通过 Amazon.com 购买该书。

本书还提供西班牙语版本。事实上，这本书是西班牙语的翻译，该书于去年 1 月完成，并在 GEMLeB Meetup（Grup d'Estudi de Machine Learning de Barcelona）中展示，我是其中一个共同组织者。

感谢你阅读本书！它使我感到安慰，并证明了我写作的努力。那些了解我的人，知道技术传播是我的激情之一。它激励我继续学习。

Jordi Torres，2016 年 2 月

## 一种实用的方法

> 告诉我，我会忘记。教我，我会记得。让我参与，我会学习。  
> 
> 本杰明·富兰克林

深度学习的一个常见应用包括模式识别。因此，当你开始编程时，有个传统是打印“Hello World”，与它相同，在深度学习中，通常构造用于识别手写数字的模型 [1]。我将提供的第一个神经网络示例，也将允许我介绍这种名为 TensorFlow 的新技术。

但是，我不打算写一本关于机器学习或深度学习的研究书籍，我只想尽快为每个人提供这个新的机器学习软件包 TensorFlow。因此，我向我的数据科学家们道歉，为了与普通读者分享这些知识，我允许自己进行某些简化。

读者会在这里找到我在课堂上使用的常规结构；这会邀请你在学习的同时使用计算机的键盘。我们称之为“从实践中学习”，而我作为 UPC 教授的经历告诉我，这种方法对于尝试开始新主题的工程师来说非常有效。

出于这个原因，这本书具有实用性，因此我尽可能地减少了理论部分。然而，当学习过程需要时，文本中已包含某些数学细节。

我假设读者对机器学习有一些基本的理解，所以我将使用一些流行的算法逐步组织读者在 TensorFlow 中的训练。

在第一章中，除了介绍TensorFlow将扮演重要角色的场景之外，我还借此机会解释TensorFlow程序的基本结构，并简要解释它在内部维护的数据。

在第二章中，通过线性回归的一个例子，我将介绍一些代码基础知识，同时，如何调用学习过程中的各种重要组件，如损失函数或梯度下降优化算法。

在第三章中，我展示了一个聚类算法，我将详细介绍 TensorFlow 的基本数据结构，称为`tensor`（张量），以及 TensorFlow 包提供的用于创建和管理张量的不同类和函数。

第四章详细介绍了如何构建识别手写数字的单层神经网络。这将允许我们归纳上面提出的所有概念，以及查看创建和测试模型的整个过程。

下一章首先介绍基于前一章中所见的神经网络概念，并介绍如何构建多层神经网络来获得更好的手写数字识别结果。它将更详细地介绍所谓的卷积神经网络。

在第六章中，我们将讨论一个更具体的问题，利用 GPU 提供的计算能力，可能不是所有读者都感兴趣。如第 1 章所述，GPU 在神经网络的训练过程中发挥着重要作用。

本书以后记结束，其中我强调了一些结论。我想强调的是，本书中的代码示例可以从本书 [2] 的 github 仓库下载。
