tensorflow中embedding计算原理

# vocab_size:词表数量
# embedding_dim: 词嵌入后维度
tf.keras.layers.Embedding(vocab_size, embedding_dim)

假设有一句话,I love you

vocab_size:我们传入的词表大小是1000,

embedding_dim:embedding后的维度256。

先将 I love you 这三个词对应的索引(1行3列)传入Embedding层

那么embedding会先将这1行三列的索引转换成One-hot编码,

因为此表有1000个词,那么这句I love you也就转成(3行1000列)的词向量。

embedding层会生成根据你传入的vocab_size词表大小和embedding_dim维度大小生成一个1000行256列的矩阵。

用One-hot编码的3行1000列矩阵乘embedding层生成的1000行256列的矩阵,最后embedding输出的就是3行256列的词嵌入后的输出。

那么我们每次输入不仅仅是一句话,大多数情况下输入的是一个批次,

例如batch_size=64,也就是每批次有64句话输入

那么假设输入的维度是64行15列(64,15)

那么经过One-hot编码得到的矩阵就是64个15行1000列的矩阵(64,15,1000)

再与embedding生成的(64,1000,256)的矩阵相乘。

输出的就是词嵌入后的结果(64,15,256)

假设输入维度是(64, 15),那么也就是代表一句话有15个单词,一共有64句话作为一批次输入。

我们输入经过embedding层之后得到这一批次的词向量是(64,15,256),含义就是GRU分成15个时刻,每个时刻64行256列的输入。

我们假设GRU中间隐层有1024个神经元, 那么在输入与隐层之间的矩阵就是256*1024的W矩阵

输入的每一个时刻是(64,256)的输入与W矩阵相乘后得到每一个时刻的输出是64*1024的矩阵。

因为是15个时刻,所以GRU总的输出就是15个(64, 1024)的矩阵,在tf里用三维向量表示(64,15, 1024)

 每一时刻的输入就是一个单词,一句话拆分成多个时刻的输入。

你可能感兴趣的:(深度学习,NLP自然语言处理,tensorflow,深度学习)