tensorflow - 如何在 Tensorflow 2 中实现稀疏嵌入,如 Pytorch Embedding(sparse=True)?
问题描述
我有一个网络有很多需要嵌入的项目。
但是,在每个训练批次中,实际使用的项目只有很小一部分。
如果我使用普通tf.keras.layers.Embedding
层,它会将所有项目添加到网络参数中,从而消耗大量内存并显着降低分布式训练的速度,因为在每一步中,所有未使用的 grads 仍然是同步的。
我想要的是,在每个训练步骤中,只有实际使用的嵌入权重被添加到图中并被计算和同步。
Pytorch
已经通过torch.nn.Embedding(sparse=True)
.
如何在 Tensorflow 2 中实现这一点?
解决方案
我的错...检查 tf.GradientTape() 告诉我 tf.gather 的梯度已经是一个稀疏张量,所以这不需要麻烦。
推荐阅读
- php - 如何在 Laravel 5.8 中集成 Instagram API(Feed)?
- c++ - 使用递归时如何保持值
- hive - NOT IN 子查询与 hiveql 重新调整 NullPointerException null
- javascript - 如何自动单击按钮(在加载时刺激鼠标单击)?
- python - 如果我们已经在 python 中导入了 tensorflow,为什么还要从 tensorflow 中导入 keras?
- php - 如何解析对象数组中的数据
- visual-c++ - 如何使用 MSVC lib.exe 向 qmake 提供精确的指令以构建 lib 文件,例如“lib.exe /DEF:mylib.def /OUT:mylib.lib
- java - 在 ubuntu 18.04 中安装 OpenJDK OpenJ9 后,我丢失了可执行文件
- excel - 从另一个子程序调用一个子程序
- c - ESP数据包的C AES-GCM解密不起作用