嵌入 Keras

Embedding in Keras

Keras内置函数的embedding用的是什么算法? 词向量?手套?其他?

https://keras.io/layers/embeddings/

None 以上。它默认随机初始化 embeddings_initializer='uniform'.

有一个关于如何使用现有嵌入的tutorial

简短的回答是都不是GloVeWord2Vec 等嵌入层本质上只是一个小的神经网络模块(通常是全连接层),投影更高,更稀疏维度转换为较低的 n 维向量。

当您在 Keras 中插入一个 fresh 随机嵌入层到您的神经网络中时,Keras 将构建一个形状为 [input_dim, output_dim].

的密集可学习矩阵

具体来说,假设您要插入嵌入层以将 整数标量 月份信息(12 个唯一值)编码为 浮点向量 大小为 3。在 Keras 中,您将按如下方式声明嵌入:

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 个输入时间步长的 each。这意味着,每个月 0-11 的整数输入将被转换为大小为 (3,).

的浮点向量

这也意味着当你从最后一层反向传播到嵌入层时,1000个时间步嵌入输出的每个的梯度也会流动(在一个time_distributed 方式)到大小为 [13,3] 的小型神经网络权重(即 本质上 嵌入 层) .

嵌入层请参考Keras官方文档:https://keras.io/layers/embeddings/.