Variando la longitud de la secuencia en Keras sin relleno

Tengo una pregunta con respecto a las longitudes de secuencia variables para LSTM en Keras. Estoy pasando lotes de tamaño 200 y secuencias de longitudes variables (= x) con 100 características para cada objeto en la secuencia (=> [200, x, 100]) en un LSTM:

LSTM(100, return_sequences=True, stateful=True, input_shape=(None, 100), batch_input_shape=(200, None, 100))

Estoy ajustando el modelo en las siguientes matrices creadas al azar:

x_train = np.random.random((1000, 50, 100))
x_train_2 = np.random.random((1000, 10,100))

Por lo que entendí LSTM (y la implementación de Keras) correctamente, la x debería referirse al número de celdas LSTM. Para cada celda LSTM se debe aprender un estado y tres matrices (para entrada, estado y salida de la celda). ¿Cómo es posible pasar longitudes de secuencia variables al LSTM sin rellenar hasta un máximo? longitud especificada, como lo hice? El código se está ejecutando, pero en realidad no debería (en mi opinión). Incluso es posible pasar otro x_train_3 con una longitud de secuencia de 60 después, pero no debería haber estados y matrices para las 10 celdas adicionales.

Por cierto, estoy usando Keras versión 1.0.8 y Tensorflow GPU 0.9.

Aquí está mi código de ejemplo:

from keras.models import Sequential
from keras.layers import LSTM, Dense
import numpy as np
from keras import backend as K

with K.get_session():

    # create model
    model = Sequential()
    model.add(LSTM(100, return_sequences=True, stateful=True, input_shape=(None, 100),
             batch_input_shape=(200, None, 100)))
    model.add(LSTM(100))
    model.add(Dense(2, activation='softmax'))
    model.compile(loss='categorical_crossentropy',
                  optimizer='rmsprop',
                  metrics=['accuracy'])

    # Generate dummy training data
    x_train = np.random.random((1000, 50, 100))
    x_train_2 = np.random.random((1000, 10, 100))
    y_train = np.random.random((1000, 2))
    y_train_2 = np.random.random((1000, 2))

    # Generate dummy validation data
    x_val = np.random.random((200, 50, 100))
    y_val = np.random.random((200, 2))

    # fit and eval models
    model.fit(x_train, y_train, batch_size=200, nb_epoch=1, shuffle=False, validation_data=(x_val, y_val), verbose=1)
    model.fit(x_train_2, y_train_2, batch_size=200, nb_epoch=1, shuffle=False, validation_data=(x_val, y_val), verbose=1)
    score = model.evaluate(x_val, y_val, batch_size=200, verbose=1)

Respuestas a la pregunta(1)

Su respuesta a la pregunta