我开始使用Keras来构建神经网络模型。
我有一个分类问题,其中特征是离散的。为了处理这种情况,标准程序包括将离散特征转换为二进制数组,使用独热编码(one-hot encoding)。
然而,似乎在Keras中这一步不是必需的,因为可以简单地使用嵌入层(Embedding layer)来创建这些离散特征的特征向量表示。
这些嵌入是如何执行的?
我的理解是,如果离散特征f
可以取k
个值,那么嵌入层会创建一个具有k
列的矩阵。每当我在训练阶段接收到该特征的一个值,比如i
时,只有矩阵的i
列会被更新。
我的理解正确吗?
回答:
正如人们可能很容易注意到的那样,将one-hot
向量与Embedding
矩阵相乘可以在恒定时间内有效执行,因为这可以被理解为矩阵切片。这正是Embedding
层在计算过程中所做的。它只是使用gather
后端函数选择适当的索引。这意味着您对Embedding
层的理解是正确的。