在Keras内建函数中使用哪种嵌入算法?Word2vec?手套?另一个?
发布于 2018-07-29 12:40:52
简单地说,和都不是。本质上,嵌入层(如Word2Vec of GloVe )只是一个小的神经网络模块(通常是完全连接的层),它将更高的稀疏维数投射到一个较低的n维向量中。
当您在Keras中插入一个新的随机嵌入层到您的神经网络中时,Keras将构造一个形状[input_dim, output_dim]的密集可学习矩阵。
具体来说,假设您要插入一个嵌入层,将整数标量月份信息(12个唯一值)编码到大小为3的浮点向量中。
import numpy as np
import keras
from keras.models import Sequential, Model
from keras.layers import Embedding, Input
x = Input(shape=(1000,)) # suppose seq_len=1000
embedding = Embedding(12+1, 3, input_length=1000)(x)
model = Model(inputs=x, outputs= embedding) # Functional API
model.summary()您的嵌入层将有如下摘要:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 1000) 0
_________________________________________________________________
embedding_1 (Embedding) (None, 1000, 3) 39
=================================================================
Total params: 39
Trainable params: 39
Non-trainable params: 0
_________________________________________________________________注意,可学习的参数是39 = 13*3 ( Keras需要+1来编码不属于12个唯一月份中任何一个的值--以防万一)。
还请注意,虽然嵌入的输入形状是形状(None, 1000),嵌入的输出是形状(None, 1000, 3)。这意味着[13, 3]大小的非常小的稠密权重矩阵被应用于,每个的输入时间步骤为1000个。这意味着,每个月0-11的整数输入都将转换为大小为(3,)的浮点向量。
这也意味着,当您从最后一层反向传播到嵌入层时,1000个时间步骤嵌入输出中每一个的梯度也将(以time_distributed方式)流到尺寸为[13,3]的小神经网络权重(本质上是嵌入层)。
此外,请参阅嵌入层的官方Keras文档:https://keras.io/layers/embeddings/。
发布于 2018-07-29 11:37:25
以上都不是。默认情况下,它是随机初始化的embeddings_initializer='uniform'。
有一个关于如何使用现有嵌入的教程。
https://stackoverflow.com/questions/51579761
复制相似问题