我尝试设置 stateful=True 来训练我的 LSTM 模型并且它起作用了。
但是我必须将我的输入重塑为我为第一层设置的相同 batch_size,这对于有状态 RNN 来说是必须的,否则我会得到一个错误:InvalidArgumentError: Invalid input_h shape。
我将batch_size设置为64,但我只想输入一个起始句来生成文本。如果一定要提供batch_size=64的input,就需要准备64个句子,太可笑了。
如果我没有设置 stateful=True,它运行良好,但我需要提高性能。在这种情况下,如何在不匹配我设置的 batch_size 的情况下使用有状态 LSTM 模型?
我定义的模型
seq_length = 100
batch_size = 64
epochs = 3
vocab_size = len(vocab) # 65
embedding_dim = 256
rnn_units = 1024
def bi_lstm(vocab_size, embedding_dim, batch_size, rnn_units):
model = keras.models.Sequential([
keras.layers.Embedding(vocab_size, embedding_dim,
batch_input_shape = (batch_size, None)),
keras.layers.Bidirectional(
keras.layers.LSTM(units = rnn_units,
return_sequences = True,
stateful = True,
recurrent_initializer = "glorot_uniform"
)),
keras.layers.Dense(vocab_size),
])
return model
Run Code Online (Sandbox Code Playgroud)
我做了一个这样的简单测试,它显示了我的错误。
for x, y in seq_dataset.take(1):
x = …Run Code Online (Sandbox Code Playgroud)