# 零、前言

《深度学习快速参考》演示了使用深度学习的快速实用方法。 它着重于现实生活中的问题，并且仅提供了足够的理论和数学知识来加深读者对该主题的理解。 深度学习是机器学习中令人兴奋的快速节奏分支，但它也是一个可以涉足的领域。 在这个领域，每天都会进行大量的详细而复杂的研究，而这可能会令人不知所措。 在本书中，我着重向您传授将深度学习应用于各种实际问题的技能。 我对这本书的最大希望是，它将为您提供使用深度学习技术解决机器学习问题所需的工具。

# 这本书是给谁的

我是一名实践中的数据科学家，我在写这本书时牢记其他实践中的数据科学家和机器学习工程师。 如果您是应用深度学习的软件工程师，那么这本书也很适合您。

如果您是一名深度学习研究人员，那么这本书并不适合您。 但是，您仍然应该拿起副本，以便批评这本书缺乏证明和数学上的严格性。

如果您是一名学者或教育家，那么这本书绝对适合您。 在过去的 3 年中，我在伊利诺伊大学斯普林菲尔德分校教授了数据科学的调查数据（去草原之星！），这样做，我有机会启发了许多未来的机器学习人员。 这种经历启发了我创作这本书。 我认为这样的书是帮助学生提高对一个非常复杂的主题的兴趣的好方法。

# 本书涵盖的内容

第 1 章“深度学习的基础知识”，回顾了有关神经网络操作的一些基础知识，涉及了优化算法，讨论了模型验证，并讨论了建立开发环境的内容。 适用于构建深度神经网络。

第 2 章“使用深度学习解决回归问题”，您可以构建非常简单的神经网络来解决回归问题，并研究更深更复杂的模型对这些问题的影响。

第 3 章“使用 TensorBoard 监视网络训练”让您立即开始使用 TensorBoard，这是监视和调试未来模型的绝佳应用。

第 4 章“使用深度学习解决二分类问题”帮助您使用深度学习解决二分类问题。

第 5 章“使用 Keras 解决多分类问题”，带您进行多分类并探讨它们之间的区别。 它还讨论了管理过拟合和最安全的选择。

第 6 章“超参数优化”显示了两种独立的模型调整方法，一种是众所周知的且经过实战测试的方法，而另一种是最新方法。

第 7 章“从头开始训练 CNN”教您如何使用卷积网络对图像进行分类。

第 8 章“使用预训练的 CNN 的迁移学习”描述了如何应用迁移学习来从图像分类器中获得惊人的表现，即使数据很少。

第 9 章“从头开始训练 RNN”，讨论 RNN 和 LSTMS，以及如何将其用于时间序列预测问题。

第 10 章“从头开始用词嵌入训练 LSTM”继续我们关于 LSTM 的讨论，这次讨论的是自然语言分类任务。

第 11 章“训练 Seq2Seq 模型”帮助我们使用序列对模型进行序列化以进行机器翻译。

第 12 章“使用深度强化学习”引入了深度强化学习，并构建了可以为自治智能体提供动力的深度 Q 网络。

第 13 章“生成对抗网络”解释了如何使用生成对抗网络生成令人信服的图像。

# 充分利用这本书

1.  我假设您已经对更传统的数据科学和预测建模技术（例如线性/逻辑回归和随机森林）有丰富的经验。 如果这是您第一次学习机器学习，那么对您来说可能有点困难。
2.  我还假定您至少具有使用 Python 进行编程的经验，或者至少具有其他编程语言（如 Java 或 C++）。
3.  深度学习是计算密集型的，我们在这里构建的某些模型需要 NVIDIA GPU 在合理的时间内运行。 如果您没有快速的 GPU，则可能希望在 Amazon Web Services 或 Google Cloud Platform 上使用基于 GPU 的云实例。

# 使用约定

本书中使用了许多文本约定。

`CodeInText`：指示文本，数据库表名称，文件夹名称，文件名，文件扩展名，路径名，虚拟 URL，用户输入和 Twitter 句柄中的代码字。 这是一个示例：“这正是`ModelCheckpoint`回调为我们所做的。”

代码块设置如下：

```py
def binary_accuracy(y_true, y_pred):
    return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)
```

当我们希望引起您对代码块特定部分的注意时，相关的行或项目以粗体显示：

```py
def build_network(input_features=None):
    inputs = Input(shape=(input_features,), name="input")
    x = Dense(32, activation='relu', name="hidden1")(inputs)
 x = Dense(32, activation='relu', name="hidden2")(x)
 x = Dense(32, activation='relu', name="hidden3")(x)
 x = Dense(32, activation='relu', name="hidden4")(x)
 x = Dense(16, activation='relu', name="hidden5")(x)
    prediction = Dense(1, activation='linear', name="final")(x)
    model = Model(inputs=inputs, outputs=prediction)
    model.compile(optimizer='adam', loss='mean_absolute_error')
    return model
```

任何命令行输入或输出的编写方式如下：

```py
model-weights.00-0.971304.hdf5
model-weights.02-0.977391.hdf5
model-weights.05-0.985217.hdf5
```

**粗体**：表示新术语，重要单词或您在屏幕上看到的单词。 例如，菜单或对话框中的单词会出现在这样的文本中。 这是一个示例：“从管理面板中选择系统信息。”

警告或重要提示如下所示。

提示和技巧如下所示。
