'Creates a model which uses a logistic classifier over the average of the
frame-level features.
This class is intended to be an example for implementors of frame level
models. If you want to train a model over averaged features it is more
efficient to average them beforehand rather than on the fly.
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):

    num_frames = tf.cast(tf.expand_dims(num_frames, 1), tf.float32)
    feature_size = model_input.get_shape().as_list()[2]
    denominators = tf.reshape(tf.tile(num_frames, [1, feature_size]), [(-1), feature_size])
    avg_pooled = (tf.reduce_sum(model_input, axis=[1]) / denominators)
    output = slim.fully_connected(avg_pooled, vocab_size, activation_fn=tf.nn.sigmoid, weights_regularizer=slim.l2_regularizer(1e-08))
    return {'predictions': output}
