基于 Tensorflow eager 的文本生成,注意力,图像注释的完整代码

本文为 AI 研习社编译的技术博客,原标题 Complete code examples for Machine Translation with Attention, Image Captioning, Text Generation, and DCGAN implemented with tf.keras and eager execution,作者为 Yash Katariyae(开发者项目工程师实习生)。 翻译 | 老赵 整理 | 凡江

我总是发现生成和序列模型令人着迷:他们提出的问题与我们刚开始学习机器学习时常遇到的问题不同。当我第一次开始学习ML时,我学了分类和回归(和大多数人一样)。这些帮助我们提出并回答以下问题:

  • 这是猫还是狗的照片? (分类)
  • 明天会下雨的几率是多少? (回归)

掌握分类和回归是非常有用的技能,并且这些领域的应用对现实问题几乎没有限制。但是,我们可能会问其他不同类型的问题。

  • 我们能生成一首诗吗? (文字生成)
  • 我们可以生成一张猫的照片吗? (GANs)
  • 我们可以将句子从一种语言翻译成另一种语言吗? (NMT)
  • 我们可以描述图像内容吗? (图像注释)

在暑期实习期间,我使用TensorFlow的两个最新API开发了这些示例:tf.keras,以及eager function,我在下面分享了它们。我希望你发现它们有用,有趣。

eager function是一个逐步运行的界面,其中操作在从Python调用时即刻执行。这使得TensorFlow上手容易,并且可以是研究和开发更加直观。

tf.keras是一个定义模型的高级API,就像积木建造的乐高一样。我使用模型子类化实现了这些示例,它允许通过子类化tf.keras.Model并定义自己的前向传递来制作完全可自定义的模型。 当启用eager function时,模型子类化特别有用,因为可以强制写入前向传递。

如果你对这些APIs不了解,你可以通过探索tensorflow.org/tutorials(http://tensorflow.org/tutorials)上的序列来了解更多信息,其中包含最近更新的示例。

以下每个示例都是端到端的,并遵循类似的模式:

  1. 自动下载训练数据集。
  2. 预处理训练数据,并创建tf.data数据集以在输入管道中使用。
  3. 使用tf.keras模型子类API定义模型。
  4. 使用eager function训练模型。
  5. 演示如何使用训练模型。

示例 1:文本生成

我们的第一个例子(https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/text_generation.ipynb)是文本生成,我们使用RNN生成与莎士比亚类似的文本。您可以使用上面的链接在Colaboratory上运行它(或者您也可以从GitHub下载它作为Jupyter笔记本)。代码在笔记本中详细解释。

基于莎士比亚的大量作品,这个例子学会了生成听起来和风格相似的文字:

在训练莎士比亚写作集合的30个时期的后,笔记本生成了示例文本。 虽然大多数句子没有意义(当然,这个简单的模型还没有学会语言的意义),令人印象深刻的是大多数单词是有效的,并且它生成出的戏剧的结构看起来类似于来自原文的那些。 (这是一个基于角色的模型,在训练的短时间内 - 它已经成功地从头开始学习这两件事)。如果您愿意,可以通过更改单行代码来更改数据集。 了解更多关于RNN的最好方法是Andrej Karpathy的文章,即The Unreasonable Effectiveness of Recurrent Neural Networks。如果您想了解更多关于使用Keras或tf.keras实现RNN的信息,我们推荐由Francois Chollet提供的笔记。

示例 2:DCGAN

在这个例子(https://colab.research.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/dcgan.ipynb)中,我们使用DCGAN生成手写数字。生成式对抗网络(GAN)由生成器和鉴别器组成。生成器的工作是创建令人信服的图像以欺骗鉴别器。鉴别器的工作是在真实图像和伪图像(由生成器创建)之间进行分类。下面看到的输出是在使用 Unsupervised Representing Learning with Deep Convolutional Generative Adversarial Networks。

这篇文章所述的体系结构和超参数训练150个历元的生成器和鉴别器之后生成的。

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

这个例子(https://colab.sandbox.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/nmt_with_attention/nmt_with_attention.ipynb)训练模型将西班牙语句子翻译成英语句子。训练模型后,您将能够输入西班牙语句子,例如“¿todavia estan en casa?”,并返回英文翻译:“你还在家吗?”

您在下面看到的图像是注意力图。它显示了输入句子的哪些部分在翻译时具有模型的注意力。例如,当模型翻译“cold”这个词时,它看着“mucho”,“frio”,“aqui”。我们使用tf.keras和eager function从头开始实现Neural Machine Translation by Jointly Learning to Align and Translate这篇文章中的例子,详细解释在笔记中。您还可以将此实现用作完成自己的自定义模型的基础。

示例 4:注意图像标题

在此示例(https://colab.sandbox.google.com/github/tensorflow/tensorflow/blob/master/tensorflow/contrib/eager/python/examples/generative_examples/image_captioning_with_attention.ipynb)中,我们训练模型以预测图像的注释。 我们还生成了一个注意力图,它显示了模型在生成标题时所关注的图像部分。 例如,当模型预测单词“surfboard”时,模型会聚焦在图像中的冲浪板附近。 使用MS-COCO数据集的子集训练该模型,该数据集可自动下载。

下一步

要了解有关tf.keras和eager的更多信息,请密切关注tensorflow.org/tutorials(http://tensorflow.org/tutorials)以获取更新内容,并定期查看此博客和TensorFlow的推特供稿。 谢谢阅读!

致谢

非常感谢Josh Gordon,Mark Daoust,Alexandre Passos,Asim Shankar,Billy Lamberta,Daniel'Wolff'Dobson和Francois Chollet的贡献和帮助!

原文链接:

https://medium.com/tensorflow/complete-code-examples-for-machine-translation-with-attention-image-captioning-text-generation-51663d07a63d

原文发布于微信公众号 - AI研习社(okweiwu)

原文发表时间:2018-08-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技评论

开发 | 模型表现不好怎么办?37条妙计助你扭转局势

AI 科技评论按:读论文,看别人的模型的时候仿佛一切都顺利成章,可是等到自己训练模型的时候,麻烦一个接一个…… AI 科技评论找到了一篇国外大神 Slav Iv...

35260
来自专栏AI科技评论

内部分享:这篇文章教你如何用神经网络破Flappy Bird记录

AI科技评论按:本文作者杨浩,原文载于作者个人博客。 以下内容来源于一次部门内部的分享,主要针对 AI 初学者,介绍包括 CNN、Deep Q Network...

39770
来自专栏企鹅号快讯

从零开始,教初学者如何征战全球最大机器学习竞赛社区Kaggle竞赛

在学习过深度学习的基础知识之后,参与实践是继续提高自己的最好途径。本文将带你进入全球最大机器学习竞赛社区 Kaggle,教你如何选择自己适合的项目,构建自己的模...

200100
来自专栏大数据文摘

资源 | 给卷积神经网络“修理工”的一份“说明书”

这篇文章的主要内容来自作者的自身经验和一些在线资源(如最出名的斯坦福大学的CS231n课程讲义),是关于如何调试卷积神经网络从而提升其性能的。

11010
来自专栏Python中文社区

ALI的Tensorflow炼成与GAN科普

專 欄 ❈那只猫,Python中文社区专栏作者,Python中文社区新Logo设计人,纯种非CS科班数据分析人,沉迷Keras。在Cambridge做了点小事...

233100
来自专栏机器之心

学界 | 谷歌大脑提出通过多文档摘要方法生成维基百科,可处理较长序列

33170
来自专栏云时之间

什么是LSTM

哈喽,大家好,上一次我们了解了什么是卷积神经网络RNN,然后我又加上了我翻译的那一篇文章来简述了一下RNN和LSTM,今天,让我们来详细的了解下什么是LSTM。...

34560
来自专栏机器之心

谷歌终于开源BERT代码:3 亿参数量,机器之心全面解读

今日,谷歌终于放出官方代码和预训练模型,包括 BERT 模型的 TensorFlow 实现、BERT-Base 和 BERT-Large 预训练模型和论文中重要...

19920
来自专栏AI研习社

决策树:一种像人脑一样工作的算法

决策树是用于机器学习最流行的算法之一,尤其对于分类和回归问题。我们每次做决策时大脑都像决策树一样工作。

14530
来自专栏深度学习自然语言处理

【干货】基于pytorch的CNN、LSTM神经网络模型调参小结

Demo 这是最近两个月来的一个小总结,实现的demo已经上传github,里面包含了CNN、LSTM、BiLSTM、GRU以及CNN与LSTM、BiLSTM...

1.1K70

扫码关注云+社区

领取腾讯云代金券