提交 b8ec0c43 编写于 作者: W wizardforcel

2020-09-01 11:24:37

上级 d4201c9b
......@@ -22,7 +22,7 @@
“自编码器”,使自编码器神秘化。 我们将学习自编码器及其应用。 我们将讨论可以使用自编码器的各种实际示例。 我们将讨论编码和后续重构的过程。 我们将学习重建误差。 我们将学习稀疏自编码器,即 KL 散度的概念。 我们将学习去噪自编码器,并在给定嘈杂图像的情况下使用它们来重建清晰图像。 我们将学习如何构建卷积自编码器和堆叠式自编码器。
“强化学习”,涵盖了不同的强化学习算法。 我们将学习 Q 学习算法。 我们将讨论 Bellman-Ford 方程以及如何选择学习率,折扣因子。 我们将学习如何使用 OpenAI Gym 框架。 我们将学习体验重播和缓冲的概念,以实现价值迭代 Q 网络。 我们将使用 Q 学习和策略梯度来构建游戏代理。 最后,我们将学习如何建立自己的深度 Q 学习网络(DQN)。 简要描述 AlphaGo Zero 及其大获胜。
“强化学习”,涵盖了不同的强化学习算法。 我们将学习 Q 学习算法。 我们将讨论 Bellman-Ford 方程以及如何选择学习率,折扣因子。 我们将学习如何使用 OpenAI Gym 框架。 我们将学习经验重放和缓冲的概念,以实现价值迭代 Q 网络。 我们将使用 Q 学习和策略梯度来构建游戏代理。 最后,我们将学习如何建立自己的深度 Q 学习网络(DQN)。 简要描述 AlphaGo Zero 及其大获胜。
第 10 章,“TensorFlow 移动计算”,涵盖了 TensorFlow 移动。 我们将学习移动深度学习的不同应用。 我们将学习如何在 Windows 平台上的 Android Studio 中使用 Tensorflow。 我们将学习如何结合使用 Tensorflow 和 XCode 来制作基于 IOS 的应用程序。 我们将学习如何优化移动设备的 Tensorflow 图。 我们还将学习如何为移动设备转换 Tensorflow 图。
......
......@@ -317,7 +317,7 @@ sess.close()
[3 3 8 7]
```
Remember that each Session needs to be explicitly closed using the `close()` method, `with` block implicitly closes the session when it ends.
请记住,每个会话都需要使用`close()`方法显式关闭,而`with`块在结束时会隐式关闭会话。
# 这个怎么运作...
......@@ -353,7 +353,7 @@ print(tf.Session().run(tf.add(tf.constant([1,2,3,4]),tf.constant([2,1,5,3]))))
编写这种类型的代码不仅会影响计算图,而且在`for`循环中重复执行相同的操作(OP)时可能会占用大量内存。 养成显式定义所有张量和操作对象的习惯,不仅使代码更具可读性,而且还有助于您以更简洁的方式可视化计算图。
Visualizing the graph using TensorBoard is one of the most useful capabilities of TensorFlow, especially when building complicated neural networks. The computational graph that we built can be viewed with the help of Graph Object.
使用 TensorBoard 可视化图形是 TensorFlow 最有用的功能之一,尤其是在构建复杂的神经网络时。 可以在图对象的帮助下查看我们构建的计算图。
如果您正在使用 Jupyter 笔记本或 Python Shell,则使用`tf.InteractiveSession`代替`tf.Session`更为方便。 `InteractiveSession`使其成为默认会话,因此您可以使用`eval()`直接调用运行张量对象,而无需显式调用该会话,如以下示例代码中所述:
......@@ -531,7 +531,7 @@ t_a = tf.Variable(rand_t)
t_b = tf.Variable(rand_t)
```
Variables are often used to represent weights and biases in a neural network.
变量通常用于表示神经网络中的权重和偏置。
2. 在下面的代码中,我们定义了两个变量权重和偏差。 权重变量使用正态分布随机初始化,均值为零,标准差为 2,权重的大小为`100×100`。 偏差由 100 个元素组成,每个元素都初始化为零。 在这里,我们还使用了可选的参数名称来为计算图中定义的变量命名。
......@@ -586,7 +586,7 @@ with tf.Session() as sess:
# 这个怎么运作...
All constants, variables, and placeholders will be defined in the computation graph section of the code. If we use the print statement in the definition section, we will only get information about the type of tensor, and not its value.
所有常量,变量和占位符都将在代码的计算图部分中定义。 如果在定义部分中使用`print`语句,我们将仅获得有关张量类型的信息,而不是张量的值。
为了找出该值,我们需要创建会话图,并显式使用`run`命令,并将所需的张量值设为`fetches`
......@@ -906,7 +906,7 @@ with tf.device \ ("/job:localhost/replica:0/task:0/device:XLA_GPU:0"):
TensorFlow.org 讲述了 tfcompile:
tfcompile takes a subgraph, identified by the TensorFlow concepts of feeds and fetches, and generates a function that implements that subgraph. The feeds are the input arguments for the function, and the fetches are the output arguments for the function. All inputs must be fully specified by the feeds; the resulting pruned subgraph cannot contain placeholder or variable nodes. It is common to specify all placeholders and variables as feeds, which ensures the resulting subgraph no longer contains these nodes. The generated function is packaged as a cc_library, with a header file exporting the function signature, and an object file containing the implementation. The user writes code to invoke the generated function as appropriate.
tfcompile 接受一个由 TensorFlow 概念的提要和获取标识的子图,并生成实现该子图的函数。 提要是函数的输入参数,而提取是函数的输出参数。 提要必须完全指定所有输入; 结果修剪后的子图不能包含占位符或变量节点。 通常将所有占位符和变量指定为提要,以确保结果子图不再包含这些节点。 生成的函数打包为 cc_library,带有导出函数签名的头文件和包含实现的目标文件。 用户编写代码以适当地调用生成的函数。
有关执行此操作的高级步骤,可以参考[这里](https://www.tensorflow.org/performance/xla/tfcompile)
......
......@@ -14,7 +14,7 @@ CNN 由许多神经网络层组成。 卷积和池化两种不同类型的层通
![](img/0a339e7b-3e50-48d7-acd9-0e2ce72e5764.png)
An example of Convolutional Neural Network as seen is https://commons.wikimedia.org/wiki/File:Typical_cnn.png
[如图所示,卷积神经网络的一个示例](https://commons.wikimedia.org/wiki/File:Typical_cnn.png)
卷积网络背后有三个主要的直觉:**局部接受域****共享权重****池化**。 让我们一起回顾一下。
......@@ -36,7 +36,7 @@ An example of Convolutional Neural Network as seen is https://commons.wikimedia.
![](img/d70c6297-0661-4521-bcea-769d611267af.png)
An example of convolutional operation: in bold the cells involved in the computation
卷积运算的一个示例:用粗体显示计算中涉及的单元
在此示例中,我们决定在触摸`I`的边界后立即停止滑动窗口(因此输出为`3 x 3`)。 或者,我们可以选择用零填充输入(以便输出为`5 x 5`)。 该决定与所采用的**填充**选择有关。
......@@ -66,7 +66,7 @@ tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format
![](img/c08487ea-3c34-4c2e-9774-86a8a365c8db.png)
An example of convolutional operation
卷积运算的一个例子
# 汇聚层
......@@ -93,7 +93,7 @@ tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=None)
![](img/e7d78456-3a46-4d3f-9720-a5739260a55b.png)
An example of pooling operation
池化操作示例
# 平均池化
......@@ -105,9 +105,9 @@ TensorFlow 实现了大量池化层,[可在线获取完整列表](https://www.
CNN 基本上是卷积的几层,具有非线性激活函数,并且池化层应用于结果。 每层应用不同的过滤器(数百或数千)。 要理解的主要观察结果是未预先分配滤波器,而是在训练阶段以最小化合适损失函数的方式来学习滤波器。 已经观察到,较低的层将学会检测基本特征,而较高的层将逐渐检测更复杂的特征,例如形状或面部。 请注意,得益于合并,后一层中的单个神经元可以看到更多的原始图像,因此它们能够组成在前几层中学习的基本特征。
到目前为止,我们已经描述了 ConvNets 的基本概念。 CNN 在沿时间维度的一维中对音频和文本数据应用卷积和池化操作,在沿(高度 x 宽度)维的图像中对二维图像应用卷积和池化操作,对于沿(高度 x 宽度 x 时间)维的视频中的三个维度应用卷积和池化操作。 对于图像,在输入体积上滑动滤镜会生成一个贴图,该贴图为每个空间位置提供滤镜的响应。
到目前为止,我们已经描述了 ConvNets 的基本概念。 CNN 在沿时间维度的一维中对音频和文本数据应用卷积和池化操作,在沿(高度 x 宽度)维的图像中对二维图像应用卷积和池化操作,对于沿(高度 x 宽度 x 时间)维的视频中的三个维度应用卷积和池化操作。 对于图像,在输入体积上滑动过滤器会生成一个贴图,该贴图为每个空间位置提供过滤器的响应。
In other words, a ConvNet has multiple filters stacked together that learn to recognize specific visual features independently of the location in the image. Those visual features are simple in the initial layers of the network and then more and more sophisticated deeper in the network.
换句话说,卷积网络具有堆叠在一起的多个过滤器,这些过滤器学会了独立于图像中的位置来识别特定的视觉特征。 这些视觉特征在网络的初始层很简单,然后在网络的更深层越来越复杂。g操作
# 创建一个卷积网络对手写 MNIST 编号进行分类
......@@ -531,7 +531,7 @@ imshow(style_image)
![](img/7b344e49-0863-4be3-9e39-9dc289b2f05c.png)
An example of Vicent Van Gogh painting as seen in https://commons.wikimedia.org/wiki/File:VanGogh-starry_night_ballance1.jpg
[文森特·梵高画作的一个例子](https://commons.wikimedia.org/wiki/File:VanGogh-starry_night_ballance1.jpg)
6. 下一步是按照原始论文中的描述定义 VGG 模型。 请注意,深度学习网络相当复杂,因为它结合了具有 ReLU 激活函数和最大池的多个卷积网络层。 另外需要注意的是,在原始论文《转移样式》(Leon A. Gatys,Alexander S. Ecker 和 Matthias Bethge 撰写的《一种艺术风格的神经算法》)中,许多实验表明,平均合并实际上优于最大池化。 因此,我们将改用平均池:
......@@ -1150,7 +1150,7 @@ np.int32(np.float32(hw)/octave_scale))
![](img/31e976ca-f260-4be1-aa10-0409b82b3e34.png)
An example of Deep Dream transformation. One of the authors transformed into a wolf
DeepDream 转换的示例。 其中一位作家变成了狼
# 这个怎么运作...
......
......@@ -17,7 +17,7 @@
文字和图像有什么共同点? 乍一看,很少。 但是,如果我们将句子或文档表示为矩阵,则此矩阵与每个单元都是像素的图像矩阵没有区别。 因此,下一个问题是,我们如何将文本表示为矩阵? 好吧,这很简单:矩阵的每一行都是一个向量,代表文本的基本单位。 当然,现在我们需要定义什么是基本单位。 一个简单的选择就是说基本单位是一个字符。 另一个选择是说基本单位是一个单词,另一个选择是将相似的单词聚合在一起,然后用代表符号表示每个聚合(有时称为簇或嵌入)。
Note that regardless of the specific choice adopted for our basic units, we need to have a 1:1 map from basic units into integer IDs so that a text can be seen as a matrix. For instance, if we have a document with 10 lines of text and each line is a 100-dimensional embedding, then we will represent our text with a matrix 10 x 100\. In this very particular *image*, a *pixel* is turned on if that sentence x contains the embedding represented by position y. You might also notice that a text is not really a matrix but more a vector because two words located in adjacent rows of text have very little in common. Indeed, there is a major difference with images where two pixels located in adjacent columns most likely have some correlation.
请注意,无论我们的基本单位采用哪种具体选择,我们都需要从基本单位到整数 ID 的 1:1 映射,以便可以将文本视为矩阵。 例如,如果我们有一个包含 10 行文本的文档,并且每行都是 100 维嵌入,那么我们将用`10 x 100`的矩阵表示文本。 在这个非常特殊的图像中,如果该句子`x`包含位置`y`表示的嵌入,则打开像素。 您可能还会注意到,文本实际上不是矩阵,而是向量,因为位于文本相邻行中的两个单词几乎没有共同点。 确实,与图像的主要区别在于,相邻列中的两个像素最有可能具有某种相关性。
现在您可能会想:我知道您将文本表示为矢量,但是这样做会使我们失去单词的位置,而这个位置应该很重要,不是吗?
......@@ -123,7 +123,7 @@ Training Step: 3519 | total loss: 0.09738 | time: 85.043s
[用于句子分类的卷积神经网络,Yoon Kim,EMNLP 2014](https://arxiv.org/abs/1408.5882)。 请注意,由于筛选器窗口对连续单词进行操作,因此本文提出的模型保留了一些有关位置的信息。 从论文中提取的以下图像以图形方式表示了网络之外的主要直觉。 最初,文本被表示为基于标准嵌入的向量,从而为我们提供了一维密集空间中的紧凑表示。 然后,使用多个标准一维卷积层处理矩阵。
Note that the model uses multiple filters (with varying window sizes) to obtain multiple features. After that, there is a max pool operation where the idea is to capture the most important feature-the one with the highest value for each feature map. For regularization, the article proposed to adopt a dropout on the penultimate layer with a constraint on L2-norms of the weight vectors. The final layer will output the sentiment as positive or negative.
请注意,模型使用多个过滤器(窗口大小不同)来获取多个特征。 之后,进行最大池操作,其思想是捕获最重要的特征-每个特征图的最大值。 为了进行正则化,该文章建议在倒数第二层上采用对权重向量的 L2 范数有约束的丢弃项。 最后一层将输出情绪为正或负。
为了更好地理解该模型,有以下几点观察:
......
......@@ -617,7 +617,7 @@ SOM 在计算上很昂贵,因此对于非常大的数据集并没有真正的
![](img/06c4c832-db20-40c8-bf83-39d907a5a660.png)
Source: By Qwertyus - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=22717044
[资料来源:Qwertyus 自己的作品,CC BY-SA 3.0](https://commons.wikimedia.org/w/index.php?curid=22717044)
RBM 可用于降维,特征提取和协作过滤。 RBM 中的训练可分为三个部分:前进,后退和比较。
......
......@@ -31,7 +31,7 @@ AlphaGo 在基于 RL 算法的深度神经网络与最先进的树搜索算法
![](img/8c77eafc-a869-4077-9f2b-30250831ca9f.png)
Adapted from Reinforcement Learning: an Introduction by Sutton and BartoEven our brain has a group of subcortical nuclei situated at the base of the forebrain called **basal ganglia**, which, according to neuroscience, are responsible for action selection, that is, help us decide which of several possible actions to execute at any given time.
改编自强化学习:萨顿(Sutton)和巴托(Barto)的引言即使我们的大脑在前脑底部有一组称为“基底神经节”的皮层下核,根据神经科学,它们负责选择动作,即帮助 我们决定在任何给定时间执行几个可能的动作中的哪一个。
代理人的目的是使报酬最大化并减少惩罚。 做出此决策涉及各种挑战,最重要的挑战是如何最大化未来的回报,也称为**临时得分分配问题**。 代理根据某些策略(`π`)决定其操作; 代理根据其与环境的交互来学习此策略(`π`)。 有各种策略学习算法; 我们将在本章中探索其中的一些。 代理通过反复试验的过程来推断最优策略(`π*`),并且要学习最优策略,代理需要与之交互的环境; 我们将使用提供不同环境的 OpenAI Gym。
......@@ -499,7 +499,7 @@ if __name__ == '__main__':
**深度 Q 网络****DQN**)是 Q 学习与**卷积神经网络****CNN**)的结合。 [由 Mnih 等人在 2013 年提出](https://arxiv.org/pdf/1312.5602.pdf)。 CNN 网络具有提取空间信息的能力,因此能够从原始像素数据中学习成功的控制策略。 我们已经在第 4 章,“卷积神经网络”中使用了 CNN,因此我们直接从这里开始。
This recipe is based on the original DQN paper, Playing Atari with Deep Reinforcement Learning by DeepMind. In the paper, they used a concept called **experience replay**, which involved randomly sampling the previous game moves (state, action reward, next state).
此食谱基于 DeepMind 的原始 DQN 论文《使用深度强化学习玩 Atari》。 在本文中,他们使用了一种称为“经验重放”的概念,该概念涉及随机采样先前的游戏动作(状态,动作奖励,下一状态)。位于前脑底部的核称为“基底神经节”, 根据神经科学,它们负责选择动作,即帮助我们确定在任何给定时间执行几种可能动作中的哪一种。
# 做好准备
......@@ -533,7 +533,7 @@ def update_state(state, obs):
# 怎么做...
1. 我们导入必要的模块。 我们正在使用`sys`模块的`stdout.flush()`来帮助我们强制 Python *刷新*标准输出(在我们的情况下为计算机监视器)中的数据。 `random`模块用于从体验重播缓冲区(我们存储过去经验的缓冲区)中获取随机样本。 `datetime`模块用于跟踪训练时间:
1. 我们导入必要的模块。 我们正在使用`sys`模块的`stdout.flush()`来帮助我们强制 Python *刷新*标准输出(在我们的情况下为计算机监视器)中的数据。 `random`模块用于从经验重放缓冲区(我们存储过去经验的缓冲区)中获取随机样本。 `datetime`模块用于跟踪训练时间:
```py
import gym
......@@ -546,7 +546,7 @@ from datetime import datetime
from scipy.misc import imresize
```
2. 我们定义训练的超参数; 您可以通过更改它们进行试验。 这些参数定义了体验重播缓冲区的最小和最大大小以及更新目标网络之后的情节数量:
2. 我们定义训练的超参数; 您可以通过更改它们进行试验。 这些参数定义了经验重放缓冲区的最小和最大大小以及更新目标网络之后的情节数量:
```py
MAX_EXPERIENCES = 500000
......
......@@ -55,7 +55,7 @@
![](img/547d0ed5-b558-440c-a4a0-102cbfbee10f.png)
An example of creating TensorFlow mobile application in AndroidStudio, fourth step
在 AndroidStudio 中创建 TensorFlow 移动应用程序的示例,第四步称为“基础神经节”,根据神经科学,它负责选择动作,即帮助我们确定在任何给定时间执行几个可能动作中的哪个。
3. 将以下行插入`build.gradle`应用中,如以下代码所示:
......
......@@ -10,7 +10,7 @@
![](img/30ccd28f-f08f-4323-aae4-313b11ba8ddb.png)
例如,控制器循环神经网络可以对卷积网络进行采样。 控制器可以预测许多超参数,例如滤镜高度,滤镜宽度,步幅高度,步幅宽度和一层滤镜的数量,然后可以重复。 每个预测可以由 softmax 分类器执行,然后输入到下一个 RNN 时间步中。 以下图片来自[《使用增强学习的神经体系结构搜索》](https://arxiv.org/abs/1611.01578)(Barret Zoph,Quoc V. Le):
例如,控制器循环神经网络可以对卷积网络进行采样。 控制器可以预测许多超参数,例如过滤器高度,过滤器宽度,步幅高度,步幅宽度和一层过滤器的数量,然后可以重复。 每个预测可以由 softmax 分类器执行,然后输入到下一个 RNN 时间步中。 以下图片来自[《使用增强学习的神经体系结构搜索》](https://arxiv.org/abs/1611.01578)(Barret Zoph,Quoc V. Le):
![](img/9986f40c-9051-4483-959c-00a067ed0e2a.png)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册