【发布时间】:2016-11-20 12:21:50
【问题描述】:
我想知道为什么 tf.nn.embedding_lookup 使用张量列表,而 tf.gather 只对单个张量执行查找。为什么我需要对多个嵌入进行查找?
我想我在某处读到它对于节省大型嵌入的内存很有用,但我不确定这将如何工作,因为我看不出拆分嵌入将如何节省任何东西。
【问题讨论】:
标签: tensorflow
我想知道为什么 tf.nn.embedding_lookup 使用张量列表,而 tf.gather 只对单个张量执行查找。为什么我需要对多个嵌入进行查找?
我想我在某处读到它对于节省大型嵌入的内存很有用,但我不确定这将如何工作,因为我看不出拆分嵌入将如何节省任何东西。
【问题讨论】:
标签: tensorflow
tf.embedding_lookup 函数假定嵌入矩阵是分片,即被分割成许多块。事实上,当嵌入矩阵被单向分片时,它可以工作,在这种情况下,它就像tf.gather。
但更有趣的情况是嵌入矩阵很大并且您无法将其放入一台机器的内存中,或者您希望嵌入查找操作具有高带宽。在这些情况下,它有助于将矩阵划分为多个部分。这些片段可以分布在机器上以适应所有的内存,并且还允许并行读取以获得更高的查找带宽。
【讨论】: