【问题标题】:how to change input_length in TensorFlow embedding layer?如何更改 TensorFlow 嵌入层中的 input_length?
【发布时间】:2019-04-14 10:53:37
【问题描述】:

我的第一层是嵌入层。大多数嵌入层都有固定的输入长度,例如:句子的最大长度,像这样(https://www.tensorflow.org/alpha/tutorials/sequences/word_embeddings):

embedding_dim=16

model = tf.layers.Embedding(vocab_size, embedding_dim, input_length=maxlen)
y=model(x)

但是我的数据集中的句子长度不同,我想改变每个句子嵌入的 input_length,如何改变模型?怎么称呼?

【问题讨论】:

    标签: tensorflow machine-learning keras deep-learning embedding


    【解决方案1】:

    您不应该更改每个句子的 input_length 参数,您应该定义一个 MAXIMUM_SENTENCE_LENGTH 常量,如果它们小于最大长度,您将使用特殊值 0 填充所有句子,或者简单地剪切如果他们超过它,就把多余的词去掉。

    然后,您可以通过将 mask_zero 参数设置为 True 来简单地屏蔽那些过多的 0 标记,这样它们就不会影响模型的输出或训练期间的梯度反向传播。

    查看tutorial了解更多详情。

    【讨论】:

    • 感谢您的回复,但是我想问一下为什么句子的长度必须相同?是因为embedding本身还是后面的rnn层?
    • 主要是因为下面的rnn层,你不能让一个rnn训练成任意句子长度。
    • 如果您打算只使用嵌入层,您可以简单地将 input_length 设置为批次中句子的长度,只要它们在所有句子中都相同。
    • 我喜欢 (github.com/dennybritz/cnn-text-classification-tf/blob/master/…) 中的一个代码。在第86行,你可以看到他使用了sequence_length=x_train.shape[1],也许这是解决这个问题的一种方法,和你的一样好。
    最近更新 更多