专栏首页AI研习社基于 Tensorflow eager 的文本生成,注意力,图像注释的完整代码

基于 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),作者:雷锋字幕组

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 手把手教你搭建能够实现 Prisma 风格迁移效果的 iOS 酷炫应用(附代码)

    随着 2012 年深度神经网络在 ImageNetchallenge 比赛上以 AlexNet 模型获胜,深度神经网络开创了空前的高潮。AI 工程师已经将深度学...

    AI研习社
  • 黑客视角:避免神经网络训练失败,需要注意什么?

    确保网络正常运行的关键因素之一是网络的配置。正如机器学习大师 Jason Brownle 所说,「深度学习神经网络已经变得易于定义和拟合,但仍然难以配置。」

    AI研习社
  • 2017 知乎看山杯从入门到第二

    利用一个暑假的时间,做了研究生生涯中的第一个正式比赛,最终排名第二,有些小遗憾,但收获更多的是成长和经验。我们之前没有参加过机器学习和文本相关的比赛,只是学过一...

    AI研习社
  • 【算法比赛】NFL Big Data Bowl 数据挖掘比赛回顾

    NFL Big Data Bowl是Kaggle上的一个数据比赛,本文旨在通过回顾比赛,梳理和学习其中的建模思路(点数据挖掘、图挖掘)、数据处理技巧(对抗验证、...

    腾讯智能钛AI开发者
  • Tensorflow入门教程(三十八)——V2-Net

    今天将分享Unet的改进模型U2-Net,改进模型来自2020年的论文《U2-Net: Going Deeper with Nested U-Structure...

    用户7498388
  • Jenkins 中文语言包

    部分 Jenkins 中文用户可能已经发现,在最近升级 Jenkins 版本,或下载较新的 Jenkins 后,界面上很多部分显示的是英文。对此,我简单介绍一下...

    LinuxSuRen
  • 这个AI给照片穿上“隐身衣”,让面部识别系统认不出你!

    应该没有人不认识英国女王伊丽莎白二世吧?但如果文摘菌说,其实这不是“一个人”,你能看出左右两张照片有什么不同吗?

    大数据文摘
  • 在深度学习TensorFlow 框架上使用 LSTM 进行情感分析

    在这篇教程中,我们将介绍如何将深度学习技术应用到情感分析中。该任务可以被认为是从一个句子,一段话,或者是从一个文档中,将作者的情感分为积极的,消极的或者中性的。...

    机器学习AI算法工程
  • 亿级数据DB秒级平滑扩容

    数据库上层都有一个微服务,服务层记录“业务库”与“数据库实例配置”的映射关系,通过数据库连接池向数据库路由sql语句。

    java架构师
  • Python--计算、开方、乘方函数

    py3study

扫码关注云+社区

领取腾讯云代金券