【发布时间】:2019-08-22 12:52:39
【问题描述】:
在documentation 中,它说它“将正整数(索引)转换为固定大小的密集向量。例如 [[4], [20]] -> [[0.25, 0.1], [0.6, - 0.2]]"
谁能说得清楚点?
函数如何将整数转换为密集向量?
【问题讨论】:
标签: python tensorflow keras
在documentation 中,它说它“将正整数(索引)转换为固定大小的密集向量。例如 [[4], [20]] -> [[0.25, 0.1], [0.6, - 0.2]]"
谁能说得清楚点?
函数如何将整数转换为密集向量?
【问题讨论】:
标签: python tensorflow keras
你可以把它当作一个列表。此列表中的每个项目都是一个固定大小的向量。 调用该层时,它会将输入作为索引,并返回相应的向量。
此列表中的向量在训练期间进行了优化。
【讨论】:
您可以在 Tomas Mikolov 的出版物中了解更多信息,他在其中介绍了称为 Word2Vec 的向量嵌入。
嵌入背后的想法是将稀疏向量压缩为低维密集向量。让我们考虑一个 100k 单词的字典。每个单词可以表示为大小为 100000 的向量,其中所有 0 和单个 1 取决于单词位置/索引。直接用它的索引来表示一个词是无效的(考虑对索引进行排序或数学运算)。但是大型稀疏向量不太适合在 NN 的上下文中使用。嵌入尝试将单词封装在较低维度的连续空间中,例如 k=100,其中相似的单词之间的距离会更小。米科洛夫过去常常通过单词彼此靠近的频率来定义相似度。 Mikolov 训练/调整了嵌入矩阵 E,使得 E(i)*E(j) 将粗略地表示单词 i 和 j 出现在附近的概率。后来的出版物表明,您可以通过在多层网络中随机初始化嵌入层来获得类似的结果,并且在训练之后,嵌入将代表某种相似性。
粗略地说:NN 将每个索引随机投影到低维空间中的某个点。在使用反向传播进行训练期间,这些预测以一种松散的结构组织,有助于手头的任务。
Index Sparse N=6 -> Embedding K=3
----------------------------------------
0 [1 0 0 0 0 0] [0.425 0.233 0.556]
1 [0 1 0 0 0 0] [0.046 0.975 0.058]
2 [0 0 1 0 0 0] [0.306 0.424 0.651]
3 [0 0 0 1 0 0] [0.293 0.12 0.546]
4 [0 0 0 0 1 0] [0.236 0.657 0.046]
5 [0 0 0 0 0 1] [0.907 0.321 0.882]
【讨论】: