1.首先我们了解一下keras中的Embedding层:from keras.layers.embeddings import Embedding:
Embedding参数如下:
输入尺寸:(batch_size,input_length)
输出尺寸:(batch_size,input_length,output_dim)
举个例子:(随机初始化Embedding):
fromkeras.models import Sequentialfromkeras.layers import Embedding
import numpyasnp
model=Sequential()
model.add(Embedding(1000, 64, input_length=10))
# 输入大小为(None,10),Nnoe是batch_size大小,10代表每一个batch中有10条样本# 输出大小为(None, 10, 64),其中64代表输入中每个每条样本被embedding成了64维的向量input_array= np.random.randint(1000, size=(32, 10))
model.compile('rmsprop', 'mse')
output_array=model.predict(input_array)
print(output_array)
assert output_array.shape== (32, 10, 64)
具体可以看下面的例子:
fromkeras.models import Sequentialfromkeras.layers import Flatten, Dense, Embedding
import numpyasnp
model=Sequential()
model.add(Embedding(3, 2, input_length=7))
#通俗的讲,这个过程中,Embedding层生成了一个大小为3*2的随机矩阵(3代表词汇表大小,,2代表没个词embedding后的向量大小),记为M,查看矩阵M:
model.layers[0].get_weights()
#输出
[array([[-0.00732628, -0.02913231],
[0.00573028, 0.0329752],
[-0.0401206 , -0.01729034]], dtype=float32)]
矩阵的每一行是该行下标指示的标记的数值向量,即矩阵M的第i(0,1,2)行是index为i的单词对应的数值向量,比如说,我的输入如果index=1,则对应的embedding向量=[ 0.00573028, 0.0329752 ],具体看下面:
data = np.array([[0,1,2,1,1,0,1],[0,1,2,1,1,0,1]]
model.predict(data)