如何在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中实现这一点?