neural-network - 为什么 PyTorch 中的嵌入实现为稀疏层?

标签 neural-network deep-learning pytorch

Embedding PyTorch 中的层列在“稀疏层”下,但有以下限制:

Keep in mind that only a limited number of optimizers support sparse gradients: currently it’s optim.SGD (cuda and cpu), and optim.Adagrad (cpu)



这是什么原因?例如,在 Keras 中,我可以使用任何优化器训练带有嵌入层的架构。

最佳答案

仔细检查后,嵌入的稀疏梯度是可选的,可以使用 sparse 打开或关闭。范围:

class torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2, scale_grad_by_freq=False, sparse=False)



在哪里:

sparse (boolean, optional) – if True, gradient w.r.t. weight matrix will be a sparse tensor. See Notes for more details regarding sparse gradients.



提到的“注释”是我在关于支持稀疏梯度的有限数量的优化器的问题中引用的内容。

更新:

在稀疏梯度上实现一些优化方法在理论上是可行的,但技术上很难。有一个open issue在 PyTorch 存储库中添加对所有优化器的支持。

关于原始问题,我相信 Embeddings 可以被视为稀疏,因为可以直接对输入索引进行操作,而不是将它们转换为单热编码以输入到密集层。这在 @Maxim's 中有解释回复我的 related question .

关于neural-network - 为什么 PyTorch 中的嵌入实现为稀疏层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47868341/

相关文章:

python-2.7 - 为什么我必须做两个训练步骤才能在 Keras 中微调 InceptionV3?

python - Keras 卷积神经网络转换为 CoreML 模型的输入是多数组而不是图像?

tensorflow - 深度学习中的融合核(或融合层)是什么?

google-cloud-platform - 将 TPU 与 PyTorch 结合使用

python - 数学运算符区别 *= 或 +=

Python Numpy 平方均值计算(这是正确的方法吗)

machine-learning - 训练暗网立即结束

machine-learning - Keras 目标尺寸不匹配

java - 如何在 Deep Learning 4j 中使用网络进行预测?

tensorflow - 为什么当我增加批量大小时 tensorflow GPU 内存使用量会减少?