提交 6e4717eb 编写于 作者: W wizardforcel

2020-09-06 21:15:59

上级 8855148d
# 前言 # 零、前言
《深度学习快速参考》演示了使用深度学习的快速实用方法。 它着重于现实生活中的问题,并且仅提供了足够的理论和数学知识来加深读者对该主题的理解。 深度学习是机器学习中令人兴奋的快速节奏分支,但它也是一个可以涉足的领域。 在这个领域,每天都会进行大量的详细而复杂的研究,而这可能会令人不知所措。 在本书中,我着重向您传授将深度学习应用于各种实际问题的技能。 我对这本书的最大希望是,它将为您提供使用深度学习技术解决机器学习问题所需的工具。 《深度学习快速参考》演示了使用深度学习的快速实用方法。 它着重于现实生活中的问题,并且仅提供了足够的理论和数学知识来加深读者对该主题的理解。 深度学习是机器学习中令人兴奋的快速节奏分支,但它也是一个可以涉足的领域。 在这个领域,每天都会进行大量的详细而复杂的研究,而这可能会令人不知所措。 在本书中,我着重向您传授将深度学习应用于各种实际问题的技能。 我对这本书的最大希望是,它将为您提供使用深度学习技术解决机器学习问题所需的工具。
...@@ -18,9 +18,9 @@ ...@@ -18,9 +18,9 @@
第 3 章“使用 TensorBoard 监视网络培训”让您立即开始使用 TensorBoard,这是监视和调试未来模型的绝佳应用程序。 第 3 章“使用 TensorBoard 监视网络培训”让您立即开始使用 TensorBoard,这是监视和调试未来模型的绝佳应用程序。
第 4 章“使用深度学习解决二进制分类问题”帮助您使用深度学习解决二进制分类问题。 第 4 章“使用深度学习解决二分类问题”帮助您使用深度学习解决二分类问题。
第 5 章“使用 Keras 解决多类分类问题”,带您进行多类分类并探讨它们之间的区别。 它还讨论了管理过度拟合和最安全的选择。 第 5 章“使用 Keras 解决多分类问题”,带您进行多分类并探讨它们之间的区别。 它还讨论了管理过度拟合和最安全的选择。
第 6 章“超参数优化”显示了两种独立的模型调整方法,一种是众所周知的且经过实战测试的方法,而另一种是最新方法。 第 6 章“超参数优化”显示了两种独立的模型调整方法,一种是众所周知的且经过实战测试的方法,而另一种是最新方法。
......
# 深度学习的基础 # 一、深度学习的基础
欢迎使用《深度学习快速参考》! 在本书中,我将尝试使需要解决深度学习问题的数据科学家,机器学习工程师和软件工程师更容易使用,实用和使用深度学习技术。 如果您想训练自己的深度神经网络并且陷入困境,那么本指南很有可能会有所帮助。 欢迎使用《深度学习快速参考》! 在本书中,我将尝试使需要解决深度学习问题的数据科学家,机器学习工程师和软件工程师更容易使用,实用和使用深度学习技术。 如果您想训练自己的深度神经网络并且陷入困境,那么本指南很有可能会有所帮助。
......
# 使用深度学习解决回归问题 # 二、使用深度学习解决回归问题
在本章中,我们将构建一个简单的**多层感知器****MLP**),它是具有单个隐藏层的神经网络的奇特名称,用于解决回归问题。 然后,我们将深入研究具有多个隐藏层的深度神经网络。 在此过程中,我们将探索模型的性能和过度拟合。 所以,让我们开始吧! 在本章中,我们将构建一个简单的**多层感知器****MLP**),它是具有单个隐藏层的神经网络的奇特名称,用于解决回归问题。 然后,我们将深入研究具有多个隐藏层的深度神经网络。 在此过程中,我们将探索模型的性能和过度拟合。 所以,让我们开始吧!
......
# 使用 TensorBoard 监控网络培训 # 三、使用 TensorBoard 监控网络训练
在本章中,我将向您展示如何使用 TensorBoard 帮助更快更轻松地训练深度神经网络。 我认为 TensorBoard 是一个很棒的工具,经常被忽略,而它又常常被拖到脚注或上一章中。 现在,让我们看一下 TensorBoard,以便我们可以立即开始利用它。 在本章中,我将向您展示如何使用 TensorBoard 帮助更快更轻松地训练深度神经网络。 我认为 TensorBoard 是一个很棒的工具,经常被忽略,而它又常常被拖到脚注或上一章中。 现在,让我们看一下 TensorBoard,以便我们可以立即开始利用它。
...@@ -192,4 +192,4 @@ Sceenshot 显示两个网络中隐藏层 1 的权重直方图 ...@@ -192,4 +192,4 @@ Sceenshot 显示两个网络中隐藏层 1 的权重直方图
在本章中,我们讨论了如何安装,配置和使用 TensorBoard。 我们讨论了如何使用 TensorBoard 在 TensorBoard 的 SCALARS 部分中的每个时期检查模型的损失函数,从而直观地比较模型。 然后,我们使用 TensorsBoard 的 GRAPHS 部分来可视化网络结构。 最后,我们通过查看直方图向您展示了如何使用 TensorBoard 进行故障排除。 在本章中,我们讨论了如何安装,配置和使用 TensorBoard。 我们讨论了如何使用 TensorBoard 在 TensorBoard 的 SCALARS 部分中的每个时期检查模型的损失函数,从而直观地比较模型。 然后,我们使用 TensorsBoard 的 GRAPHS 部分来可视化网络结构。 最后,我们通过查看直方图向您展示了如何使用 TensorBoard 进行故障排除。
在下一章中,我们将研究如何使用 Keras 和 TensorFlow 解决二进制分类问题,从而扩展我们的深度学习技巧。 在下一章中,我们将研究如何使用 Keras 和 TensorFlow 解决二分类问题,从而扩展我们的深度学习技巧。
\ No newline at end of file \ No newline at end of file
# 使用深度学习解决二进制分类问题 # 四、使用深度学习解决二分类问题
在本章中,我们将使用 Keras 和 TensorFlow 解决棘手的二进制分类问题。 我们将首先讨论深度学习对此类问题的利弊,然后我们将继续使用与第 2 章“学习解决回归问题”中使用的相同框架建立解决方案。 最后,我们将更深入地介绍 Keras 回调,甚至使用自定义回调来实现每个周期的**受试者工作特征的曲线下面积****ROC AUC**)指标。 在本章中,我们将使用 Keras 和 TensorFlow 解决棘手的二分类问题。 我们将首先讨论深度学习对此类问题的利弊,然后我们将继续使用与第 2 章“学习解决回归问题”中使用的相同框架建立解决方案。 最后,我们将更深入地介绍 Keras 回调,甚至使用自定义回调来实现每个周期的**受试者工作特征的曲线下面积****ROC AUC**)指标。
我们将在本章介绍以下主题: 我们将在本章介绍以下主题:
*进制分类和深度神经网络 * 二分类和深度神经网络
* 案例研究–癫痫发作识别 * 案例研究–癫痫发作识别
* 在 Keras 中建立二分类器 * 在 Keras 中建立二分类器
* 在 Keras 中使用检查点回调 * 在 Keras 中使用检查点回调
* 在自定义回调中测量 ROC AUC * 在自定义回调中测量 ROC AUC
* 测量精度,召回率和 f1 得分 * 测量精度,召回率和 f1 得分
# 二进制分类和深度神经网络 # 二分类和深度神经网络
进制分类问题(例如回归问题)是非常常见的机器学习任务。 如此之多,以至于任何一本有关深度学习的书都无法完整覆盖。 可以肯定的是,我们还没有真正达到深度神经网络的甜蜜点,但是我们进展顺利。 在开始编写代码之前,让我们谈谈在选择深度神经网络来解决此类问题时应考虑的权衡。 二分类问题(例如回归问题)是非常常见的机器学习任务。 如此之多,以至于任何一本有关深度学习的书都无法完整覆盖。 可以肯定的是,我们还没有真正达到深度神经网络的甜蜜点,但是我们进展顺利。 在开始编写代码之前,让我们谈谈在选择深度神经网络来解决此类问题时应考虑的权衡。
# 深度神经网络的好处 # 深度神经网络的好处
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
# 案例研究–癫痫发作识别 # 案例研究–癫痫发作识别
您可能已经猜到了,我们将要解决二进制分类问题。 我们将使用与在第 2 章“使用深度学习解决回归问题”建立的框架相同的框架来计划问题,并根据需要对其进行修改。 您可以在本书的 GitHub 存储库中的第 4 章“使用深度学习解决回归问题”,找到本章的完整代码。 您可能已经猜到了,我们将要解决二分类问题。 我们将使用与在第 2 章“使用深度学习解决回归问题”建立的框架相同的框架来计划问题,并根据需要对其进行修改。 您可以在本书的 GitHub 存储库中的第 4 章“使用深度学习解决回归问题”,找到本章的完整代码。
# 定义我们的数据集 # 定义我们的数据集
...@@ -78,7 +78,7 @@ def load_data(): ...@@ -78,7 +78,7 @@ def load_data():
数据集中有五个患者状态。 但是,状态 2 至状态 5 的患者未发生癫痫发作。 状态 1 的患者正在发作。 数据集中有五个患者状态。 但是,状态 2 至状态 5 的患者未发生癫痫发作。 状态 1 的患者正在发作。
我已经修改了原始数据集,通过将状态 2-5 更改为 0 级(表示无癫痫发作)和将 1 级(表示有癫痫发作)将状态重新定义为二分类问题。 我已经修改了原始数据集,通过将状态 2-5 更改为 0 级(表示无癫痫发作)和将 1 级(表示有癫痫发作)将状态重新定义为二分类问题。
与第 2 章“使用深度学习解决回归问题”中的回归问题一样,我们将使用 80% 的训练,10% 的 val,10% 的测试分割。 与第 2 章“使用深度学习解决回归问题”中的回归问题一样,我们将使用 80% 的训练,10% 的 val,10% 的测试分割。
...@@ -120,7 +120,7 @@ def binary_accuracy(y_true, y_pred): ...@@ -120,7 +120,7 @@ def binary_accuracy(y_true, y_pred):
您可能想知道我们的数据集是否平衡,因为准确性对于不平衡的数据集而言效果很差。 实际上这是不平衡的。 只有五分之一的数据集是类 1。我们将 ROC AUC 分数作为自定义回调来计算,以解决此问题。 在 Keras 中未将 ROC 用作度量标准,因为度量标准是针对每个小型批次计算的,并且 ROC AUC 分数并非真正由小型批次定义。 您可能想知道我们的数据集是否平衡,因为准确性对于不平衡的数据集而言效果很差。 实际上这是不平衡的。 只有五分之一的数据集是类 1。我们将 ROC AUC 分数作为自定义回调来计算,以解决此问题。 在 Keras 中未将 ROC 用作度量标准,因为度量标准是针对每个小型批次计算的,并且 ROC AUC 分数并非真正由小型批次定义。
# 在 Keras 中建立二分类器 # 在 Keras 中建立二分类器
既然我们已经定义了问题,输入,期望的输出和成本函数,我们就可以在 Keras 中快速编写其余代码。 我们唯一缺少的是网络体系结构。 我们将很快讨论更多。 关于 Keras 的我最喜欢的事情之一是调整网络架构有多么容易。 如您所见,在找到最佳架构之前,可能需要进行大量实验。 如果是这样,那么易于更改的框架会使您的工作变得更加轻松! 既然我们已经定义了问题,输入,期望的输出和成本函数,我们就可以在 Keras 中快速编写其余代码。 我们唯一缺少的是网络体系结构。 我们将很快讨论更多。 关于 Keras 的我最喜欢的事情之一是调整网络架构有多么容易。 如您所见,在找到最佳架构之前,可能需要进行大量实验。 如果是这样,那么易于更改的框架会使您的工作变得更加轻松!
...@@ -192,7 +192,7 @@ x = Dense(16, activation='relu', name="hidden5")(x) ...@@ -192,7 +192,7 @@ x = Dense(16, activation='relu', name="hidden5")(x)
prediction = Dense(1, activation='sigmoid', name="final")(x) prediction = Dense(1, activation='sigmoid', name="final")(x)
``` ```
在此示例中,我们正在构建一个二进制分类器,因此我们希望我们的网络输出观察结果属于类 1 的概率。幸运的是,`sigmoid`激活将精确地做到这一点,将网络输出限制在 0 到 1 之间。 在此示例中,我们正在构建一个二分类器,因此我们希望我们的网络输出观察结果属于类 1 的概率。幸运的是,`sigmoid`激活将精确地做到这一点,将网络输出限制在 0 到 1 之间。
# 放在一起 # 放在一起
...@@ -306,9 +306,9 @@ def create_callbacks(data): ...@@ -306,9 +306,9 @@ def create_callbacks(data):
# 测量精度,召回率和 f1 得分 # 测量精度,召回率和 f1 得分
正如您可能对其他二进制分类器有丰富的经验一样,我认为用几句话讨论如何创建与更传统的二进制分类器一起使用的一些常规指标是明智的。 正如您可能对其他二分类器有丰富的经验一样,我认为用几句话讨论如何创建与更传统的二分类器一起使用的一些常规指标是明智的。
Keras 功能 API 与 scikit-learn 中可能使用的 API 之间的区别是`.predict()`方法的行为。 当使用 Keras 时,对于`n`个样本中的每个,`.predict()`将返回`k`类概率的`nxk`矩阵。 对于二进制分类器,将只有一列,即类别 1 的类别概率。这使 Keras `.predict()`更像 scikit-learn 中的`.predict_proba()` Keras 功能 API 与 scikit-learn 中可能使用的 API 之间的区别是`.predict()`方法的行为。 当使用 Keras 时,对于`n`个样本中的每个,`.predict()`将返回`k`类概率的`nxk`矩阵。 对于二分类器,将只有一列,即类别 1 的类别概率。这使 Keras `.predict()`更像 scikit-learn 中的`.predict_proba()`
在计算精度,召回率或其他基于类的指标时,您需要通过选择一些操作点来转换`.predict()`输出,如以下代码所示: 在计算精度,召回率或其他基于类的指标时,您需要通过选择一些操作点来转换`.predict()`输出,如以下代码所示:
...@@ -329,8 +329,8 @@ print(classification_report(data["val_y"], y_hat_val)) ...@@ -329,8 +329,8 @@ print(classification_report(data["val_y"], y_hat_val))
# 摘要 # 摘要
在本章中,我们讨论了使用深度神经网络作为二进制分类器。 我们花了很多时间讨论网络体系结构的设计选择,并提出了这样的想法,即搜索和试验是当前选择体系结构的最佳方法。 在本章中,我们讨论了使用深度神经网络作为二分类器。 我们花了很多时间讨论网络体系结构的设计选择,并提出了这样的想法,即搜索和试验是当前选择体系结构的最佳方法。
我们学习了如何在 Keras 中使用检查点回调来使我们能够及时返回并找到具有所需性能特征的模型版本。 然后,我们在训练的模型中创建并使用了自定义回调来衡量 ROC AUC 得分。 我们总结了如何将 Keras `.predict()`方法与`sklearn.metrics`中的传统指标结合使用。 我们学习了如何在 Keras 中使用检查点回调来使我们能够及时返回并找到具有所需性能特征的模型版本。 然后,我们在训练的模型中创建并使用了自定义回调来衡量 ROC AUC 得分。 我们总结了如何将 Keras `.predict()`方法与`sklearn.metrics`中的传统指标结合使用。
在下一章中,我们将研究多类分类,我们将更多地讨论如何防止过拟合。 在下一章中,我们将研究多分类,我们将更多地讨论如何防止过拟合。
\ No newline at end of file \ No newline at end of file
# 使用 Keras 解决多类分类问题 # 五、使用 Keras 解决多分类问题
在本章中,我们将使用 Keras 和 TensorFlow 来处理具有许多自变量的 10 类多分类问题。 和以前一样,我们将讨论使用深度学习解决此问题的利弊; 但是,您不会发现很多缺点。 最后,我们将花费大量时间讨论控制过度拟合的方法。 在本章中,我们将使用 Keras 和 TensorFlow 来处理具有许多自变量的 10 类多分类问题。 和以前一样,我们将讨论使用深度学习解决此问题的利弊; 但是,您不会发现很多缺点。 最后,我们将花费大量时间讨论控制过度拟合的方法。
我们将在本章介绍以下主题: 我们将在本章介绍以下主题:
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
这里是! 我们终于找到了有趣的东西! 在本章中,我们将创建一个深度神经网络,该网络可以将观察结果分类为多个类别,这是神经网络确实发挥出色的地方之一。 让我们再谈一些关于深度神经网络对此类问题的好处。 这里是! 我们终于找到了有趣的东西! 在本章中,我们将创建一个深度神经网络,该网络可以将观察结果分类为多个类别,这是神经网络确实发挥出色的地方之一。 让我们再谈一些关于深度神经网络对此类问题的好处。
就像我们都在谈论同一件事一样,让我们​​在开始之前定义多类分类。 想象我们有一个分类器,该分类器将各种水果的权重作为输入,并根据给定的权重来预测水果。 输出可能恰好是一组类(苹果,香蕉,芒果等)中的一个类。 这是多类分类,不要与多标签混淆,在这种情况下,模型可能会预测一组标签是否将应用于互不排斥的观察结果。 就像我们都在谈论同一件事一样,让我们​​在开始之前定义多分类。 想象我们有一个分类器,该分类器将各种水果的权重作为输入,并根据给定的权重来预测水果。 输出可能恰好是一组类(苹果,香蕉,芒果等)中的一个类。 这是多分类,不要与多标签混淆,在这种情况下,模型可能会预测一组标签是否将应用于互不排斥的观察结果。
# 好处 # 好处
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
# 案例研究-手写数字分类 # 案例研究-手写数字分类
我们将使用多分类网络来识别手写数字的相应类。 与以前一样,如果您想继续阅读,可以在本书的 Git 存储库中的`Chapter05`下找到本章的完整代码。 我们将使用多分类网络来识别手写数字的相应类。 与以前一样,如果您想继续阅读,可以在本书的 Git 存储库中的`Chapter05`下找到本章的完整代码。
# 问题定义 # 问题定义
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
# 成本函数 # 成本函数
我们将使用的成本函数称为**多项式交叉熵**。 多项式交叉熵实际上只是在第 4 章“使用 Keras 进行二进制分类”中看到的二进制交叉熵函数的概括。 我们将使用的成本函数称为**多项式交叉熵**。 多项式交叉熵实际上只是在第 4 章“使用 Keras 进行二分类”中看到的二进制交叉熵函数的概括。
让我们一起看看它们,而不只是显示分类交叉熵。 我要断言它们是平等的,然后解释原因: 让我们一起看看它们,而不只是显示分类交叉熵。 我要断言它们是平等的,然后解释原因:
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
# 指标 # 指标
分类交叉熵是一个很好的成本函数,但实际上并不能告诉我们很多我们可以从网络中获得的预测质量。 不幸的是,像 ROC AUC 这样的二进制分类指标也对我们没有太大帮助,因为我们超越了二进制分类 AUC 的定义并没有。 分类交叉熵是一个很好的成本函数,但实际上并不能告诉我们很多我们可以从网络中获得的预测质量。 不幸的是,像 ROC AUC 这样的二分类指标也对我们没有太大帮助,因为我们超越了二分类 AUC 的定义并没有。
鉴于缺少更好的指标,我将使用准确性作为人类可以理解的培训指标。 幸运的是,在这种情况下,我的数据集是平衡的。 正如您所期望的那样,准确性是指真实值与预测值的匹配次数除以数据集的总大小。 鉴于缺少更好的指标,我将使用准确性作为人类可以理解的培训指标。 幸运的是,在这种情况下,我的数据集是平衡的。 正如您所期望的那样,准确性是指真实值与预测值的匹配次数除以数据集的总大小。
...@@ -157,7 +157,7 @@ Softmax 压缩所有这些逻辑回归的输出,使它们的总和为 1,从 ...@@ -157,7 +157,7 @@ Softmax 压缩所有这些逻辑回归的输出,使它们的总和为 1,从
![](img/dd793fbb-380f-4811-b53e-936c412a0595.png) ![](img/dd793fbb-380f-4811-b53e-936c412a0595.png)
先前的功能通常称为多项式逻辑回归。 它有点像一层,仅输出和神经网络。 我们不再频繁使用多项式逻辑回归。 但是,我们当然可以一直使用`softmax`功能。 对于本书中的大多数多分类问题,我们将使用`softmax`,因此值得理解。 先前的功能通常称为多项式逻辑回归。 它有点像一层,仅输出和神经网络。 我们不再频繁使用多项式逻辑回归。 但是,我们当然可以一直使用`softmax`功能。 对于本书中的大多数多分类问题,我们将使用`softmax`,因此值得理解。
如果您像我一样,并且发现所有数学知识都难以阅读,那么在代码中查看`softmax`可能会更容易。 因此,在继续操作之前,请使用以下代码段进行操作: 如果您像我一样,并且发现所有数学知识都难以阅读,那么在代码中查看`softmax`可能会更容易。 因此,在继续操作之前,请使用以下代码段进行操作:
...@@ -219,7 +219,7 @@ model.fit(x=data["train_X"], y=data["train_y"], ...@@ -219,7 +219,7 @@ model.fit(x=data["train_X"], y=data["train_y"],
callbacks=callbacks) callbacks=callbacks)
``` ```
我正在使用与以前相同的回调。 我没有使用我们在第 4 章“使用 Keras 进行二进制分类”中构建的 ROC AUC 回调,因为 ROC AUC 没有为多分类器明确定义。 我正在使用与以前相同的回调。 我没有使用我们在第 4 章“使用 Keras 进行二分类”中构建的 ROC AUC 回调,因为 ROC AUC 没有为多分类器明确定义。
存在一些针对该问题的创造性解决方案。 例如,[**通过成对分析近似多类 ROC**](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。 存在一些针对该问题的创造性解决方案。 例如,[**通过成对分析近似多类 ROC**](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。
...@@ -346,7 +346,7 @@ def build_network(input_features=None): ...@@ -346,7 +346,7 @@ def build_network(input_features=None):
# 摘要 # 摘要
在本章中,我们实际上已经开始了解深度神经网络在进行多分类时的功能。 我们详细介绍了`softmax`功能,然后我们构建并训练了一个网络来将手写数字分为 10 个各自的类别。 在本章中,我们实际上已经开始了解深度神经网络在进行多分类时的功能。 我们详细介绍了`softmax`功能,然后我们构建并训练了一个网络来将手写数字分为 10 个各自的类别。
最后,当我们注意到模型过度拟合时,我们尝试同时使用 dropout 和 L2 正则化来减少模型的方差。 最后,当我们注意到模型过度拟合时,我们尝试同时使用 dropout 和 L2 正则化来减少模型的方差。
......
# 超参数优化 # 六、超参数优化
使用深度神经网络的最大缺点之一是它们具有许多应优化的超参数,以使网络发挥最佳性能。 在前面的每个章节中,我们都遇到但没有涵盖超参数估计的挑战。 超参数优化是一个非常重要的话题。 在大多数情况下,这是一个未解决的问题,尽管我们不能涵盖本书的全部主题,但我认为它仍然值得一章。 使用深度神经网络的最大缺点之一是它们具有许多应优化的超参数,以使网络发挥最佳性能。 在前面的每个章节中,我们都遇到但没有涵盖超参数估计的挑战。 超参数优化是一个非常重要的话题。 在大多数情况下,这是一个未解决的问题,尽管我们不能涵盖本书的全部主题,但我认为它仍然值得一章。
...@@ -145,7 +145,7 @@ search.fit(data["train_X"], data["train_y"]) ...@@ -145,7 +145,7 @@ search.fit(data["train_X"], data["train_y"])
print(search.best_params_) print(search.best_params_)
``` ```
在 Tesla K80 GPU 实例上,在上述网格上拟合第 5 章,“使用 Keras 进行多分类”所使用的 MNIST 模型。 在完成本节之前,让我们看一下搜索的一些输出,如以下代码所示: 在 Tesla K80 GPU 实例上,在上述网格上拟合第 5 章,“使用 Keras 进行多分类”所使用的 MNIST 模型。 在完成本节之前,让我们看一下搜索的一些输出,如以下代码所示:
```py ```py
Using TensorFlow backend. Using TensorFlow backend.
......
# 从头开始训练 CNN # 七、从头开始训练 CNN
深度神经网络彻底改变了计算机视觉。 实际上,我认为在最近几年中计算机视觉的进步已经使深层神经网络成为许多消费者每天使用的东西。 我们已经在第 5 章“使用 Keras 进行多分类”中使用计算机视觉分类器,其中我们使用了深度网络对手写数字进行分类。 现在,我想向您展示卷积层如何工作,如何使用它们以及如何在 Keras 中构建自己的卷积神经网络以构建更好,功能更强大的深度神经网络来解决计算机视觉问题。 深度神经网络彻底改变了计算机视觉。 实际上,我认为在最近几年中计算机视觉的进步已经使深层神经网络成为许多消费者每天使用的东西。 我们已经在第 5 章“使用 Keras 进行多分类”中使用计算机视觉分类器,其中我们使用了深度网络对手写数字进行分类。 现在,我想向您展示卷积层如何工作,如何使用它们以及如何在 Keras 中构建自己的卷积神经网络以构建更好,功能更强大的深度神经网络来解决计算机视觉问题。
我们将在本章介绍以下主题: 我们将在本章介绍以下主题:
...@@ -126,7 +126,7 @@ output = Dense(10, activation="softmax", name="softmax")(d2) ...@@ -126,7 +126,7 @@ output = Dense(10, activation="softmax", name="softmax")(d2)
# 成本函数和指标 # 成本函数和指标
在第 5 章中,我们使用分类交叉熵作为多类分类器的损失函数。 这只是另一个多类分类器,我们可以继续使用分类交叉熵作为我们的损失函数,并使用准确性作为度量。 我们已经开始使用图像作为输入,但是幸运的是我们的成本函数和指标保持不变。 在第 5 章中,我们使用分类交叉熵作为多分类器的损失函数。 这只是另一个多分类器,我们可以继续使用分类交叉熵作为我们的损失函数,并使用准确性作为度量。 我们已经开始使用图像作为输入,但是幸运的是我们的成本函数和指标保持不变。
# 卷积层 # 卷积层
......
# 使用预训练的 CNN 进行迁移学习 # 八、将预训练的 CNN 用于迁移学习
迁移学习很棒。 实际上,在一本充满奇妙事物的书中,这可能是我必须告诉您的最奇妙的事物。 如果没有,那也许至少是我可以教给您的最有用和最实用的深度学习技术。 迁移学习可以帮助您解决深度学习问题,尤其是计算机视觉问题,而涉及问题范围的数据和数据却很少。 在本章中,我们将讨论什么是迁移学习,什么时候应该使用它,最后讨论如何在 Keras 中进行迁移学习。 迁移学习很棒。 实际上,在一本充满奇妙事物的书中,这可能是我必须告诉您的最奇妙的事物。 如果没有,那也许至少是我可以教给您的最有用和最实用的深度学习技术。 迁移学习可以帮助您解决深度学习问题,尤其是计算机视觉问题,而涉及问题范围的数据和数据却很少。 在本章中,我们将讨论什么是迁移学习,什么时候应该使用它,最后讨论如何在 Keras 中进行迁移学习。
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
关于计算机视觉和迁移学习,我最常被问到的问题是:我必须拥有多少张图像? 这是一个很难回答的问题,因为,正如我们将在下一节中看到的那样,更多通常更好。 一个更好的问题可能是:我可以使用几张图像来充分解决我的业务问题? 关于计算机视觉和迁移学习,我最常被问到的问题是:我必须拥有多少张图像? 这是一个很难回答的问题,因为,正如我们将在下一节中看到的那样,更多通常更好。 一个更好的问题可能是:我可以使用几张图像来充分解决我的业务问题?
那么,我们的数据集有多有限? 尽管远非科学,但我已经建立了使用多达 2,000 张图像进行二进制分类任务的有用模型。 更简单的任务和更多样化的图像集通常可以在较小的数据集下获得更令人满意的结果。 那么,我们的数据集有多有限? 尽管远非科学,但我已经建立了使用多达 2,000 张图像进行二分类任务的有用模型。 更简单的任务和更多样化的图像集通常可以在较小的数据集下获得更令人满意的结果。
根据经验,您至少需要几千张某类的图像,而通常最好使用 10 至 2 万张图像。 根据经验,您至少需要几千张某类的图像,而通常最好使用 10 至 2 万张图像。
...@@ -69,7 +69,7 @@ Google 研究人员在《重新研究深度学习时代数据的不合理有效 ...@@ -69,7 +69,7 @@ Google 研究人员在《重新研究深度学习时代数据的不合理有效
在本章的示例中,我将使用 Kaggle 的`Dogs versus Cats`数据集。 该数据集包含 25,000 张猫和狗的图像。 每个班级之间达到完美平衡,每个班级 12,500。 可以从[这里](https://www.kaggle.com/c/dogs-vs-cats/data)下载数据集。 在本章的示例中,我将使用 Kaggle 的`Dogs versus Cats`数据集。 该数据集包含 25,000 张猫和狗的图像。 每个班级之间达到完美平衡,每个班级 12,500。 可以从[这里](https://www.kaggle.com/c/dogs-vs-cats/data)下载数据集。
这是一个二进制分类问题。 每张照片都包含狗或猫,但不能同时包含两者。 这是一个二分类问题。 每张照片都包含狗或猫,但不能同时包含两者。
该数据集由 Jeremy Elson 等人于 2007 年组装。 ,它目前托管在 [www.kaggle.com](https://www.kaggle.com/) 上。 它是完全免费下载和用于学术用途的,但是它确实需要一个 Kaggle 帐户并接受其最终用户许可。 一样,这是一个了不起的数据集,因此我在此处包括使用说明。 该数据集由 Jeremy Elson 等人于 2007 年组装。 ,它目前托管在 [www.kaggle.com](https://www.kaggle.com/) 上。 它是完全免费下载和用于学术用途的,但是它确实需要一个 Kaggle 帐户并接受其最终用户许可。 一样,这是一个了不起的数据集,因此我在此处包括使用说明。
...@@ -98,7 +98,7 @@ base_model = InceptionV3(weights='imagenet', include_top=False) ...@@ -98,7 +98,7 @@ base_model = InceptionV3(weights='imagenet', include_top=False)
# 传输网络架构 # 传输网络架构
我们将用更适合我们的用例的全连接层替换最后两层。 由于我们的问题是二进制分类,因此我们将使用激活`sigmoid`的单个神经元替换输出层,如以下代码所示: 我们将用更适合我们的用例的全连接层替换最后两层。 由于我们的问题是二分类,因此我们将使用激活`sigmoid`的单个神经元替换输出层,如以下代码所示:
```py ```py
# add a global spatial average pooling layer # add a global spatial average pooling layer
......
# 从头开始训练 RNN # 九、从头开始训练 RNN
**递归神经网络****RNN**)是为建模顺序数据而构建的一组神经网络。 在最后几章中,我们研究了使用卷积层从图像中学习特征。 当我们想从所有相关的值中学习特征时,递归层同样有用: `x[t]``x[t-1]``x[t-2]``x[t-3]` **递归神经网络****RNN**)是为建模顺序数据而构建的一组神经网络。 在最后几章中,我们研究了使用卷积层从图像中学习特征。 当我们想从所有相关的值中学习特征时,递归层同样有用: `x[t]``x[t-1]``x[t-2]``x[t-3]`
......
# 从头开始使用词嵌入训练 LSTM # 十、使用词嵌入从头开始训练 LSTM
到目前为止,我们已经看到了深度学习在结构化数据,图像数据甚至时间序列数据中的应用示例。 似乎唯一正确的方法是继续进行**自然语言处理****NLP**)作为下一步。 机器学习和人类语言之间的联系非常有趣。 深度学习已像计算机视觉一样,以指数方式加快了该领域的发展速度。 让我们从 NLP 的简要概述开始,并在本章中将要完成的一些任务开始。 到目前为止,我们已经看到了深度学习在结构化数据,图像数据甚至时间序列数据中的应用示例。 似乎唯一正确的方法是继续进行**自然语言处理****NLP**)作为下一步。 机器学习和人类语言之间的联系非常有趣。 深度学习已像计算机视觉一样,以指数方式加快了该领域的发展速度。 让我们从 NLP 的简要概述开始,并在本章中将要完成的一些任务开始。
...@@ -342,7 +342,7 @@ lstm1 = LSTM(10, activation='tanh', return_sequences=False, ...@@ -342,7 +342,7 @@ lstm1 = LSTM(10, activation='tanh', return_sequences=False,
# 输出层 # 输出层
在此示例中,我们预测了二进制目标。 和以前一样,我们可以使用具有单个乙状神经元的密集层来完成此二进制分类任务: 在此示例中,我们预测了二进制目标。 和以前一样,我们可以使用具有单个乙状神经元的密集层来完成此二分类任务:
```py ```py
output = Dense(1, activation='sigmoid', name='sigmoid')(lstm1) output = Dense(1, activation='sigmoid', name='sigmoid')(lstm1)
...@@ -366,7 +366,7 @@ def build_network(vocab_size, embedding_dim, sequence_length): ...@@ -366,7 +366,7 @@ def build_network(vocab_size, embedding_dim, sequence_length):
return model return model
``` ```
与其他二进制分类任务一样,我们可以使用二进制交叉熵。 请注意,因为我们正在将 LSTM 层连接到密集层,所以我们需要将`return_sequences`设置为`False`,正如我们在第 9 章,“从头训练”中讨论的那样。 与其他二分类任务一样,我们可以使用二进制交叉熵。 请注意,因为我们正在将 LSTM 层连接到密集层,所以我们需要将`return_sequences`设置为`False`,正如我们在第 9 章,“从头训练”中讨论的那样。
为了使这部分代码可重用,我们使词汇量,嵌入维数和序列长度可配置。 如果要搜索超参数,则还可能希望参数化`dropout``recurrent_dropout`和 LSTM 神经元的数量。 为了使这部分代码可重用,我们使词汇量,嵌入维数和序列长度可配置。 如果要搜索超参数,则还可能希望参数化`dropout``recurrent_dropout`和 LSTM 神经元的数量。
...@@ -482,7 +482,7 @@ def tokenize_text(data): ...@@ -482,7 +482,7 @@ def tokenize_text(data):
return data return data
``` ```
在这里,我们获取该文本列表,并使用`keras.preprocessing.text.Tokenizer`将其标记化。 之后,我们将它们填充为相等的长度。 最后,我们将数字标签转换为`one_hot`格式,就像 Keras 在其他多分类问题中一样。 在这里,我们获取该文本列表,并使用`keras.preprocessing.text.Tokenizer`将其标记化。 之后,我们将它们填充为相等的长度。 最后,我们将数字标签转换为`one_hot`格式,就像 Keras 在其他多分类问题中一样。
我们几乎完成了数据处理。 但是,最后,我们需要获取文本和标签,然后将数据随机分成训练,验证和测试集,如以下代码所示。 我没有太多数据需要处理,因此我将在此处选择`test``val`。 如果样本太小,可能无法很好地理解实际模型的性能,因此在执行此操作时要格外小心: 我们几乎完成了数据处理。 但是,最后,我们需要获取文本和标签,然后将数据随机分成训练,验证和测试集,如以下代码所示。 我没有太多数据需要处理,因此我将在此处选择`test``val`。 如果样本太小,可能无法很好地理解实际模型的性能,因此在执行此操作时要格外小心:
...@@ -605,7 +605,7 @@ x = GlobalMaxPooling1D()(x) ...@@ -605,7 +605,7 @@ x = GlobalMaxPooling1D()(x)
# 输出层 # 输出层
此示例中的输出层看起来像其他任何多分类。 我在输出层之前也包括了一个密集层,如以下代码所示: 此示例中的输出层看起来像其他任何多分类。 我在输出层之前也包括了一个密集层,如以下代码所示:
```py ```py
x = Dense(128, activation='relu')(x) x = Dense(128, activation='relu')(x)
......
# 训练 Seq2Seq 模型 # 十一、训练 Seq2Seq 模型
在上一章中,我们讨论了文档分类以及文档分类的一种特殊情况,称为**情感分类**。 这样做时,我们不得不谈论很多关于矢量化的知识。 在上一章中,我们讨论了文档分类以及文档分类的一种特殊情况,称为**情感分类**。 这样做时,我们不得不谈论很多关于矢量化的知识。
......
# 使用深度强化学习 # 十二、深度强化学习
在本章中,我们将以略有不同的方式使用深度神经网络。 我们将要构建一个智能代理,而不是预测一个类的成员,估算一个值,甚至生成一个序列。 尽管机器学习和人工智能这两个术语经常互换使用,但在本章中,我们将讨论人工智能作为一种可以感知其环境的智能代理,并采取步骤在该环境中实现某些目标。 在本章中,我们将以略有不同的方式使用深度神经网络。 我们将要构建一个智能代理,而不是预测一个类的成员,估算一个值,甚至生成一个序列。 尽管机器学习和人工智能这两个术语经常互换使用,但在本章中,我们将讨论人工智能作为一种可以感知其环境的智能代理,并采取步骤在该环境中实现某些目标。
......
# 生成对抗网络 # 十三、生成对抗网络
尽管我在本书中花了很多时间谈论分类或估计的网络,但在本章中,我将向您展示一些具有创建能力的深度神经网络。 **生成对抗网络****GAN**)通过两个内部深层网络之间的内部竞争来学习如何做到这一点,我们将在下面讨论。 在**深度卷积生成对抗网络****DCGAN**)的情况下,这是我将在本章中重点介绍的 GAN 类型,该网络将学习创建类似于训练数据集的图像。 尽管我在本书中花了很多时间谈论分类或估计的网络,但在本章中,我将向您展示一些具有创建能力的深度神经网络。 **生成对抗网络****GAN**)通过两个内部深层网络之间的内部竞争来学习如何做到这一点,我们将在下面讨论。 在**深度卷积生成对抗网络****DCGAN**)的情况下,这是我将在本章中重点介绍的 GAN 类型,该网络将学习创建类似于训练数据集的图像。
...@@ -61,7 +61,7 @@ GAN 的整体体系结构如下图所示。 生成器和判别器分别是单独 ...@@ -61,7 +61,7 @@ GAN 的整体体系结构如下图所示。 生成器和判别器分别是单独
# 鉴别器架构 # 鉴别器架构
鉴别器的体系结构更像我们在前几章中已经看到的。 它实际上只是一个典型的图像分类器,如下图所示。 输出是 S 型的,因为鉴别器将预测输入图像是真实图像集的成员的概率。 鉴别器正在解决二进制分类问题: 鉴别器的体系结构更像我们在前几章中已经看到的。 它实际上只是一个典型的图像分类器,如下图所示。 输出是 S 型的,因为鉴别器将预测输入图像是真实图像集的成员的概率。 鉴别器正在解决二分类问题:
![](img/68c3560e-2207-409d-94b3-aebcb4b7d247.png) ![](img/68c3560e-2207-409d-94b3-aebcb4b7d247.png)
......
# 深度学习快速参考
> 原文:[Deep Learning Quick Reference](https://b-ok.global/book/3628993/b5374b)
>
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
>
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
>
> 不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则 2.3.c
* [在线阅读](https://dl.apachecn.org)
* [ApacheCN 面试求职交流群 724187166](https://jq.qq.com/?_wv=1027&k=54ujcL3)
* [ApacheCN 学习资源](http://www.apachecn.org/)
## 贡献指南
本项目需要校对,欢迎大家提交 Pull Request。
> 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错——在大部分情况下,我们的服务器已经记录所有的翻译,因此您不必担心会因为您的失误遭到无法挽回的破坏。(改编自维基百科)
## 联系方式
### 负责人
* [飞龙](https://github.com/wizardforcel): 562826179
### 其他
* 在我们的 [apachecn/apachecn-tf-zh](https://github.com/apachecn/apachecn-tf-zh) github 上提 issue.
* 发邮件到 Email: `apachecn@163.com`.
* 在我们的 [组织学习交流群](http://www.apachecn.org/organization/348.html) 中联系群主/管理员即可.
## 赞助我们
![](http://data.apachecn.org/img/about/donate.jpg)
+ [深度学习快速参考](README.md)
+ [零、前言](00.md)
+ [一、深度学习的基础](01.md)
+ [二、使用深度学习解决回归问题](02.md)
+ [三、使用 TensorBoard 监控网络训练](03.md)
+ [四、使用深度学习解决二分类问题](04.md)
+ [五、使用 Keras 解决多分类问题](05.md)
+ [六、超参数优化](06.md)
+ [七、从头开始训练 CNN](07.md)
+ [八、将预训练的 CNN 用于迁移学习](08.md)
+ [九、从头开始训练 RNN](09.md)
+ [十、使用词嵌入从头开始训练 LSTM](10.md)
+ [十一、训练 Seq2Seq 模型](11.md)
+ [十二、深度强化学习](12.md)
+ [十三、生成对抗网络](13.md)
...@@ -148,4 +148,19 @@ ...@@ -148,4 +148,19 @@
+ [七、图像字幕](docs/dl-cv/07.md) + [七、图像字幕](docs/dl-cv/07.md)
+ [八、生成模型](docs/dl-cv/08.md) + [八、生成模型](docs/dl-cv/08.md)
+ [九、视频分类](docs/dl-cv/09.md) + [九、视频分类](docs/dl-cv/09.md)
+ [十、部署](docs/dl-cv/10.md) + [十、部署](docs/dl-cv/10.md)
\ No newline at end of file + [深度学习快速参考](docs/dl-quick-ref/README.md)
+ [零、前言](docs/dl-quick-ref/00.md)
+ [一、深度学习的基础](docs/dl-quick-ref/01.md)
+ [二、使用深度学习解决回归问题](docs/dl-quick-ref/02.md)
+ [三、使用 TensorBoard 监控网络训练](docs/dl-quick-ref/03.md)
+ [四、使用深度学习解决二分类问题](docs/dl-quick-ref/04.md)
+ [五、使用 Keras 解决多分类问题](docs/dl-quick-ref/05.md)
+ [六、超参数优化](docs/dl-quick-ref/06.md)
+ [七、从头开始训练 CNN](docs/dl-quick-ref/07.md)
+ [八、将预训练的 CNN 用于迁移学习](docs/dl-quick-ref/08.md)
+ [九、从头开始训练 RNN](docs/dl-quick-ref/09.md)
+ [十、使用词嵌入从头开始训练 LSTM](docs/dl-quick-ref/10.md)
+ [十一、训练 Seq2Seq 模型](docs/dl-quick-ref/11.md)
+ [十二、深度强化学习](docs/dl-quick-ref/12.md)
+ [十三、生成对抗网络](docs/dl-quick-ref/13.md)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册