1

I would like to create a 'Sequential' model (a Time Series model as you might have guessed), that takes 20 days of past data with a feature size of 2, and predict 1 day into the future with the same feature size of 2.

I found out you need to specify the batch size for a stateful LSTM model, so if I specify a batch size of 32 for example, the final output shape of the model is (32, 2), which I think means the model is predicting 32 days into the future rathen than 1.

How would I go on fixing it?

Also, asking before I arrive to the problem; if I specify a batch size of 32 for example, but I want to predict on an input of shape (1, 20, 2), would the model predict correctly or what, since I changed to batch size from 32 to 1. Thank you.

Andrey
  • 5,932
  • 3
  • 17
  • 35
xdraxulisx
  • 83
  • 1
  • 8

1 Answers1

2

You don't need to specify batch_size. But you should feed 3-d tensor:

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)

Shape of (32, 2) means that your sequence length is 32.

Batch size is a parameter of training (how many sequences should be feeded to the model before backpropagating error - see stochastic graient descent method). It doesn't affect your data (which shoud be 3-d - (number of sequences, length of sequence, feature)).

If you need to predict only one sequence - just feed tensor of shape (1, 20, 2) to the model.

Andrey
  • 5,932
  • 3
  • 17
  • 35
  • Thank you for your answer. I think this solves it, but just to confirm before I accept your answer since your forgot the parameter, this works for `stateful=True` right? – xdraxulisx Nov 15 '20 at 16:32
  • Actually an extra question: when you say 'sequence', do you mean 'batch'? I'm new to this "Time Series Forecasting" so excuse my inexpertise. – xdraxulisx Nov 15 '20 at 16:35
  • Sorry - don't understand. Sequence is [[0, 1], [2, 3] ...]. Batch is a parameter of training: you can set it when calling 'fit()' – Andrey Nov 15 '20 at 16:38