Skip to content

Commit 08146dc

Browse files
committed
2019-05-15 10:22:46
1 parent f1ddea4 commit 08146dc

File tree

821 files changed

+47401
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

821 files changed

+47401
-1
lines changed

README.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,20 @@
44

55
## 目录
66

7-
+ [从零编写简单的数据库](docs/simple-db-zh)
7+
+ CS 教程
8+
+ [从零编写简单的数据库](docs/simple-db-zh)
9+
+ AI 教程
10+
+ [与 TensorFlow 的初次接触](docs/first_contact_with_tensorFlow)
11+
+ [Sklearn 学习指南](docs/learning-sklearn)
12+
+ [TensorFlow 学习指南](docs/learning-tf-zh)
13+
+ [PythonProgramming.net 教程翻译](docs/python-programming-net)
14+
+ [TensorFlow Eager 教程](docs/tf-eager-tut)
15+
+ [TensorFlow 高效编程](docs/effective-tf.md)
16+
+ [Sklearn 秘籍](docs/sklearn-cb)
17+
+ [TutorialsPoint NumPy 教程](docs/tutorialspoint-numpy.md)
18+
+ [图嵌入综述(Arxiv 1709.07604)](docs/ge-survey-arxiv-1709-07604-zh)
19+
+ [基于深度学习的推荐系统:综述和新视角](docs/rs-survey-arxiv-1707-07435-zh)
20+
+ [关于卷积神经网络我们理解了什么](docs/what-do-we-understand-about-convnet)
821

922
## 赞助我们
1023

docs/effective-tf.md

Lines changed: 1443 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
## 前言一
2+
3+
由于计算,海量数据存储和互联网技术等关键领域的共同发展,机器学习领域呈现了巨大的发展。许多人的日常生活中的许多技术和事件,直接或间接地受到自动学习的影响。语音识别,手机上的图像分类或垃圾邮件检测等技术的例子,使得一些应用成为可能,它们只出现在十年前科幻小说中。股票市场模型或医疗模型中的学习的使用,对我们的社会产生了巨大的影响。此外,具有巡航控制,无人机和各种机器人的汽车将在不久的将来影响社会。
4+
5+
深度学习是机器学习的一个子类型,自 2006 年重新发现以来,无疑是爆发性扩张的领域之一。事实上,硅谷的许多创业公司都专注于此,而谷歌,Facebook,微软或 IBM 等大型科技公司都有开发和研究团队。深度学习甚至引起了大学之外和研究领域的兴趣:许多专业杂志(如 Wired)甚至是通用杂志(如纽约时报,Bloomberg 或 BBC)为这个主题撰写了很多文章。
6+
7+
这种兴趣促使许多学生,企业家和投资者加入深度学习。由于产生的所有兴趣,几个软件包已被制作成“开源”的。作为库的主要推动者之一,我们在 2012 年作为博士生在伯克利(Caffe)开发了它。我可以说,TensorFlow 将成为研究人员和中小企业公司用于实现他们的深度学习和机器学习的想法的主要工具之一,它出现在本书中并由 Google(加州)设计,我自 2013 年以来一直在那里研究它。对此的保证是参与该项目的工程师和顶尖研究人员的数量,它最终得到了开源。
8+
9+
我希望这本入门书能够帮助有兴趣在这个非常有趣的领域开始冒险的读者。我要感谢作者,我很高兴了解到它传播这项技术的努力。在开源项目发布两个月后,他在创纪录的时间内写了这本书(首先是西班牙语版本)。这是巴塞罗那活力的另一个例子,它有兴趣成为这一技术场景中的参与者之一,无疑将影响我们的未来。
10+
11+
Oriol Vinyals,Google Brain 的研究科学家
12+
13+
14+
## 前言二
15+
16+
17+
> 教育是你用来改变世界的最有力的武器。
18+
>
19+
> Nelson Mandela
20+
21+
本书的目的是有助于将这些知识转播给工程师,它们希望在激动人心的机器学习世界中扩展智慧。我相信任何具有工程背景的人都可能会发现,深度学习和机器学习的应用对他们的工作很有价值。
22+
23+
鉴于我的背景,读者可能会想知道为什么我提出了编写这种新的深度学习技术的挑战。我的研究重点是逐步从超级计算架构和运行时转向大数据工作负载的执行中间件,最近转向大规模数据的机器学习平台。
24+
25+
正是作为一名工程师,而不是数据科学家,我认为我可以为这一主题贡献这种介绍性的方法,并且它对早期阶段的许多工程师都有帮助;然后他们会选择深入了解他们的需求。
26+
27+
我希望这本书能为这个我非常喜爱的教育世界增添一些价值。我认为知识就是解放,应该让所有人都能获得。因此,本书的内容将在网站 [www.JordiTorres.eu/TensorFlow](http://www.jorditorres.eu/TensorFlow) 上完全免费提供。如果读者发现内容有用并认为适当补偿作者的写作,网站上有一个标签可以用于捐赠。另一方面,如果读者更喜欢选择纸质副本,你可以通过 Amazon.com 购买该书。
28+
29+
本书还提供西班牙语版本。事实上,这本书是西班牙语的翻译,该书于去年 1 月完成,并在 GEMLeB Meetup(Grup d'Estudi de Machine Learning de Barcelona)中展示,我是其中一个共同组织者。
30+
31+
感谢你阅读本书!它使我感到安慰,并证明了我写作的努力。那些了解我的人,知道技术传播是我的激情之一。它激励我继续学习。
32+
33+
Jordi Torres,2016 年 2 月
34+
35+
## 一种实用的方法
36+
37+
> 告诉我,我会忘记。教我,我会记得。让我参与,我会学习。
38+
>
39+
> 本杰明·富兰克林
40+
41+
深度学习的一个常见应用包括模式识别。因此,当你开始编程时,有个传统是打印“Hello World”,与它相同,在深度学习中,通常构造用于识别手写数字的模型 [1]。我将提供的第一个神经网络示例,也将允许我介绍这种名为 TensorFlow 的新技术。
42+
43+
但是,我不打算写一本关于机器学习或深度学习的研究书籍,我只想尽快为每个人提供这个新的机器学习软件包 TensorFlow。因此,我向我的数据科学家们道歉,为了与普通读者分享这些知识,我允许自己进行某些简化。
44+
45+
读者会在这里找到我在课堂上使用的常规结构;这会邀请你在学习的同时使用计算机的键盘。我们称之为“从实践中学习”,而我作为 UPC 教授的经历告诉我,这种方法对于尝试开始新主题的工程师来说非常有效。
46+
47+
出于这个原因,这本书具有实用性,因此我尽可能地减少了理论部分。然而,当学习过程需要时,文本中已包含某些数学细节。
48+
49+
我假设读者对机器学习有一些基本的理解,所以我将使用一些流行的算法逐步组织读者在 TensorFlow 中的训练。
50+
51+
在第一章中,除了介绍TensorFlow将扮演重要角色的场景之外,我还借此机会解释TensorFlow程序的基本结构,并简要解释它在内部维护的数据。
52+
53+
在第二章中,通过线性回归的一个例子,我将介绍一些代码基础知识,同时,如何调用学习过程中的各种重要组件,如损失函数或梯度下降优化算法。
54+
55+
在第三章中,我展示了一个聚类算法,我将详细介绍 TensorFlow 的基本数据结构,称为`tensor`(张量),以及 TensorFlow 包提供的用于创建和管理张量的不同类和函数。
56+
57+
第四章详细介绍了如何构建识别手写数字的单层神经网络。这将允许我们归纳上面提出的所有概念,以及查看创建和测试模型的整个过程。
58+
59+
下一章首先介绍基于前一章中所见的神经网络概念,并介绍如何构建多层神经网络来获得更好的手写数字识别结果。它将更详细地介绍所谓的卷积神经网络。
60+
61+
在第六章中,我们将讨论一个更具体的问题,利用 GPU 提供的计算能力,可能不是所有读者都感兴趣。如第 1 章所述,GPU 在神经网络的训练过程中发挥着重要作用。
62+
63+
本书以后记结束,其中我强调了一些结论。我想强调的是,本书中的代码示例可以从本书 [2] 的 github 仓库下载。
Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
## 1. TensorFlow 基础知识
2+
3+
在本章中,我将简要介绍 TensorFlow 的代码及其编程模型。在本章的最后,读者可以在他们的个人计算机上安装 TensorFlow 软件包。
4+
5+
### 开源软件包
6+
7+
8+
学术界已经对机器学习进行了数十年的调查,但直到近几年,它的渗透率在企业中也有所增加。这要归功于它已经拥有的大量数据以及现在可用的前所未有的计算能力。
9+
10+
在这种情况下,毫无疑问,在 Alphabet 的支持下,谷歌是机器学习技术在其所有虚拟计划和产品中发挥关键作用的最大公司之一。
11+
12+
去年10月,当 Alphabet 宣布那个季度谷歌的业绩,销售额和利润大幅增加时,首席执行官桑达皮采清楚地说:“机器学习是一种核心的,变革性的方式,我们正在重新思考我们正在做的一切”。
13+
14+
从技术上讲,我们正面临着谷歌不是唯一一个重要角色的时代变迁。其他技术公司,如微软,Facebook,亚马逊和苹果等众多公司也在增加对这些领域的投资。
15+
16+
在此背景下,几个月前谷歌在开源许可证(Apache 2.0)下发布了 TensorFlow 引擎。想要将机器学习纳入其项目和产品的开发人员和研究人员可以使用 TensorFlow,就像 Google 在内部使用 Gmail,Google 照片,搜索,语音识别等不同的商业产品一样。
17+
18+
TensorFlow 最初是由 Google Brain Team 开发的,目的是进行机器学习和深度神经网络研究,但该系统足以应用于各种其他机器学习问题。
19+
20+
由于我是一名工程师,而且我正在与工程师交谈,因此本书将深入了解数据流图如何表示算法。TensorFlow 可以看作是使用数据流图进行数值计算的库。图中的节点表示数学运算,而图的边表示多维数据数组(张量),它们将节点互连。
21+
22+
TensorFlow 围绕构建和操作计算图的基本思想构建,象征性地表示要执行的数值运算。这使得 TensorFlow 现在可以从 Linux 64 位平台(如 Mac OS X)以及 Android 或 iOS 等移动平台中利用 CPU 和 GPU。
23+
24+
这个新软件包的另一个优点是它的可视 TensorBoard 模块,它提供了大量有关如何监视和显示算法运行的信息。在创建更好的模型的过程中,能够测量和显示算法的行为是非常重要的。我感觉目前许多模型都是通过一个小型的盲目过程,通过试错来调优,明显浪费资源,以及最重要时间。
25+
26+
### TensorFlow 服务
27+
28+
29+
最近 Google 推出了 TensorFlow 服务 [3],这有助于开发人员将他们的 TensorFlow 机器学习模型(即使如此,也可以扩展来服务其他类型的模型)投入生产。TensorFlow 服务是一个开源服务系统(用 C++ 编写),现在可以在 Apache 2.0 许可下[在 GitHub ](http://tensorflow.github.io/serving/)上获得。
30+
31+
TensorFlow 和 TensorFlow 服务有什么区别? 在 TensorFlow 中,开发人员更容易构建机器学习算法,并针对某些类型的数据输入进行训练,TensorFlow 服务专门使这些模型可用于生产环境。我们的想法是开发人员使用 TensorFlow 训练他们的模型,然后他们使用 TensorFlow 服务的 API 来响应来自客户端的输入。
32+
33+
这允许开发人员根据实际数据大规模试验不同的模型,并随时间变化,保持稳定的架构和 API。
34+
35+
典型的流水线是将训练数据提供给学习器,学习器输出模型,模型在被验证之后准备好部署到 TensorFlow 服务系统。 随着时间的推移和新数据的出现,改进模型,启动和迭代我们的模型是很常见的。事实上,在 Google 的博文中 [4] 中,他们提到在谷歌,许多流水线都在持续运行,随着新数据的出现,产生了新的模型版本。
36+
37+
![TensorFlowServing](https://jorditorres.org/wp-content/uploads/2016/04/TensorFlowServing.png)
38+
39+
开发人员用来与 TensorFlow 服务进行通信的前端实现,基于 [gRPC](http://www.grpc.io/) ,这是一种来自 Google 的高性能开源RPC框架。
40+
41+
如果你有兴趣了解 TensorFlow 服务的更多信息,我建议你先阅读服务架构概述 [5] 部分,设置你的环境并开始阅读基础教程 [6]
42+
43+
### TensorFlow 的安装
44+
45+
46+
是时候做一些事情了。从现在开始,我建议你交替阅读和在计算机上练习。
47+
48+
TensorFlow 有 Python API(以及 C/C++),需要安装 Python 2.7(我假设任何阅读本书的工程师都知道如何操作)。
49+
50+
通常,在使用 Python 时,应使用虚拟环境`virtualenv`。 `virtualenv`是一种工具,用于在同一台计算机的不同部分中保持不同项目所需的 Python 依赖关系。如果我们使用`virtualenv`来安装 TensorFlow,这将不会覆盖需要 TensorFlow 的其他项目的现有 Python 包版本。
51+
52+
首先,如果尚未安装`pip``virtualenv`,则应安装,如下面的脚本所示:
53+
54+
```
55+
# Ubuntu/Linux 64-bit
56+
$ sudo apt-get install python-pip python-dev python-virtualenv
57+
# Mac OS X
58+
$ sudo easy_install pip
59+
$ sudo pip install --upgrade virtualenv
60+
```
61+
62+
`~/tensorflow`目录中的环境`virtualenv`
63+
64+
`$ virtualenv --system-site-packages ~/tensorflow`
65+
66+
下一步是激活`virtualenv`。这可以按如下方式完成:
67+
68+
```
69+
$ source ~/tensorflow/bin/activate # with bash
70+
$ source ~/tensorflow/bin/activate.csh # with csh
71+
(tensorflow)$
72+
```
73+
74+
我们工作的虚拟环境的名称,将从现在开始显示在每个命令行的开头。激活`virtualenv`后,你可以使用`pip`在其中安装 TensorFlow:
75+
76+
```
77+
# Ubuntu/Linux 64-bit, CPU only:
78+
(tensorflow)$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp27-none-linux_x86_64.whl
79+
80+
# Mac OS X, CPU only:
81+
(tensorflow)$ sudo easy_install --upgrade six
82+
(tensorflow)$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.7.1-cp27-none-any.whl
83+
```
84+
85+
我建议你访问此处提供的官方文档,来确保你安装的是最新版本。
86+
87+
如果运行代码的平台具有 GPU,要使用的包不同。我建议你访问官方文档,了解你的 GPU 是否符合支持 Tensorflow 所需的规范。运行 Tensorflow GPU 需要安装其他软件,所有信息都可以在下载和设置 TensorFlow [7] 网页上找到。对于使用 GPU 的更多信息,我建议阅读第 6 章。
88+
89+
最后,当你完成后,你应该按如下方式禁用虚拟环境:
90+
91+
```
92+
(tensorflow)$ deactivate
93+
```
94+
95+
鉴于本书的介绍性质,我们建议读者访问上述官方文档页面,来查找安装 Tensorflow 的其他方法的更多信息。
96+
97+
### 我在 TensorFlow 中的第一个代码
98+
99+
正如我在开始时提到的那样,我们将通过很少的理论和大量练习来探索 TensorFlow 星球。开始吧!
100+
101+
从现在开始,最好使用任何文本编辑器编写 python 代码并使用扩展名`.py`保存(例如`test.py`)。要运行代码,使用命令`python test.py`就足够了。
102+
103+
为了获得 TensorFlow 程序的第一印象,我建议编写一个简单的乘法程序;代码看起来像这样:
104+
105+
```py
106+
import tensorflow as tf
107+
108+
a = tf.placeholder("float")
109+
b = tf.placeholder("float")
110+
111+
y = tf.mul(a, b)
112+
113+
sess = tf.Session()
114+
115+
print sess.run(y, feed_dict={a: 3, b: 3})
116+
```
117+
118+
在此代码中,在导入 Python 模块`tensorflow`之后,我们定义“符号”变量,称为占位符,以便在程序执行期间操作它们。然后,我们将这些变量作为参数,调用 TensorFlow 提供的乘法函数。`tf.mul`是 TensorFlow 为操纵张量而提供的众多数学运算之一。在这个时候,张量可以认为是动态大小的多维数据数组。
119+
120+
主要运算如下表所示:
121+
122+
| 运算 | 描述 |
123+
| --- | --- |
124+
| `tf.add` | 加法 |
125+
| `tf.sub` | 减法 |
126+
| `tf.mul` | 乘法 |
127+
| `tf.div` | 除法 |
128+
| `tf.mod` ||
129+
| `tf.abs` | 返回绝对值 |
130+
| `tf.neg` | 返回负值 |
131+
| `tf.sign` | 返回标志 |
132+
| `tf.inv` | 返回倒数 |
133+
| `tf.square` | 计算平方 |
134+
| `tf.round` | 返回最接近的整数 |
135+
| `tf.sqrt` | 计算平方根 |
136+
| `tf.pow` | 计算指数 |
137+
| `tf.exp` | 计算自然指数 |
138+
| `tf.log` | 计算自然对数 |
139+
| `tf.maximum` | 返回最大值 |
140+
| `tf.minimum` | 返回最小值 |
141+
| `tf.cos` | 计算余弦 |
142+
| `tf.sin` | 计算正弦 |
143+
144+
TensorFlow 还为程序员提供了许多函数,来对矩阵执行数学运算。一些列在下面:
145+
146+
| 运算 | 描述 |
147+
| --- | --- |
148+
| `tf.diag` | 返回具有给定对角线值的对角张量 |
149+
| `tf.transpose` | 返回参数的转置 |
150+
| `tf.matmul` | 返回由参数列出的两个张量的张量积 |
151+
| `tf.matrix_determinant` | 返回由参数指定的方阵的行列式 |
152+
| `tf.matrix_inverse` | 返回由参数指定的方阵的逆 |
153+
154+
下一步,最重要的一步是创建一个会话来求解指定的符号表达式。实际上,到目前为止,这个 TensorFlow 代码尚未执行任何操作。我要强调的是,TensorFlow 既是表达机器学习算法的接口,又是运行它们的实现,这是一个很好的例子。
155+
156+
程序通过使用`Session()`创建会话来与 Tensorflow 库交互;只有在我们调用`run()`方法时才会创建这个会话,这就是它真正开始运行指定代码的时候。在此特定示例中,使用`feed_dict`参数将变量的值传给`run()`方法。这里,相关代码求解表达式,并且从显示器返回 9 作为结果。
157+
158+
通过这个简单的例子,我试图介绍在 TensorFlow 中编程的常规方法,首先指定整个问题,并最终创建一个可以运行相关计算的会话。
159+
160+
然而,有时我们感兴趣的是构造代码的更多的灵活性,插入操作来构建某个图,这些操作运行它的一部分。例如,当我们使用 Python 的交互式环境时,例如 IPython [8],就会发生这种情况。为此,TesorFlow 提供了`tf.InteractiveSession()`类。
161+
162+
这种编程模型的动机超出了本书的范围。但是,为了继续下一章,我们只需要知道所有信息都在内部保存在图结构中,它包含所有操作和数据的信息。
163+
164+
该图描述了数学运算。节点通常实现数学运算,但它们也可以表示数据输入,输出结果或读/写持久变量。边描述节点与其输入和输出之间的关系,同时携带张量,即 TensorFlow 的基本数据结构。
165+
166+
将信息表示为图允许 TensorFlow 知道事务之间的依赖关系,并异步并行地将操作分配给设备,当这些操作已经具有可用的相关张量(在边缘输入中指示)时。
167+
168+
因此,并行性是使我们能够加速一些计算昂贵的算法的执行的因素之一,但也因为 TensorFlow 已经有效地实现了一组复杂的操作。此外,大多数这些操作都具有关联的内核,这些内核是为特定设备(如 GPU)设计的操作的实现。下表总结了最重要的操作/内核 [9]
169+
170+
| 操作组 | 操作 |
171+
| --- | --- |
172+
| 数学 | 加,减,乘,除,指数,对数,大于,小于,等于 |
173+
| 排列 | 连接,切片,分割,常数,阶,形状,打乱 |
174+
| 矩阵 | MatMul,MatrixInverse,MatrixDeterminant |
175+
| 神经网络 | SoftMax,Sigmoid,ReLU,Convolution2D,MaxPool |
176+
| 检查点 | 保存,还原 |
177+
| 队列和同步 | Enqueue,Dequeue,MutexAcquire,MutexRelease |
178+
| 流量控制 | 合并,切换,进入,离开,NextIteration |
179+
180+
### 显示面板 Tensorboard
181+
182+
为了使其更加全面,TensorFlow 包含了名为 TensorBoard 的可视化工具来调试和优化程序的功能。TensorBoard 可以以图形方式查看计算图任何部分的参数和细节的不同类型的统计信息。
183+
184+
TensorBoard 模块显示的数据在 TensorFlow 执行期间生成,并存储在跟踪文件中,其数据来自摘要操作。在 TensorFlow 的文档页面 [10] 中,你可以找到 Python API 的详细说明。
185+
186+
我们调用它的方式非常简单:从命令行中使用 Tensorflow 命令启动服务,它包含要跟踪的文件作为参数。
187+
188+
```
189+
(tensorflow)$ tensorboard --logdir=
190+
```
191+
192+
你只需要使用`http//localhost:6006 /`从浏览器中 [11] 访问本地套接字 6006。
193+
194+
名为 TensorBoard 的可视化工具超出了本书的范围。对于 Tensorboard 如何工作的更多详细信息,读者可以访问 TensorFlow 教程页面中的 TensorBoard 图形可视化 [12] 部分。

0 commit comments

Comments
 (0)