Embedding Layer(嵌入層)
Embedding Layer是使用在模型第一層的網(wǎng)絡(luò)層,其目的是將所有的索引標(biāo)號映射到稠密的低維向量中柠衅,比如文本集[[4],[32]]被映射為[[0.3,0.9,0.2],[-0.2,0.1,0,8]麸拄。該層通常用于文本數(shù)據(jù)建模贰逾。輸入數(shù)據(jù)要求是一個(gè)二維張量:(1個(gè)批次內(nèi)的文本數(shù),每篇文本中的詞語數(shù)),輸出為一個(gè)三維張量:(1個(gè)批次內(nèi)的文本數(shù), 每篇文本中的詞語數(shù),每個(gè)詞語的維度)
原型
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)
參數(shù)
- input_dim: int > 0靠欢。詞匯表大小, 即,最大整數(shù) index + 1诡曙。
- output_dim: int >= 0。詞向量的維度略水。
-
embeddings_initializer:
embeddings
矩陣的初始化方法 (詳見 initializers)价卤。 -
embeddings_regularizer:
embeddings
matrix 的正則化方法 (詳見 regularizer)。 -
embeddings_constraint:
embeddings
matrix 的約束函數(shù) (詳見 constraints)渊涝。 -
mask_zero: 是否把 0 看作為一個(gè)應(yīng)該被遮蔽的特殊的 "padding" 值慎璧。 這對于可變長的 循環(huán)神經(jīng)網(wǎng)絡(luò)層 十分有用。 如果設(shè)定為
True
驶赏,那么接下來的所有層都必須支持 masking炸卑,否則就會(huì)拋出異常。 如果 mask_zero 為True
煤傍,作為結(jié)果盖文,索引 0 就不能被用于詞匯表中 (input_dim 應(yīng)該與 vocabulary + 1 大小相同)。 -
input_length: 輸入序列的長度蚯姆,當(dāng)它是固定的時(shí)五续。 如果你需要連接
Flatten
和Dense
層,則這個(gè)參數(shù)是必須的 (沒有它龄恋,dense 層的輸出尺寸就無法計(jì)算)疙驾。
輸入數(shù)據(jù)的shape
模型需要知道輸入數(shù)據(jù)的shape,因此郭毕,Sequential的第一層需要接受一個(gè)關(guān)于輸入數(shù)據(jù)shape的參數(shù)它碎,后面的各個(gè)層則可以自動(dòng)的推導(dǎo)出中間數(shù)據(jù)的shape,因此不需要為每個(gè)層都指定這個(gè)參數(shù)。
實(shí)例
model = Sequential()
model.add(Embedding(1000, 64, input_length=10))
# 模型將輸入一個(gè)大小為 (batch, input_length) 的整數(shù)矩陣扳肛。
# 輸入中最大的整數(shù)(即詞索引)不應(yīng)該大于 999 (詞匯表大猩倒摇)
# 現(xiàn)在 model.output_shape == (None, 10, 64),其中 None 是 batch 的維度挖息。
input_array = np.random.randint(1000, size=(32, 10))
model.compile('rmsprop', 'mse')
output_array = model.predict(input_array)
assert output_array.shape == (32, 10, 64)