我使用TensorFlow(0.6)在文本数据上训练CNN。我使用的方法类似于this SO thread中指定的第二个选项(除了嵌入是可训练的)。我的数据集很小,词汇量大约是12,000个单词。当我使用随机单词嵌入训练时,一切都很好。但是,当我切换到the pre-trained embeddings from the word2vec site时,词汇量增长到超过3,000,000个单词,训练迭代变得慢100多倍。我也看到了这个警告:
UserWarning:将稀疏的IndexedSlices转换为密集的Tensor 900482700元素
我在this TensorFlow issue上看到了讨论,但我仍然不确定我遇到的减速是否是预期的,或者它是否是一个错误。我使用的是Adam优化器,但与Adagrad几乎完全相同。
我想我可以尝试的一种解决方法是使用最小嵌入矩阵进行训练,在我的数据集中只有~12,000个单词,序列化生成的嵌入,并在运行时将它们与预训练嵌入中的剩余单词合并。我认为这应该有效,但听起来很糟糕。
这是目前最好的解决方案,还是我错过了什么?
答案 0 :(得分:3)
所以这里有两个问题:
AdamOptimizer
替换为AdagradOptimizer
,一旦我这样做,运行时就会恢复与从小词汇中获得的运行时相同。