小编And*_*ndy的帖子

如何使用有状态 LSTM 模型进行预测而不指定与训练时相同的 batch_size?

我尝试设置 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)

stateful lstm keras

5
推荐指数
1
解决办法
681
查看次数

标签 统计

keras ×1

lstm ×1

stateful ×1