如何在Tensorflow 2中实现像Pytorch嵌入(Sparse=True)这样的稀疏嵌入?
我有一个网络,有很多需要嵌入的项目 然而,在每个培训批次中,实际使用的项目只有很小的一部分 如果我使用正常的如何在Tensorflow 2中实现像Pytorch嵌入(Sparse=True)这样的稀疏嵌入?,tensorflow,pytorch,Tensorflow,Pytorch,我有一个网络,有很多需要嵌入的项目 然而,在每个培训批次中,实际使用的项目只有很小的一部分 如果我使用正常的tf.keras.layers.embedded层,它会将所有项目添加到网络参数中,从而消耗大量内存,并显著降低分布式训练的速度,因为在每个步骤中,所有未使用的梯度仍然是同步的 我想要的是,在每个训练步骤中,只有实际使用的嵌入权重被添加到图中,并被计算和同步 Pytorch已经通过torch.nn.Embedding(sparse=True)提供了此功能 如何在Tensorflow 2中实
tf.keras.layers.embedded
层,它会将所有项目添加到网络参数中,从而消耗大量内存,并显著降低分布式训练的速度,因为在每个步骤中,所有未使用的梯度仍然是同步的
我想要的是,在每个训练步骤中,只有实际使用的嵌入权重被添加到图中,并被计算和同步
Pytorch
已经通过torch.nn.Embedding(sparse=True)
提供了此功能
如何在Tensorflow 2中实现此功能?我的坏。。。检查tf.GradientTape()告诉我tf.gather的梯度已经是稀疏张量,因此不需要麻烦。给定,关键点似乎是pytorch为稀疏嵌入返回稀疏梯度?如何在tensorflow中实现这一点?