有状态 LSTM 模型的 TensorFlow 不同输入和输出形状

TensorFlow different input and output shapes for stateful LSTM model

我想创建一个 'Sequential' 模型(您可能已经猜到的时间序列模型),它需要 20 天的过去数据,特征大小为 2 ,并使用 2.

的相同特征大小预测未来 1

我发现您需要为有状态 LSTM 模型指定批量大小,因此如果我指定批量大小为 32,例如,模型的最终输出形状为 (32, 2) ,我认为这意味着模型预测的是 32 天而不是 1.

我该如何继续修复它?

此外,在我到达问题之前询问;例如,如果我指定 32 的批处理大小,但我想预测形状为 (1, 20, 2) 的输入,模型会正确预测还是什么,因为我从 32 更改为批处理大小] 到 1。谢谢。

您无需指定 batch_size。但是你应该输入 3-d 张量:

import tensorflow as tf
from tensorflow.keras.layers import Input, LSTM, Dense
from tensorflow.keras import Model, Sequential
features = 2
dim = 128
new_model = Sequential([
  LSTM(dim, stateful=True, return_sequences = True),
  Dense(2)
])

number_of_sequences = 1000
sequence_length = 20
input = tf.random.uniform([number_of_sequences, sequence_length, features], dtype=tf.float32)
output = new_model(input) # shape is (number_of_sequences, sequence_length, features)
predicted = output[:,-1] # shape is (number_of_sequences, 1, features)

(32, 2) 的形状意味着你的序列长度是 32。

批量大小是训练的一个参数(在反向传播错误之前应该向模型提供多少序列 - 请参阅随机梯度下降法)。它不会影响您的数据(应该是 3-d -(序列数、序列长度、特征))。

如果您只需要预测一个序列 - 只需将形状为 (1, 20, 2) 的张量输入模型即可。