我正在读这篇关于“Regularizing and Optimizing LSTM Language Models”的文章,他们讨论了Embedding Dropout
,它说“当用于完全向前和向后传递的嵌入矩阵上发生丢失时,这意味着特定单词的所有出现都将在该过程中消失,相当于在一个热嵌入和嵌入查找之间的连接上执行变分丢失。”然而,我似乎无法在tensorflow实验中找到一个很好的方法来实现这一点。对于每一个新批处理,我当前使用以下代码嵌入我的序列:
embedding_sequence = tf.contrib.layers.embed_sequence(features['input_sequence'], vocab_size=n_tokens, embed_dim=word_embedding_size)
现在我可以很容易地将dropout应用于embedding_sequence
,但是我读到的文章中说,在整个向前/向后传递过程中应该删除相同的单词。有什么建议可以让我继续使用embed_sequence
?这里是我认为我的方法应该是什么后,打破embed_sequence但我仍然不相信它是正确的。。。在
建议解决方案
^{pr2}$有没有更合适的方法来处理这个问题?我从embed_sequence
中得到了什么我不能从我提出的解决方案中得到的东西吗?在
次要的事情我不确定:
如果您使用的是kerasapi,则可以使用
tf.keras.layers.Dropout(0.2,noise_shape=[batch_size1,4,1])
在嵌入层的顶部。在玩玩它:
阅读https://www.tensorflow.org/api_docs/python/tf/nn/dropout中的噪声形状参数
你可以像这样嵌入辍学者。。在
这将随机地将嵌入矩阵的行设置为零,如您所提到的论文中引用的https://arxiv.org/pdf/1512.05287.pdf中所述。在
资料来源:
https://github.com/tensorflow/tensorflow/issues/14746
类似Pythorch实现:
https://github.com/salesforce/awd-lstm-lm/blob/master/embed_regularize.py
相关问题 更多 >
编程相关推荐