- What should the input look like?
You are right to think a 2D tensor, but usually we add one more dimension for the batch. You can indeed have a variable length number_of_x_inputs, but to train during batch processing all inputs in a single batch will need to have the same shape. (Setting batch size to 1 will get around this.) During inference, you can have whatever length you want. See below code sample.
- How do I pass each input vector through the same transformation before feeding it to the RNN layer?
TimeDistributed. The example below passes all vectors $x_i$ through the same feed forward network (
Dense(5, ...)), but you should be able to swap that out for whatever
f you were thinking.
from keras.models import Sequential
from keras.layers import LSTM, Dense, TimeDistributed
x_dimension = 16
num_classes = 2
model = Sequential()
This prints the following model:
Layer (type) Output Shape Param #
time_distributed_1 (TimeDistributed) (None, None, 5) 85
lstm_1 (LSTM) (None, None, 32) 4864
lstm_2 (LSTM) (None, 8) 1312
dense_2 (Dense) (None, 2) 18
Total params: 6,279
Trainable params: 6,279
Non-trainable params: 0