0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在TensorFlow中训练嵌入

Tensorflowers 来源:lq 2018-12-19 14:25 次阅读

今天的文章介绍了嵌入这一概念,并且举了一个简单的例子来说明如何在 TensorFlow 中训练嵌入,此外还说明了如何使用 TensorBoard Embedding Projector 查看嵌入(真实示例http://projector.tensorflow.org/?hl=zh-CN)。前两部分适合机器学习或 TensorFlow 新手,而 Embedding Projector 指南适合各个层次的用户。

有关这些概念的另一个教程,请参阅《机器学习速成课程》的 “嵌入” 部分(https://developers.google.cn/machine-learning/crash-course/embeddings/video-lecture?hl=zh-CN)。

嵌入是从离散对象(例如字词)到实数向量的映射。例如,英语字词的 300 维嵌入可能包括:

blue: (0.01359, 0.00075997, 0.24608, ..., -0.2524, 1.0048, 0.06259)blues: (0.01396, 0.11887, -0.48963, ..., 0.033483, -0.10007, 0.1158)orange: (-0.24776, -0.12359, 0.20986, ..., 0.079717, 0.23865, -0.014213)oranges: (-0.35609, 0.21854, 0.080944, ..., -0.35413, 0.38511, -0.070976)

这些向量中的各个维度通常没有固有含义,机器学习所利用的是向量的位置和相互之间的距离这些整体模式。

嵌入对于机器学习的输入非常重要。分类器(更笼统地说是神经网络)适用于实数向量。它们训练密集向量时效果最佳,其中所有值都有助于定义对象。不过,机器学习的很多重要输入(例如文本的字词)没有自然的向量表示。嵌入函数是将此类离散输入对象转换为有用连续向量的标准和有效方法。

嵌入作为机器学习的输出也很有价值。由于嵌入将对象映射到向量,因此应用可以将向量空间中的相似性(例如欧几里德距离或向量之间的角度)用作一项强大而灵活的标准来衡量对象相似性。一个常见用途是找到最近的邻点。例如,下面是采用与上述相同的字词嵌入后,每个字词的三个最近邻点和相应角度:

blue: (red, 47.6°), (yellow, 51.9°), (purple, 52.4°)blues: (jazz, 53.3°), (folk, 59.1°), (bluegrass, 60.6°)orange: (yellow, 53.5°), (colored, 58.0°), (bright, 59.9°)oranges: (apples, 45.3°), (lemons, 48.3°), (mangoes, 50.4°)

这样应用就会知道,在某种程度上,苹果和橙子(相距 45.3°)的相似度高于柠檬和橙子(相距 48.3°)。

TensorFlow 中的嵌入

要在 TensorFlow 中创建字词嵌入,我们首先将文本拆分成字词,然后为词汇表中的每个字词分配一个整数。我们假设已经完成了这一步,并且word_ids是这些整数的向量。例如,可以将 “I have a cat.” 这个句子拆分成[“I”, “have”, “a”, “cat”, “.”],那么相应word_ids张量的形状将是[5],并且包含 5 个整数。为了将这些字词 ID 映射到向量,我们需要创建嵌入变量并使用tf.nn.embedding_lookup函数,如下所示:

word_embeddings = tf.get_variable(“word_embeddings”, [vocabulary_size, embedding_size])embedded_word_ids = tf.nn.embedding_lookup(word_embeddings, word_ids)

完成此操作后,示例中张量embedded_word_ids的形状将是[5, embedding_size],并且包含全部 5 个字词的嵌入(密集向量)。在训练结束时,word_embeddings将包含词汇表中所有字词的嵌入。

嵌入可以通过很多网络类型进行训练,并具有各种损失函数和数据集。例如,对于大型句子语料库,可以使用递归神经网络根据上一个字词预测下一个字词,还可以训练两个网络来进行多语言翻译。字词的向量表示教程中介绍了这些方法。

直观显示嵌入

TensorBoard 包括Embedding Projector,这是一款可让您以交互的方式直观显示嵌入的工具。此工具可以读取模型中的嵌入,并以二维或三维方式渲染这些嵌入。

Embedding Projector 具有三个面板:

数据面板:位于左上方,您可以在其中选择运行、嵌入变量和数据列,以对点进行着色和标记

投影面板:位于左下方,您可以在其中选择投影类型

检查工具面板:位于右侧,您可以在其中搜索特定点并查看最近邻点的列表

投影

Embedding Projector 提供三种方法来降低数据集的维度。

t-SNE:一种非线性不确定性算法(T 分布式随机邻点嵌入),它会尝试保留数据中的局部邻点,通常以扭曲全局结构为代价。您可以选择是计算二维还是三维投影。

PCA:一种线性确定性算法(主成分分析),它尝试用尽可能少的维度捕获尽可能多的数据可变性。PCA 会突出数据中的大规模结构,但可能会扭曲本地邻点。Embedding Projector 会计算前 10 个主成分,您可以从中选择两三个进行查看。

自定义:线性投影到您使用数据中的标签指定的水平轴和垂直轴上。例如,您可以通过为 “左” 和 “右” 指定文本格式来定义水平轴。Embedding Projector 会查找标签与 “左” 格式相匹配的所有点,并计算这些点的形心;“右” 格式与此类似。穿过这两个形心的线定义了水平轴。同样地,计算与 “上” 和 “下” 文本格式相匹配的点的形心可定义垂直轴。

要查看其他实用文章,请参阅如何有效使用 t-SNE和直观介绍主成分分析。

探索

您可以使用自然的点击并拖动手势来缩放、旋转和平移,从而进行直观探索。将鼠标悬停在某个点上即可看到该点的所有元数据。您还可以检查最近的邻点子集。点击某个点以后,右窗格中会列出最近的领点,以及到当前点的距离。投影中还会突出显示最近的邻点。

有时,将视图限制为点的子集并仅投影这些点非常有用。要执行此操作,您可以通过多种方式选择点:

点击某个点之后,其最近的邻点也会处于选中状态

搜索之后,与查询匹配的点会处于选中状态

启用选择,点击某个点并拖动可定义选择范围

然后,点击右侧检查工具窗格顶部的 “隔离 nnn 个点” 按钮。下图显示已选择 101 个点,因此用户可以点击 “隔离 101 个点”:

在字词嵌入数据集中选择 “重要” 一词的最近邻点

高级技巧:使用自定义投影进行过滤可能会非常有用。我们在下图中滤出了 “政治” 一词的 100 个最近邻点,并将它们投影到 “最差” - “最优” 向量上作为 x 轴。y 轴是随机的。这样一来,我们可以发现 “想法”、“科学”、“视角”、“新闻” 这些字词位于右侧,而 “危机”、“暴力” 和 “冲突” 这些字词位于左侧。

自定义投影控件。 “政治” 的邻点到 “最优” - “最差” 向量的自定义投影

要分享您的发现,可以使用右下角的书签面板并将当前状态(包括任何投影的计算坐标)保存为小文件。接着可以将 Projector 指向一个包含一个或多个这些文件的集合,从而生成下面的面板。然后,其他用户就可以查看一系列书签。

元数据

如果您使用嵌入,则可能需要向数据点附加标签/图片。您可以通过生成一个元数据文件(其中包含每个点的标签),并在 Embedding Projector 的数据面板中点击 “加载数据” 来完成此操作。

元数据可以是标签,也可以是图片,它们存储在单独的文件中。如果是标签,则格式应该是TSV 文件(制表符显示为红色),其中第一行包含列标题(以粗体显示),而后续行包含元数据值。例如:

Word FrequencyAirplane 345Car 241...

假设元数据文件中的行顺序与嵌入变量中的向量顺序相匹配,但标题除外。那么,元数据文件中的第 (i+1) 行对应于嵌入变量的第 i 行。如果 TSV 元数据文件仅有一列,那么不会有标题行,并且假设每行都是嵌入的标签。我们之所以包含此例外情况,是因为它与常用的“词汇表文件”格式相匹配。

要将图片用作元数据,您必须生成一个sprite 图片,其中包含小缩略图,嵌入中的每个向量都有一个小缩略图。sprite 应该按照行在前的顺序存储缩略图:将第一个数据点放置在左上方,最后一个数据点放在右下方,但是最后一行不必填充,如下所示。

点击 此链接 可查看 Embedding Projector 中的一个有趣缩略图示例(https://tensorflow.google.cn/images/embedding-mnist.mp4?hl=zh-CN)。

迷你版常见问题解答

“嵌入” 是一种操作还是一种事物?都是。人们一直说的是在向量空间中嵌入字词(操作),以及生成字词嵌入(事物)。两者的共同点在于嵌入这一概念,即从离散对象到向量的映射。创建或应用该映射是一种操作,但映射本身是一种事物。

嵌入是高维度还是低维度?视情况而定。例如,与可包含数百万个字词和短语的向量空间相比,一个 300 维的字词和短语向量空间通常被视为低维度(且密集)空间。但从数学角度上来讲,它是高维度空间,显示的很多属性与人类直觉了解的二维和三维空间大相径庭。

嵌入与嵌入层是否相同?不同。嵌入层是神经网络的一部分,而嵌入则是一个更宽泛的概念。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4566

    浏览量

    98657
  • 机器学习
    +关注

    关注

    66

    文章

    8096

    浏览量

    130525
  • tensorflow
    +关注

    关注

    13

    文章

    313

    浏览量

    60241

原文标题:如何在 TensorFlow 中训练嵌入

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    何在Raspberry Pi上安装TensorFlow

     在本教程中,我们将学习如何在 Raspberry Pi 上安装 TensorFlow,并将展示一些在预训练神经网络上进行简单图像分类的示例。
    发表于 09-01 16:35 1720次阅读
    如<b class='flag-5'>何在</b>Raspberry Pi上安装<b class='flag-5'>TensorFlow</b>

    关于 TensorFlow

    新的算法,产品团队则用Tensorflow训练和使用计算模型,并直接提供给在线用户。使用Tensorflow可以让应用型研究者将想法迅速运用到产品,也可以让学术性研究者更直接地彼此
    发表于 03-30 19:57

    使用 TensorFlow, 你必须明白 TensorFlow

    基本使用使用 TensorFlow, 你必须明白 TensorFlow:使用图 (graph) 来表示计算任务.在被称之为 会话 (Session) 的上下文 (context) 执行图
    发表于 03-30 20:03

    TF之NN:Tensorflow之一次函数应用,随机生成100个数,利用Tensorflow训练使其逼近已知一次函数的斜率和截距

    TF之NN:Tensorflow之一次函数应用,随机生成100个数,利用Tensorflow训练使其逼近已知一次函数的斜率和截距
    发表于 12-20 10:35

    【大联大世平Intel®神经计算棒NCS2试用体验】训练模型软件 tensorflow 的艰难安装

    OpenVINO安装完成后,需要提供项目的模型文件,才能进行参数调优和深度学习推理。所以需要进行数据收集,数据标注,进行模型训练训练的模型很多,有Tensorflow、Caffee等,我选用
    发表于 07-15 23:29

    情地使用Tensorflow吧!

    在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由
    发表于 07-22 10:13

    TensorFlow是什么

    更长。TensorFlow 使这一切变得更加简单快捷,从而缩短了想法到部署之间的实现时间。在本教程,你将学习如何利用 TensorFlow 的功能来实现深度神经网络。TensorFlow
    发表于 07-22 10:14

    浅谈深度学习之TensorFlow

    TensorFlow 实现所有这些。数据集DNN 依赖于大量的数据。可以收集或生成数据,也可以使用可用的标准数据集。TensorFlow 支持三种主要的读取数据的方法,可以在不同的数据集中使用;本教程中用来
    发表于 07-28 14:34

    TensorFlow优化器种类及其用法详解

    的 tf.train.exponential_decay 方法来实现这一点。根据 TensorFlow 文档,在训练模型时,通常建议在训练过程中降低学习率。该函数利用指数衰减函数初
    发表于 07-28 14:39

    TensorFlow csv文件读取数据(代码实现)详解

    大多数人了解 Pandas 及其在处理大数据文件方面的实用性。TensorFlow 提供了读取这种文件的方法。前面章节,介绍了如何在 TensorFlow
    发表于 07-28 14:40

    TensorFlow实现简单线性回归

    本小节直接从 TensorFlow contrib 数据集加载数据。使用随机梯度下降优化器优化单个训练样本的系数。实现简单线性回归的具体做法导入需要的所有软件包: 在神经网络,所有的输入都线性增加
    发表于 08-11 19:34

    何在WINDOWS系统下使用tensorflow来下围棋呢

    1、如何在WINDOWS系统下安装tensorflow并使用tensorflow来下围棋呢 tensorflow0.12版本支持windows,需要python3.5.x。(1)下载并
    发表于 06-02 16:17

    如何使用TensorFlow将神经网络模型部署到移动或嵌入式设备上

    有很多方法可以将经过训练的神经网络模型部署到移动或嵌入式设备上。不同的框架在各种平台上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如Android
    发表于 08-02 06:43

    TensorFlow Lite是TensorFlow针对移动和嵌入式设备的轻量级解决方案

    。在本文中,您将了解如何在 Android 上运行 MobileNet 模型。该应用程序将查看相机信息并使用经过训练的 MobileNet 对图像进行分类。
    的头像 发表于 07-31 15:37 2.6w次阅读
    <b class='flag-5'>TensorFlow</b> Lite是<b class='flag-5'>TensorFlow</b>针对移动和<b class='flag-5'>嵌入</b>式设备的轻量级解决方案

    基于tensorflow.js设计、训练面向web的神经网络模型的经验

    你也许会好奇:为什么要在浏览器里基于tensorflow.js训练我的模型,而不是直接在自己的机器上基于tensorflow训练模型?你当然可以在自己的机器上
    的头像 发表于 10-18 09:43 3863次阅读