Google Article
使用 tf.keras 和 Eager Execution 实现带注意力机制的机器翻译、图像字幕生成、文本生成和 DCGAN 的完整代码示例
2018 年 8 月 7 日
作者:Yash Katariya,开发者计划工程师实习生

我一直觉得生成模型和序列模型很迷人:它们提出的问题与我们在初学机器学习时遇到的问题截然不同。当我刚开始学习机器学习时,我学到了(就像我们大多数人一样)分类和回归。它们帮助我们提出并回答以下问题
  • 这是否是一张猫或狗的图片?(分类
  • 明天下雨的概率是多少?(回归
分类和回归是需要掌握的极其有用的技能,它们几乎可以将这些领域应用于所有有用、真实的现实问题。但是,我们可能还会提出其他类型的问题,这些问题感觉大不相同。在我暑期实习期间,我使用 TensorFlow 的两个最新 API 开发了这些示例:tf.keras 和 Eager Execution,并将它们全部分享在下面。我希望您发现它们有用且有趣!
  • Eager Execution 是一个命令式、即时执行接口,其中操作在从 Python 调用时立即执行。这使得 TensorFlow 更易于上手,并且可以使研究和开发更加直观。
  • tf.keras 是一个用于使用类似乐高积木的构建块定义模型的高级 API。我使用 模型子类化 实现这些示例,它允许通过子类化 tf.keras.Model 并定义自己的前向传递来创建完全可定制的模型。当启用 Eager Execution 时,模型子类化特别有用,因为可以命令式地编写前向传递。
如果您不熟悉这些 API,您可以通过浏览 tensorflow.org/tutorials 上的笔记本序列来了解更多关于这些 API 的信息,其中包含最近更新的示例。

以下每个示例都是端到端的,遵循类似的模式
  1. 自动下载训练数据。
  2. 预处理训练数据,并创建一个 tf.data 数据集,供输入管道使用。
  3. 使用 tf.keras 模型子类化 API 定义模型。
  4. 使用 Eager Execution 训练模型。
  5. 演示如何使用训练后的模型。

示例 #1:文本生成

我们的第一个 示例 用于文本生成,我们使用 RNN 以类似莎士比亚的风格生成文本。您可以使用上面的链接在 Colaboratory 上运行它(或者也可以从 GitHub 下载它作为 Jupyter 笔记本)。该代码在笔记本中进行了详细解释。

给定莎士比亚大量作品,此示例学习生成在风格上听起来和看起来类似的文本
在对莎士比亚作品集进行 30 个纪元的训练后,笔记本生成的示例文本。
虽然大多数句子都没有意义(当然,这个简单的模型还没有学习到语言的意义),但令人印象深刻的是,大多数单词都是有效的,并且它发出的戏剧结构看起来与原始文本中的戏剧结构相似。(这是一个基于字符的模型,在短时间内,我们已经训练了它 - 它已成功地从头开始学习了这两件事)。如果您愿意,可以更改代码中的一行代码来更改数据集。

了解有关 RNN 的更多信息的最佳地点是 Andrej Karpathy 的优秀文章,循环神经网络的非凡有效性。如果您想了解有关使用 Keras 或 tf.keras 实现 RNN 的更多信息,我们推荐 Francois Chollet 的这些 笔记本

示例 #2:DCGAN

在此 示例 中,我们使用 DCGAN 生成手写数字。生成对抗网络 (GAN) 由生成器和判别器组成。生成器的任务是创建令人信服的图像,以欺骗判别器。判别器的任务是在真实图像和假图像(由生成器创建)之间进行分类。您在下面看到的输出是在使用本文中描述的架构和超参数对生成器和判别器进行 150 个纪元的训练后生成的。 论文.
在 150 个纪元中每 10 个纪元生成的图像的 GIF。您可以在笔记本中找到创建此类 GIF 的代码。

示例 #3:带注意力机制的神经机器翻译

示例 训练一个模型来将西班牙语句子翻译成英语句子。训练完模型后,您将能够输入一个西班牙语句子,例如“¿todavia estan en casa?”,并返回英语翻译:“are you still at home?”

您在下面看到的图像是注意力图。它显示了模型在翻译时关注输入句子的哪些部分。例如,当模型翻译单词“cold”时,它正在查看“mucho”, “frio”, “aqui”。我们使用 tf.keras 和 Eager Execution 从头开始实现了 Bahdanau 注意力,在笔记本中进行了详细解释。您也可以使用此实现作为实现您自己的自定义模型的基础。
上述翻译的注意力图。

示例 #4:带注意力机制的图像字幕生成

在此 示例 中,我们训练我们的模型来预测图像的字幕。我们还生成注意力图,它显示了模型在生成字幕时关注图像的哪些部分。例如,当模型预测单词“surfboard”时,它会关注图像中冲浪板附近的位置。此模型使用 MS-COCO 数据集的子集进行训练,该数据集将由笔记本自动下载。
图像的预测字幕。
上述图像每个单词的注意力图。

下一步

要了解有关 tf.keras 和 Eager 的更多信息,请关注 tensorflow.org/tutorials 以获取更新的内容,并定期查看此博客和 TensorFlow 的 twitter 订阅源。感谢您的阅读!

鸣谢

非常感谢 Josh Gordon、Mark Daoust、Alexandre Passos、Asim Shankar、Billy Lamberta、Daniel ‘Wolff’ Dobson 和 Francois Chollet 的贡献和帮助!
下一篇文章
Complete code examples for Machine Translation with Attention, Image Captioning, Text Generation, and DCGAN implemented with tf.keras and eager execution

作者:Yash Katariya,开发者计划工程师实习生

我一直觉得生成模型和序列模型很迷人:它们提出的问题与我们在初学机器学习时遇到的问题截然不同。当我刚开始学习机器学习时,我学到了(就像我们大多数人一样)分类和回归。它们帮助我们提出并回答以下问题:
这是否是一张猫的图片……