提交 984e2670 编写于 作者: W wizardforcel

2020-09-06 17:32:59

上级 354b9cdd
# 前言
*深度学习快速参考*演示了使用深度学习的快速实用方法。 它着重于现实生活中的问题,并且仅提供了足够的理论和数学知识来加深读者对该主题的理解。 深度学习是机器学习中令人兴奋的快速节奏分支,但它也是一个可以涉足的领域。 在这个领域,每天都会进行大量的详细而复杂的研究,而这可能会令人不知所措。 在本书中,我着重向您传授将深度学习应用于各种实际问题的技能。 我对这本书的最大希望是,它将为您提供使用深度学习技术解决机器学习问题所需的工具。
《深度学习快速参考》演示了使用深度学习的快速实用方法。 它着重于现实生活中的问题,并且仅提供了足够的理论和数学知识来加深读者对该主题的理解。 深度学习是机器学习中令人兴奋的快速节奏分支,但它也是一个可以涉足的领域。 在这个领域,每天都会进行大量的详细而复杂的研究,而这可能会令人不知所措。 在本书中,我着重向您传授将深度学习应用于各种实际问题的技能。 我对这本书的最大希望是,它将为您提供使用深度学习技术解决机器学习问题所需的工具。
# 这本书是给谁的
......@@ -12,31 +12,31 @@
# 本书涵盖的内容
[第 1 章](../Text/01.html)*深度学习的基础知识*,回顾了有关神经网络操作的一些基础知识,涉及了优化算法,讨论了模型验证,并讨论了建立开发环境的内容。 适用于构建深度神经网络。
第 1 章“深度学习的基础知识”,回顾了有关神经网络操作的一些基础知识,涉及了优化算法,讨论了模型验证,并讨论了建立开发环境的内容。 适用于构建深度神经网络。
[第 2 章](../Text/04.html)*使用深度学习解决回归问题*,您可以构建非常简单的神经网络来解决回归问题,并研究更深更复杂的模型对这些问题的影响。
第 2 章“使用深度学习解决回归问题”,您可以构建非常简单的神经网络来解决回归问题,并研究更深更复杂的模型对这些问题的影响。
[第 3 章](../Text/03.html)*使用 TensorBoard 监视网络培训*让您立即开始使用 TensorBoard,这是监视和调试未来模型的绝佳应用程序。
第 3 章“使用 TensorBoard 监视网络培训”让您立即开始使用 TensorBoard,这是监视和调试未来模型的绝佳应用程序。
[第 4 章](../Text/04.html)*使用深度学习解决二进制分类问题*帮助您使用深度学习解决二进制分类问题。
第 4 章“使用深度学习解决二进制分类问题”帮助您使用深度学习解决二进制分类问题。
[第 5 章](../Text/05.html)*使用 Keras 解决多类分类问题*,带您进行多类分类并探讨它们之间的区别。 它还讨论了管理过度拟合和最安全的选择。
第 5 章“使用 Keras 解决多类分类问题”,带您进行多类分类并探讨它们之间的区别。 它还讨论了管理过度拟合和最安全的选择。
[第 6 章](../Text/06.html)*超参数优化*显示了两种独立的模型调整方法,一种是众所周知的且经过实战测试的方法,而另一种是最新方法。
第 6 章“超参数优化”显示了两种独立的模型调整方法,一种是众所周知的且经过实战测试的方法,而另一种是最新方法。
[第 7 章](../Text/07.html)*从头开始训练 CNN* 教您如何使用卷积网络对图像进行分类。
第 7 章“从头开始训练 CNN”教您如何使用卷积网络对图像进行分类。
[第 8 章](../Text/08.html)*使用预训练的 CNN 的转移学习*描述了如何应用转移学习来从图像分类器中获得惊人的性能,即使数据很少。
第 8 章“使用预训练的 CNN 的转移学习”描述了如何应用转移学习来从图像分类器中获得惊人的性能,即使数据很少。
[第 9 章](../Text/09.html)*从头开始训练 RNN* ,讨论 RNN 和 LSTMS,以及如何将其用于时间序列预测问题。
第 9 章“从头开始训练 RNN”,讨论 RNN 和 LSTMS,以及如何将其用于时间序列预测问题。
[第 10 章](../Text/10.html)*从头开始用词嵌入训练 LSTM* 继续我们关于 LSTM 的讨论,这次讨论的是自然语言分类任务。
第 10 章“从头开始用词嵌入训练 LSTM”继续我们关于 LSTM 的讨论,这次讨论的是自然语言分类任务。
[第 11 章](../Text/11.html)*训练 Seq2Seq 模型*帮助我们使用序列对模型进行序列化以进行机器翻译。
第 11 章“训练 Seq2Seq 模型”帮助我们使用序列对模型进行序列化以进行机器翻译。
[第 12 章](../Text/12.html)*使用深度强化学习*引入了深度强化学习,并构建了可以为自治代理提供动力的深度 Q 网络。
第 12 章“使用深度强化学习”引入了深度强化学习,并构建了可以为自治代理提供动力的深度 Q 网络。
[第 13 章](../Text/13.html)*生成对抗网络*解释了如何使用生成对抗网络生成令人信服的图像。
第 13 章“生成对抗网络”解释了如何使用生成对抗网络生成令人信服的图像。
# 充分利用这本书
......
......@@ -200,7 +200,7 @@ model.compile(optimizer=adam_optimizer, loss='mean_absolute_error')
model.fit(x=data["train_X"], y=data["train_y"], batch_size=32, epochs=200, verbose=1, validation_data=(data["val_X"], data["val_y"]))
```
让我们来看一下 Keras fit 方法所采用的一些重要论点。 我将假设您熟悉小批量梯度下降和训练纪元,但如果不熟悉,请查看[第 1 章](../Text/01.html)*深度学习的基础知识*, 概述。 Keras 拟合模型中的重要参数如下:
让我们来看一下 Keras fit 方法所采用的一些重要论点。 我将假设您熟悉小批量梯度下降和训练纪元,但如果不熟悉,请查看第 1 章*深度学习的基础知识*, 概述。 Keras 拟合模型中的重要参数如下:
* `batch_size`:Keras 的默认批次大小为 32。批次大小是 Keras 将使用的迷你批次的大小。 当然,这意味着 Keras 假设您要使用小批量梯度下降。 如果由于某种原因不想使用小批量梯度,可以设置`batch_size=None`
* `epochs`:一个时期只是整个训练集的单次通过。 在实践中,您需要在训练网络时对其进行监视,以了解网络何时收敛,因此`epochs`是一个易于学习的超参数。 稍后,我们将看到可以在每个时期甚至比最后一个时期更好的每个时期保存模型的权重。 一旦知道如何做到这一点,我们就可以选择我们认为最好的时期,并实施一种基于人的早期停止。
......@@ -283,7 +283,7 @@ Model Test MAE: 0.190189985043
现在,我们已经针对该问题训练了 MLP 和六层深度神经网络,现在可以调整和优化模型超参数了。
我们将在[第 6 章](../Text/06.html)*超参数优化*中讨论深度模型调整。 您可以使用多种策略为模型选择最佳参数。 您可能已经注意到,我们仍然可以优化许多可能的参数和超参数。
我们将在第 6 章*超参数优化*中讨论深度模型调整。 您可以使用多种策略为模型选择最佳参数。 您可能已经注意到,我们仍然可以优化许多可能的参数和超参数。
如果要完全调整此模型,则应执行以下操作:
......
......@@ -77,7 +77,7 @@ TensorBoard 回调是可以在模型训练之前进行配置和实例化的对
# 创建一个 TensorBoard 回调
在本章中,我通过复制[第 2 章](../Text/02.html)*的网络和数据开始使用深度学习来解决回归问题*。 我们将做一些简单的添加来添加 TensorBoard 回调。 让我们从修改我们首先构建的`mlp`开始。
在本章中,我通过复制第 2 章*的网络和数据开始使用深度学习来解决回归问题*。 我们将做一些简单的添加来添加 TensorBoard 回调。 让我们从修改我们首先构建的`mlp`开始。
首先,我们需要使用以下代码导入 TensorBoard 回调类:
......@@ -99,7 +99,7 @@ def create_callbacks():
* `log_dir` **:**这是我们将为 TensorBoard 写入日志文件的路径。
您可能已经注意到,我正在将 MLP 网络的 TensorBoard 回调的日志写入`~/ch_3_tb_log/mlp`,这将在我们为 TensorBoard 指定的目录下创建一个新的 Director `mlp`。 这是故意的。 我们将配置在[第 2 章](../Text/02.html)*中使用深度学习解决回归问题*训练的深度神经网络模型,以登录到单独的目录`~/ch_3_tb_log/dnn`。 这样做将使我们能够比较两个模型的运行。
您可能已经注意到,我正在将 MLP 网络的 TensorBoard 回调的日志写入`~/ch_3_tb_log/mlp`,这将在我们为 TensorBoard 指定的目录下创建一个新的 Director `mlp`。 这是故意的。 我们将配置在第 2 章*中使用深度学习解决回归问题*训练的深度神经网络模型,以登录到单独的目录`~/ch_3_tb_log/dnn`。 这样做将使我们能够比较两个模型的运行。
* `histogram_freq`:这指定我们将多长时间计算一次激活和权重的直方图(以时期为单位)。 它的默认值为 0,这会使日志更小,但不会生成直方图。 我们将介绍为什么以及何时您会对直方图感兴趣。
* `batch_size`:这是用于计算直方图的批处理大小。 默认为 32。
......@@ -138,7 +138,7 @@ tensorboard_callback = TensorBoard(log_dir='./ch3_tb_log/dnn',
# 可视化培训
由于我们已在[第 2 章](../Text/02.html)*中使用这两种模型编写了日志数据,因此使用了深度学习解决了回归问题*,因此可以使用 TensorBoard 以图形方式比较这两种模型。 打开 TensorBoard 并转到 SCALARS 选项卡。 您应该会看到类似这样的内容。 您可能需要单击 loss 和 val_loss 来展开图形:
由于我们已在第 2 章*中使用这两种模型编写了日志数据,因此使用了深度学习解决了回归问题*,因此可以使用 TensorBoard 以图形方式比较这两种模型。 打开 TensorBoard 并转到 SCALARS 选项卡。 您应该会看到类似这样的内容。 您可能需要单击 loss 和 val_loss 来展开图形:
![](img/6ed1b1a7-9d13-4b10-91f3-2c4bfb2db2f3.png)
......
# 使用深度学习解决二进制分类问题
在本章中,我们将使用 Keras 和 TensorFlow 解决棘手的二进制分类问题。 我们将首先讨论深度学习对此类问题的利弊,然后我们将继续使用与[第 2 章](../Text/02.html)*中使用的相同框架建立解决方案。 学习解决回归问题*。 最后,我们将更深入地介绍 Keras 回调,甚至使用自定义回调来实现曲线下[ETG5] / **区域的每个时期**接收器操作特征** / **区域( **ROC AUC** )指标。****
在本章中,我们将使用 Keras 和 TensorFlow 解决棘手的二进制分类问题。 我们将首先讨论深度学习对此类问题的利弊,然后我们将继续使用与第 2 章*中使用的相同框架建立解决方案。 学习解决回归问题*。 最后,我们将更深入地介绍 Keras 回调,甚至使用自定义回调来实现曲线下[ETG5] / **区域的每个时期**接收器操作特征** / **区域( **ROC AUC** )指标。****
我们将在本章介绍以下主题:
......@@ -19,11 +19,11 @@
与更传统的分类器(例如逻辑回归模型)或什至基于树的模型(例如**随机森林****梯度提升机**)相比,深度神经网络有一些不错的选择 优点。
与回归一样,我们在[第 2 章](../Text/02.html)*中使用深度学习解决了回归问题*,我们不需要选择或筛选特征。 在本章选择的问题中,有 178 个输入变量。 每个输入变量都是来自标记为 **x1..x178** 的 E **脑电图****EEG** )的特定输入。 即使您是医生,也很难理解这么多功能与目标变量之间的关系。 这些功能中的某些功能很可能是不相关的,而这些变量和目标之间可能存在一些更高级别的交互,这是一个更好的机会。 如果使用传统模型,则经过功能选择步骤后,我们将获得最佳模型性能。 使用深度神经网络时不需要这样做。
与回归一样,我们在第 2 章*中使用深度学习解决了回归问题*,我们不需要选择或筛选特征。 在本章选择的问题中,有 178 个输入变量。 每个输入变量都是来自标记为 **x1..x178** 的 E **脑电图****EEG** )的特定输入。 即使您是医生,也很难理解这么多功能与目标变量之间的关系。 这些功能中的某些功能很可能是不相关的,而这些变量和目标之间可能存在一些更高级别的交互,这是一个更好的机会。 如果使用传统模型,则经过功能选择步骤后,我们将获得最佳模型性能。 使用深度神经网络时不需要这样做。
# 深度神经网络的缺点
正如我们在[第 2 章](../Text/02.html)*中使用深度学习解决回归问题*所述,深度神经网络不容易解释。 虽然深度神经网络是出色的预测器,但要理解它们为何得出自己的预测并不容易。 需要重复的是,当任务是要了解哪些功能与目标的变化最相关时,深度神经网络并不是工作的工具。 但是,如果目标是原始预测能力,则应考虑使用深度神经网络。
正如我们在第 2 章*中使用深度学习解决回归问题*所述,深度神经网络不容易解释。 虽然深度神经网络是出色的预测器,但要理解它们为何得出自己的预测并不容易。 需要重复的是,当任务是要了解哪些功能与目标的变化最相关时,深度神经网络并不是工作的工具。 但是,如果目标是原始预测能力,则应考虑使用深度神经网络。
我们还应该考虑复杂性。 深度神经网络是具有许多参数的复杂模型。 找到最佳的神经网络可能需要花费时间和实验。 并非所有问题都能确保达到如此复杂的水平。
......@@ -31,7 +31,7 @@
# 案例研究–癫痫发作识别
您可能已经猜到了,我们将要解决二进制分类问题。 我们将使用与在[第 2 章](../Text/02.html)*中使用深度学习解决回归问题*建立的框架相同的框架来计划问题,并根据需要对其进行修改。 您可以在本书的 GitHub 存储库中的[第 4 章](../Text/02.html)*下使用深度学习解决回归问题*,找到本章的完整代码。
您可能已经猜到了,我们将要解决二进制分类问题。 我们将使用与在第 2 章和*中使用深度学习解决回归问题*建立的框架相同的框架来计划问题,并根据需要对其进行修改。 您可以在本书的 GitHub 存储库中的第 4 章*下使用深度学习解决回归问题*,找到本章的完整代码。
# 定义我们的数据集
......@@ -80,7 +80,7 @@ def load_data():
我已经修改了原始数据集,通过将状态 2-5 更改为 0 级(表示无癫痫发作)和将 1 级(表示有癫痫发作)将状态重新定义为二元分类问题。
[第 2 章](../Text/02.html)*中的回归问题一样,使用深度学习解决回归问题*,我们将使用 80%的训练,10%的 val,10%的测试分割。
第 2 章*中的回归问题一样,使用深度学习解决回归问题*,我们将使用 80%的训练,10%的 val,10%的测试分割。
# 成本函数
......@@ -153,7 +153,7 @@ def build_network(input_features=None):
# 如果我们使用的神经元太少会怎样?
想象一下,我们没有隐藏层,只有输入和输出的情况。 我们在[第 1 章](../Text/01.html)*深度学习的基础知识*中讨论了该架构,在此我们展示了如何无法为`XOR`函数建模。 这样的网络架构无法对数据中的任何非线性进行建模,因此无法通过网络进行建模。 每个隐藏层都为功能工程越来越复杂的交互提供了机会。
想象一下,我们没有隐藏层,只有输入和输出的情况。 我们在第 1 章*深度学习的基础知识*中讨论了该架构,在此我们展示了如何无法为`XOR`函数建模。 这样的网络架构无法对数据中的任何非线性进行建模,因此无法通过网络进行建模。 每个隐藏层都为功能工程越来越复杂的交互提供了机会。
如果选择的神经元太少,则结果可能如下:
......@@ -164,7 +164,7 @@ def build_network(input_features=None):
因此,既然我们了解选择太多参数而不是选择太多参数的价格和行为,那么从哪里开始呢? 据我所知,剩下的只是实验。
测量这些实验可能很棘手。 如果像我们的早期网络一样,您的网络训练很快,那么可以在多种架构中实施诸如交叉验证之类的东西,以评估每种架构的多次运行。 如果您的网络需要很长时间进行训练,则可能会留下一些统计上不太复杂的信息。 我们将在[第 6 章](../Text/06.html)*超参数优化*中介绍网络优化。
测量这些实验可能很棘手。 如果像我们的早期网络一样,您的网络训练很快,那么可以在多种架构中实施诸如交叉验证之类的东西,以评估每种架构的多次运行。 如果您的网络需要很长时间进行训练,则可能会留下一些统计上不太复杂的信息。 我们将在第 6 章*超参数优化*中介绍网络优化。
一些书籍提供了选择神经网络体系结构的经验法则。 我对此表示怀疑和怀疑,您当然不会在这里找到一个。
......@@ -223,7 +223,7 @@ model = build_network(input_features=input_features)
model.fit(x=data["train_X"], y=data["train_y"], batch_size=32, epochs=20, verbose=1, validation_data=(data["val_X"], data["val_y"]), callbacks=callbacks)
```
如果您已经阅读[第 2 章](../Text/02.html)*使用深度学习解决回归问题*,则应该看起来很熟悉。 在大多数情况下,实际上是相同的。 回调列表包含 TensorBoard 回调,因此让我们观看我们的网络训练 20 个纪元,看看会发生什么:
如果您已经阅读第 2 章*使用深度学习解决回归问题*,则应该看起来很熟悉。 在大多数情况下,实际上是相同的。 回调列表包含 TensorBoard 回调,因此让我们观看我们的网络训练 20 个纪元,看看会发生什么:
> ![](img/33cc8da8-37ba-4743-8e74-3bffbc02c050.png)
......@@ -233,7 +233,7 @@ model.fit(x=data["train_X"], y=data["train_y"], batch_size=32, epochs=20, verbos
# 在 Keras 中使用检查点回调
[第 2 章](../Text/02.html)*中,使用深度学习解决回归问题*时,我们看到了`.save()`方法,该方法使我们可以在完成训练后保存 Keras 模型。 但是,如果我们可以不时地将权重写入磁盘,以便在上一个示例中及时返回 *g* o 并在模型开始之前保存其版本,那会不好吗 过拟合? 然后,我们可以就此停止,并使用网络的最低​​方差版本。
第 2 章*中,使用深度学习解决回归问题*时,我们看到了`.save()`方法,该方法使我们可以在完成训练后保存 Keras 模型。 但是,如果我们可以不时地将权重写入磁盘,以便在上一个示例中及时返回 *g* o 并在模型开始之前保存其版本,那会不好吗 过拟合? 然后,我们可以就此停止,并使用网络的最低​​方差版本。
这正是`ModelCheckpoint`回调为我们所做的。 让我们来看看:
......
......@@ -56,7 +56,7 @@
# 成本函数
我们将使用的成本函数称为**多项式交叉熵**。 多项式交叉熵实际上只是在[第 4 章](../Text/04.html)*使用 Keras 进行二进制分类*中看到的二进制交叉熵函数的概括。
我们将使用的成本函数称为**多项式交叉熵**。 多项式交叉熵实际上只是在第 4 章*使用 Keras 进行二进制分类*中看到的二进制交叉熵函数的概括。
让我们一起看看它们,而不只是显示分类交叉熵。 我要断言它们是平等的,然后解释原因:
......@@ -219,7 +219,7 @@ model.fit(x=data["train_X"], y=data["train_y"],
callbacks=callbacks)
```
我正在使用与以前相同的回调。 我没有使用我们在[第 4 章](../Text/04.html)*中构建的 ROC AUC 回调,因为使用 Keras 进行了二进制分类*,因为 ROC AUC 没有为多分类器明确定义。
我正在使用与以前相同的回调。 我没有使用我们在第 4 章*中构建的 ROC AUC 回调,因为使用 Keras 进行了二进制分类*,因为 ROC AUC 没有为多分类器明确定义。
存在一些针对该问题的创造性解决方案。 例如,[**通过成对分析**](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.108.3250&rep=rep1&type=pdf)[**ROC 表面下体积**](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.14.2427&rep=rep1&type=pdf)都是出色的论文,都可以解决这个问题。 但是,实际上,这些方法及其度量标准很少在 R 中使用,最常在 R 中实现。因此,到目前为止,让我们坚持使用多类准确性,并且远离 R。
......
......@@ -145,7 +145,7 @@ search.fit(data["train_X"], data["train_y"])
print(search.best_params_)
```
在 Tesla K80 GPU 实例上,在上述网格上拟合[第 5 章](../Text/05.html)*,使用 Keras 进行多类分类*所使用的 MNIST 模型。 在完成本节之前,让我们看一下搜索的一些输出,如以下代码所示:
在 Tesla K80 GPU 实例上,在上述网格上拟合第 5 章*,使用 Keras 进行多类分类*所使用的 MNIST 模型。 在完成本节之前,让我们看一下搜索的一些输出,如以下代码所示:
```py
Using TensorFlow backend.
......
# 从头开始训练 CNN
深度神经网络彻底改变了计算机视觉。 实际上,我认为在最近几年中计算机视觉的进步已经使深层神经网络成为许多消费者每天使用的东西。 我们已经在[第 5 章](../Text/05.html)*中使用计算机视觉分类器,使用 Keras 进行多类分类*,其中我们使用了深度网络对手写数字进行分类。 现在,我想向您展示卷积层如何工作,如何使用它们以及如何在 Keras 中构建自己的卷积神经网络以构建更好,功能更强大的深度神经网络来解决计算机视觉问题。
深度神经网络彻底改变了计算机视觉。 实际上,我认为在最近几年中计算机视觉的进步已经使深层神经网络成为许多消费者每天使用的东西。 我们已经在第 5 章*中使用计算机视觉分类器,使用 Keras 进行多类分类*,其中我们使用了深度网络对手写数字进行分类。 现在,我想向您展示卷积层如何工作,如何使用它们以及如何在 Keras 中构建自己的卷积神经网络以构建更好,功能更强大的深度神经网络来解决计算机视觉问题。
我们将在本章介绍以下主题:
......
......@@ -11,7 +11,7 @@
# 转移学习概述
[第 7 章](../Text/07.html)*卷积神经网络*中,我们训练了约 50,000 个观测值的卷积神经网络,并且由于网络和问题的复杂性,我们过度拟合了 短短几个时期后就开始训练。 如果您还记得的话,我曾评论说我们的培训集中有 50,000 个观察结果对于计算机视觉问题不是很大。 确实如此。 计算机视觉问题喜欢数据,而我们可以提供给他们的数据越多,它们的性能就越好。
第 7 章*卷积神经网络*中,我们训练了约 50,000 个观测值的卷积神经网络,并且由于网络和问题的复杂性,我们过度拟合了 短短几个时期后就开始训练。 如果您还记得的话,我曾评论说我们的培训集中有 50,000 个观察结果对于计算机视觉问题不是很大。 确实如此。 计算机视觉问题喜欢数据,而我们可以提供给他们的数据越多,它们的性能就越好。
我们可能认为计算机视觉技术最先进的深度神经网络通常在称为 **ImageNet** 的数据集上进行训练。 [`ImageNet`数据集](http://www.image-net.org/)是包含 120 万张图像的 1,000 个分类器。 这还差不多! 如此庞大的数据集使研究人员能够构建真正复杂的深度神经网络,以检测复杂的特征。 当然,在 120 万张图像上训练有时具有 100 多个图层的模型的价格很高。 培训可能需要数周和数月,而不是数小时。
......@@ -79,7 +79,7 @@
# 源网络架构
我们将使用 [**Inception-V3** 网络体系结构](https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Szegedy_Rethinking_the_Inception_CVPR_2016_paper.pdf)。 与您到目前为止在本书中所看到的相比,Inception 体系结构很有趣并且非常复杂。 如果您从[第 7 章](../Text/07.html)*卷积神经网络*中回想起,我们必须围绕网络体系结构做出的决定之一就是选择过滤器大小。 对于每一层,我们必须决定是否应使用例如 *3 x 3* 滤镜,而不是 *5 x 5* 滤镜。 当然,也许根本就不需要另一次卷积。 也许像池化之类的东西可能更合适。 因此,如果我们在每一层都做所有事情,该怎么办? 这就是开始的动机。
我们将使用 [**Inception-V3** 网络体系结构](https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Szegedy_Rethinking_the_Inception_CVPR_2016_paper.pdf)。 与您到目前为止在本书中所看到的相比,Inception 体系结构很有趣并且非常复杂。 如果您从第 7 章*卷积神经网络*中回想起,我们必须围绕网络体系结构做出的决定之一就是选择过滤器大小。 对于每一层,我们必须决定是否应使用例如 *3 x 3* 滤镜,而不是 *5 x 5* 滤镜。 当然,也许根本就不需要另一次卷积。 也许像池化之类的东西可能更合适。 因此,如果我们在每一层都做所有事情,该怎么办? 这就是开始的动机。
该体系结构基于一系列模块或称为**初始模块**的构建块。 在每个初始模块中,先前的激活都赋予 *1 x 1* 卷积, *3 x 3* 卷积, *5 x 5* 卷积和最大值 池层。 然后将输出串联在一起。
......@@ -135,7 +135,7 @@ for layer in base_model.layers:
# 数据输入
快速浏览图像应使您确信我们的图像的分辨率和大小均不同。 正如您从[第 7 章](../Text/07.html)*卷积神经网络,*所了解的那样,我们需要这些图像的大小与神经网络的输入张量一致。 这是一个非常现实的问题,您将经常面对计算机视觉任务。 虽然当然可以使用 [**ImageMagick**](http://www.imagemagick.org) 之类的程序来批量调整图像大小,但 Keras `ImageDataGenerator`类可用于 快速调整图像大小,这就是我们要做的。
快速浏览图像应使您确信我们的图像的分辨率和大小均不同。 正如您从第 7 章*卷积神经网络,*所了解的那样,我们需要这些图像的大小与神经网络的输入张量一致。 这是一个非常现实的问题,您将经常面对计算机视觉任务。 虽然当然可以使用 [**ImageMagick**](http://www.imagemagick.org) 之类的程序来批量调整图像大小,但 Keras `ImageDataGenerator`类可用于 快速调整图像大小,这就是我们要做的。
Inception-V3 期望 299 x 299 x 3 图像。 我们可以在数据生成器中指定此目标大小,如以下代码所示:
......
......@@ -175,7 +175,7 @@ array([ 5.81600726e-01, 3.07168198e+00, 3.73339128e+00,
# 通过预测学习单词嵌入
单词嵌入是通过使用专门为该任务构建的神经网络来计算的。 我将在这里介绍该网络的概述。 一旦计算了某些语料库的词嵌入,它们便可以轻松地重用于其他应用程序,因此使该技术成为迁移学习的候选者,类似于我们在[第 8 章](../Text/08.html)*迁移中介绍的技术 使用预先训练的 CNN* 学习。
单词嵌入是通过使用专门为该任务构建的神经网络来计算的。 我将在这里介绍该网络的概述。 一旦计算了某些语料库的词嵌入,它们便可以轻松地重用于其他应用程序,因此使该技术成为迁移学习的候选者,类似于我们在第 8 章*迁移中介绍的技术 使用预先训练的 CNN* 学习。
当我们完成了对该词嵌入网络的训练后,我们网络中单个隐藏层的权重将成为我们词嵌入的查找表。 对于词汇表中的每个单词,我们将学习该单词的向量。
......@@ -231,13 +231,13 @@ Embedding(input_dim=10000, output_dim=128, input_length=10)
在这种情况下,该层的输出将是形状为 10 x 128 的 2D 矩阵,其中每个文档的 10 个单词将具有与之关联的 128 元素矢量。
这样的单词序列可以作为 LSTM 的出色输入。 LSTM 层可以紧随嵌入层。 就像上一章一样,我们可以将嵌入层中的这 10 行视为 LSTM 的顺序输入。 在本章的第一个示例中,我将使用 LSTM,因此,如果您在未阅读[第 9 章](../Text/09.html)*的情况下从头开始训练 RNN* ,则请花一点时间 让您重新了解 LSTM 的操作,可以在此处找到。
这样的单词序列可以作为 LSTM 的出色输入。 LSTM 层可以紧随嵌入层。 就像上一章一样,我们可以将嵌入层中的这 10 行视为 LSTM 的顺序输入。 在本章的第一个示例中,我将使用 LSTM,因此,如果您在未阅读第 9 章*的情况下从头开始训练 RNN* ,则请花一点时间 让您重新了解 LSTM 的操作,可以在此处找到。
如果我们想将嵌入层直接连接到密集层,则需要对其进行展平,但您可能不想这样做。 如果您有序列文本,通常使用 LSTM 是更好的选择。 我们还有另外一个有趣的选择。
# 一维 CNN 用于自然语言处理
回顾[第 7 章](../Text/07.html)*从头开始训练 CNN* 时,我们使用了卷积在图像区域上滑动窗口以学习复杂的视觉特征。 这使我们能够学习重要的局部视觉功能,而不管这些功能在图片中的位置,然后随着我们的网络越来越深入,逐步地学习越来越复杂的功能。 我们通常在 2D 或 3D 图像上使用 *3 x 3**5 x 5* 滤镜。 如果您对卷积层及其工作原理的理解感到生疏,则可能需要阅读[第 7 章](https://cdp.packtpub.com/deep_learning_quick_reference/wp-admin/post.php?post=257&action=edit#post_169)*从头开始训练 CNN。*
回顾第 7 章,*从头开始训练 CNN* 时,我们使用了卷积在图像区域上滑动窗口以学习复杂的视觉特征。 这使我们能够学习重要的局部视觉功能,而不管这些功能在图片中的位置,然后随着我们的网络越来越深入,逐步地学习越来越复杂的功能。 我们通常在 2D 或 3D 图像上使用 *3 x 3**5 x 5* 滤镜。 如果您对卷积层及其工作原理的理解感到生疏,则可能需要阅读第 7 章*从头开始训练 CNN。*
事实证明,我们可以对一系列单词使用相同的策略。 在这里,我们的 2D 矩阵是嵌入层的输出。 每行代表一个单词,并且该行中的所有元素都是其单词向量。 继续前面的示例,我们将有一个 10 x 128 的向量,其中连续有 10 个单词,每个单词都由 128 个元素的向量空间表示。 我们当然可以在这些单词上滑动过滤器。
......@@ -361,7 +361,7 @@ def build_network(vocab_size, embedding_dim, sequence_length):
return model
```
与其他二进制分类任务一样,我们可以使用二进制交叉熵。 请注意,因为我们正在将 LSTM 层连接到密集层,所以我们需要将`return_sequences`设置为`False`,正如我们在[第 9 章](../Text/09.html)*从头训练*中讨论的那样 ]。
与其他二进制分类任务一样,我们可以使用二进制交叉熵。 请注意,因为我们正在将 LSTM 层连接到密集层,所以我们需要将`return_sequences`设置为`False`,正如我们在第 9 章*从头训练*中讨论的那样 ]。
为了使这部分代码可重用,我们使词汇量,嵌入维数和序列长度可配置。 如果要搜索超参数,则还可能希望参数化`dropout``recurrent_dropout`和 LSTM 神经元的数量。
......@@ -577,7 +577,7 @@ embedding_layer = Embedding(input_dim=vocab_size,
在大多数情况下,此代码看起来是等效的。 有两个主要区别:
* 我们初始化层权重以包含在我们与`weights=[embedding_matrix]`组装的 GloVe 矩阵中。
* 我们还将图层设置为`trainable=False`。 这将阻止我们更新权重。 您可能希望以与微调权重相似的方式微调权重,该方式类似于我们在[第 8 章](../Text/08.html)*使用预训练的 CNN* 进行的传递学习中构建的 CNN,但是在大多数情况下, 不必要或没有帮助。
* 我们还将图层设置为`trainable=False`。 这将阻止我们更新权重。 您可能希望以与微调权重相似的方式微调权重,该方式类似于我们在第 8 章*使用预训练的 CNN* 进行的传递学习中构建的 CNN,但是在大多数情况下, 不必要或没有帮助。
# 卷积层
......
......@@ -39,7 +39,7 @@
理解序列到序列模型体系结构的关键是要理解该体系结构是为了允许输入序列的长度与输出序列的长度而变化的。 然后可以使用整个输入序列来预测长度可变的输出序列。
为此,网络被分为两个独立的部分,每个部分都包含一个或多个 LSTM 层,这些层负责一半的任务。 我们在[第 9 章](../Text/09.html)*中讨论了 LSTM,如果您想对其操作进行复习,请从头开始训练 RNN* 。 我们将在以下各节中了解这两个部分。
为此,网络被分为两个独立的部分,每个部分都包含一个或多个 LSTM 层,这些层负责一半的任务。 我们在第 9 章*中讨论了 LSTM,如果您想对其操作进行复习,请从头开始训练 RNN* 。 我们将在以下各节中了解这两个部分。
# 编码器和解码器
......@@ -181,7 +181,7 @@ def load_data(num_samples=50000, start_char='\t', end_char='\n', data_path='data
在此功能中,我们将使用刚刚构建的字典,并对每个短语的文本进行热编码。
一旦完成,我们将剩下三个字典。 它们每个的尺寸为[*文本数*最大序列长度*标记*]。 如果您斜视一下,回想一下[第 10 章](../Text/10.html)*用 Scratch* 中的单词嵌入训练 LSTM 的更简单的时间,您会发现这确实与我们在其他 NLP 模型中使用的相同 在输入端已完成。 我们将使用以下代码定义一种热编码:
一旦完成,我们将剩下三个字典。 它们每个的尺寸为[*文本数*最大序列长度*标记*]。 如果您斜视一下,回想一下第 10 章*用 Scratch* 中的单词嵌入训练 LSTM 的更简单的时间,您会发现这确实与我们在其他 NLP 模型中使用的相同 在输入端已完成。 我们将使用以下代码定义一种热编码:
```py
def one_hot_vectorize(data):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册