我想知道为什么tf.nn.embedding_lookup
使用张量列表,而tf.gather
只是对单个张量执行查找。为什么我需要对多个嵌入进行查找?
我想我在某个地方看到它对于在大型嵌入上保存内存很有用,但我不确定这是如何工作的,因为我没有看到嵌入分割会如何保存任何内容。
答案 0 :(得分:6)
tf.embedding_lookup
函数假设嵌入矩阵是分片,即分成多个部分。实际上,当嵌入矩阵单向分片时它可以工作,在这种情况下它就像tf.gather
一样。
但更有趣的情况是嵌入矩阵很大并且你不能将它放在一台机器的内存上,或者你想在嵌入查找操作上获得高带宽。在这些情况下,将矩阵分割成碎片是有帮助的。这些部分可以跨机器分布,以便将其全部放入内存中,并且还允许并行读取以获得更高的带宽以进行查找。