'Call the model on new inputs.
In this case `call` just reapplies
all ops in the graph to the new inputs
(e.g. build a new computational graph from the provided inputs).
A model is callable on non-Keras tensors.
# Arguments
inputs: A tensor or list of tensors.
mask: A mask or list of masks. A mask can be
either a tensor or None (no mask).
# Returns
A tensor if there is a single output, or
a list of tensors if there are more than one outputs.'

def call(self, inputs, mask=None):

    inputs = _to_list(inputs)
    if (mask is None):
        masks = [None for _ in range(len(inputs))]
    else:
        masks = _to_list(mask)
    cache_key = ','.join([str(id(x)) for x in inputs])
    cache_key += ('_' + ','.join([str(id(x)) for x in masks]))
    if (cache_key in self._output_tensor_cache):
        return self._output_tensor_cache[cache_key]
    else:
        (output_tensors, _, _) = self.run_internal_graph(inputs, masks)
        return output_tensors
