Tensorflow Keras变量输入

Tensorflow Keras变量输入,tensorflow,keras,Tensorflow,Keras,我正在研究Keras的一个例子 模型构建于此: def build_model(vocab_size, embedding_dim, rnn_units, batch_size): model = tf.keras.Sequential([ tf.keras.layers.Embedding(vocab_size, embedding_dim, batch_input_shape=[batch_size,

我正在研究Keras的一个例子

模型构建于此:

def build_model(vocab_size, embedding_dim, rnn_units, batch_size):
    model = tf.keras.Sequential([
        tf.keras.layers.Embedding(vocab_size, embedding_dim,
                                  batch_input_shape=[batch_size, None]),
        tf.keras.layers.GRU(rnn_units,
                            return_sequences=True,
                            stateful=True,
                            recurrent_initializer='glorot_uniform'),
        tf.keras.layers.Dense(vocab_size)
    ])
    return model
在训练期间,他们总是通过长度为100的整数数组


但在预测过程中,它们能够传入任意长度的输入,并且输出的长度与输入的长度相同。我总是觉得时间步长必须是一样的。不是这样吗?RNN的时间步长可能会发生某种变化?

训练序列的长度不应等于预测长度

RNN处理两个向量:新词和隐藏状态(从前面的词中累积)。它不保持序列的长度


但是要获得对长序列的良好预测,你必须用长序列训练RNN,因为RNN应该学习一个长上下文。

RNN是序列模型,即它们接收一个输入序列并给出一个输出序列。序列长度也称为时间步长。时间步长是RNN单元展开的时间,对于每次展开,传递一个输入,RNN单元使用其门发出一个输出(每次展开)。所以在理论上,你们可以有你们想要的任意长的序列。现在让我们假设您有不同大小的不同输入,因为您不能在单个批次中有可变大小的输入,如果您想使用批次进行培训,您必须收集相同大小的输入并生成一个批次。您也可以使用1的批处理大小,而不必担心所有这些,但是训练会变得非常缓慢

在实际情况下,在训练时,我们将输入分成相同的大小,以便训练变得更快。有些情况下,如语言翻译模型,这是不可行的

因此,理论上RNN对序列长度没有任何限制,但是随着序列长度的增加,大序列将在乞讨时开始失去上下文

在预测时,您可以使用您想要的任何序列长度

在您的情况下,您的输出大小与输入大小相同,因为
return\u sequences=True
。您还可以通过使用
return\u sequences=False
获得单个输出,其中keras只返回最后一次展开的输出