Embedding PyTorch中的图层列在"稀疏图层"有限制:
请记住,只有有限数量的优化器支持稀疏渐变:目前它是optim.SGD(cuda和cpu),以及optim.Adagrad(cpu)
这是什么原因?例如在Keras中,我可以使用任何优化器训练具有嵌入层的架构。
答案 0 :(得分:2)
仔细检查嵌入时的稀疏渐变是可选的,可以使用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) - 如果为True,则为渐变w.r.t.重量矩阵 将是一个稀疏的张量。有关稀疏的更多详细信息,请参阅注释 梯度。
所提到的“注释”是我在问题中引用的,关于稀疏梯度支持的有限数量的优化器。
<强>更新强>
理论上可行但在技术上难以在稀疏梯度上实现一些优化方法。 PyTorch仓库中有一个open issue来添加对所有优化器的支持。
关于原始问题,我认为嵌入可以被视为稀疏,因为可以直接对输入索引进行操作,而不是将它们转换为单热编码以输入到密集层。 @Maxim's对related question的答案解释了这一点。