Tensorflow Keras变量输入
我正在研究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,
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只返回最后一次展开的输出