'Creates a model which uses a stack of LSTMs to represent the video.
Args:
model_input: A \'batch_size\' x \'max_frames\' x \'num_features\' matrix of
input features.
vocab_size: The number of classes in the dataset.
num_frames: A vector of length \'batch\' which indicates the number of
frames for each video (before padding).
Returns:
A dictionary with a tensor containing the probability predictions of the
model in the \'predictions\' key. The dimensions of the tensor are
\'batch_size\' x \'num_classes\'.'

def create_model(self, model_input, vocab_size, num_frames, **unused_params):

    lstm_size = FLAGS.lstm_cells
    number_of_layers = FLAGS.lstm_layers
    stacked_lstm = tf.contrib.rnn.MultiRNNCell([tf.contrib.rnn.BasicLSTMCell(lstm_size, forget_bias=1.0) for _ in range(number_of_layers)])
    loss = 0.0
    (outputs, state) = tf.nn.dynamic_rnn(stacked_lstm, model_input, sequence_length=num_frames, dtype=tf.float32)
    aggregated_model = getattr(video_level_models, FLAGS.video_level_classifier_model)
    return aggregated_model().create_model(model_input=state[(-1)].h, vocab_size=vocab_size, **unused_params)
