深度学习 基础

深度学习 网络层

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/deep_learning-layer-embedding.html

深度学习 嵌入层(Embedding Layer)详解


Embedding 的概念来自于 word embeddings,具体是 2013 年 Google 开源的一款用于词向量计算的工具 —— word2vec。嵌入层(Embedding)通俗地讲,它是将正整数(下标)转换为具有固定大小的向量

使用原因

我们为什么要使用嵌入层呢?其主要有如下两大原因:

  1. 使用 one-hot 方法编码的向量会很高维,也很稀疏。假设我们在做自然语言处理(NLP)中遇到了一个包含 10000 个词的字典,当时用 one-hot 编码时,每一个词会被一个包含 10000 个整数的向量来表示,其中9999 个数字是 0,要是字典再大一点的话,这种方法的计算效率会大打折扣。embedding 生成低维稠密的向量。
  2. 训练神经网络的过程中,每个嵌入的向量都会得到更新。在多维空间中词与词之间有多少相似性,这使我们能建立词语之间的关系,不仅仅是词语,任何能通过嵌入层 Embedding 转换成向量的内容都可以这样做。

tensorflow keras Embedding

tensorflow 的 keras 提供了封装的 Embedding 对象,构造函数如下:

import tensorflow as tf

tf.keras.layers.Embedding(
               input_dim,
               output_dim,
               embeddings_initializer='uniform',
               embeddings_regularizer=None,
               activity_regularizer=None,
               embeddings_constraint=None,
               mask_zero=False,
               input_length=None,
               **kwargs):

需要注意的是,Embedding 层只能作为模型的第一层

参数

  • input_dim:大于或等于 0 的整数,也就是字典长度,即输入数据最大下标+1。
  • output_dim:大于 0 的整数,代表全连接嵌入的维度。
  • embeddings_initializer:嵌入矩阵的初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。
  • embeddings_regularizer:嵌入矩阵的正则项,为 Regularizer 对象。
  • activity_regularizer:对该层的输出进行正则化。
  • embeddings_constraint:嵌入矩阵的约束项,为 Constraints 对象。
  • mask_zero:布尔值,确定是否将输入中的‘0’看作是应该被忽略的‘填充’(padding)值,该参数在使用递归层处理变长输入时有用。设置为 True 的话,模型中后续的层必须都支持 masking,否则会抛出异常。如果该值为 True,则下标 0 在字典中不可用,input_dim 应设置为 |vocabulary| + 1
  • input_length:当输入序列的长度固定时,该值为其长度。如果要在该层后接 Flatten 层,然后接 Dense 层,则必须指定该参数,否则,Dense 层的输出维度无法自动推断。
基础定义卷积层由一个或多个卷积核组成,每个卷积核实质上就是一个小的滤波器,其尺寸一般较小,如3x3或5x5。关键参数卷积层的一些关键参数:卷 ...
深度学习中连续特征值的 Embedding 方式主要有 field embedding 和离散分桶后 embedding 两种,AutoDi ...
深度学习(deep learning)是机器学习的分支,它是一种以人工神经网络为架构,对数据进行表征学习的算法。现在已有数种深度学习框架,如 ...
深度学习(deep learning)是机器学习的分支,是一种以人工神经网络为架构,对数据进行特征学习(表征学习)的算法。 ...
这可以用于显示来自不同源或外部服务的内容,如嵌入地图、视频播放器、社交媒体小部件等。这样,当模板渲染时,iframe的src属性将设置为我们 ...