'Creates a base part of the Model (no gradients, losses or summaries).
Args:
images: A tensor of shape [batch_size, height, width, channels].
labels_one_hot: Optional (can be None) one-hot encoding for ground truth
labels. If provided the function will create a model for training.
scope: Optional variable_scope.
reuse: whether or not the network and its variables should be reused. To
be able to reuse \'scope\' must be given.
Returns:
A named tuple OutputEndpoints.'

def create_base(self, images, labels_one_hot, scope='AttentionOcr_v1', reuse=None):

    logging.debug('images:    %s', images)
    is_training = (labels_one_hot is not None)
    with tf.variable_scope(scope, reuse=reuse):
        views = tf.split(value=images, num_or_size_splits=self._params.num_views, axis=2)
        logging.debug('Views=%d    single    view:    %s', len(views), views[0])
        nets = [self.conv_tower_fn(v, is_training, reuse=(i != 0)) for (i, v) in enumerate(views)]
        logging.debug('Conv    tower:    %s', nets[0])
        nets = [self.encode_coordinates_fn(net) for net in nets]
        logging.debug('Conv    tower    w/    encoded    coordinates:    %s', nets[0])
        net = self.pool_views_fn(nets)
        logging.debug('Pooled    views:    %s', net)
        chars_logit = self.sequence_logit_fn(net, labels_one_hot)
        logging.debug('chars_logit:    %s', chars_logit)
        (predicted_chars, chars_log_prob, predicted_scores) = self.char_predictions(chars_logit)
    return OutputEndpoints(chars_logit=chars_logit, chars_log_prob=chars_log_prob, predicted_chars=predicted_chars, predicted_scores=predicted_scores)
