embedding layer的作用
keras.layers.Embeddings(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None)
我们经常会使用one-hot编码将一个特征转换为一个向量。但在实际应用当中,将特征转换为one-hot编码后维度会非常高。所以我们会将one-hot这种稀疏特征转化为稠密特征,通常做法也就是转化为我们常用的embedding。
在NLP领域中,我们需要将文本转化为电脑所能读懂的语言,也就是把文本语句转化为向量,也就是embedding。
Embedding层相当于处理词向量,之后进行一次卷积操作降维。
需要注意的是,tf.layers.Embedding只能作为第一层使用。
#vocab_size:字典大小
#embedding_dim:本层的输出大小,也就是生成的embedding的维数
#input_length:输入数据的维数,因为输入数据会做padding处理,所以一般是定义的max_length
keras.layers.Embedding(vocab_size, embedding_dim, input_length = max_length)
举个例子:
embedding_dim = 16
batch_size = 128
model = keras.models.Sequential([
# 定义矩阵(vocab_size * embedding_dim), 输出(batch_size, max_length, embedding_dim), 将词表表示的句子转化为embedding
keras.layers.Embedding(vocab_size, embedding_dim, input_length = max_length),
#batch_size*max_length*embedding_dim->batch_size*embedding_dim
keras.layers.GlobalAveragePooling1D(),
keras.layers.Dense(64, activation="relu"),
keras.layers.Dense(1, activation="softmax")
])
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])