Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the purpose of keras.backend.function()

The Keras manual doesn't say too much:

keras.backend.function(inputs, outputs, updates=None)  Instantiates a Keras function. Arguments inputs: List of placeholder tensors. outputs: List of output tensors. updates: List of update ops. **kwargs: Passed to tf.Session.run. Returns 

Tensorflow source code, which is actually quite short, shows that K.function(...) return a Function object which, when called, evaluates the outputs and updates using the inputs. The interesting part is how it handles the updates which I don't follow. Any explanations/examples/pointers to help understanding this K.function(...) is appreciated! Here is the relevant part from Tensorflow source code

class Function(object):   """Runs a computation graph.   Arguments:       inputs: Feed placeholders to the computation graph.       outputs: Output tensors to fetch.       updates: Additional update ops to be run at function call.       name: a name to help users identify what this function does.   """    def __init__(self, inputs, outputs, updates=None, name=None,                **session_kwargs):     updates = updates or []     if not isinstance(inputs, (list, tuple)):       raise TypeError('`inputs` to a TensorFlow backend function '                       'should be a list or tuple.')     if not isinstance(outputs, (list, tuple)):       raise TypeError('`outputs` of a TensorFlow backend function '                       'should be a list or tuple.')     if not isinstance(updates, (list, tuple)):       raise TypeError('`updates` in a TensorFlow backend function '                       'should be a list or tuple.')     self.inputs = list(inputs)     self.outputs = list(outputs)     with ops.control_dependencies(self.outputs):       updates_ops = []       for update in updates:         if isinstance(update, tuple):           p, new_p = update           updates_ops.append(state_ops.assign(p, new_p))         else:           # assumed already an op           updates_ops.append(update)       self.updates_op = control_flow_ops.group(*updates_ops)     self.name = name     self.session_kwargs = session_kwargs    def __call__(self, inputs):     if not isinstance(inputs, (list, tuple)):       raise TypeError('`inputs` should be a list or tuple.')     feed_dict = {}     for tensor, value in zip(self.inputs, inputs):       if is_sparse(tensor):         sparse_coo = value.tocoo()         indices = np.concatenate((np.expand_dims(sparse_coo.row, 1),                                   np.expand_dims(sparse_coo.col, 1)), 1)         value = (indices, sparse_coo.data, sparse_coo.shape)       feed_dict[tensor] = value     session = get_session()     updated = session.run(         self.outputs + [self.updates_op],         feed_dict=feed_dict,         **self.session_kwargs)     return updated[:len(self.outputs)]   def function(inputs, outputs, updates=None, **kwargs):   """Instantiates a Keras function.   Arguments:       inputs: List of placeholder tensors.       outputs: List of output tensors.       updates: List of update ops.       **kwargs: Passed to `tf.Session.run`.   Returns:       Output values as Numpy arrays.   Raises:       ValueError: if invalid kwargs are passed in.   """   if kwargs:     for key in kwargs:       if (key not in tf_inspect.getargspec(session_module.Session.run)[0] and           key not in tf_inspect.getargspec(Function.__init__)[0]):         msg = ('Invalid argument "%s" passed to K.function with Tensorflow '                'backend') % key         raise ValueError(msg)   return Function(inputs, outputs, updates=updates, **kwargs) 
like image 869
sgu Avatar asked Jan 07 '18 22:01

sgu


People also ask

What is Keras backend function?

What is a "backend"? Keras is a model-level library, providing high-level building blocks for developing deep learning models. It does not handle itself low-level operations such as tensor products, convolutions and so on.

What does Keras backend Clear_session () do?

clear_session functionResets all state generated by Keras. Keras manages a global state, which it uses to implement the Functional model-building API and to uniquify autogenerated layer names.

What is backend engine in Keras?

Instead, it relies on a specialized, well-optimized tensor manipulation library to do so, serving as the “backend engine” of Keras. The R interface to Keras uses TensorFlow™ as it's default tensor backend engine, however it's possible to use other backends if desired.


1 Answers

I have the following understanding of this function keras.backend.function. I will explain it with the help of a code snippet from this.

The part of code snippet is as follows

final_conv_layer = get_output_layer(model, "conv5_3") get_output = K.function([model.layers[0].input],                          [final_conv_layer.output, model.layers[-1].output]) [conv_outputs, predictions] = get_output([img])      

In this code, there is a model from which conv5_3 layer is extracted (line 1). In the function K.function(), the first argument is input to this model and second is set of 2 outputs - one for convolution and second for softmax output at the last layer.

As per the Keras/Tensorflow manual, this function runs the computation graph that we have created in the code, taking input from the first parameter and extracting the number of outputs as per the layers mentioned in the second parameter. Thus, conv_outputs are output of final_conv_layer and predictions are output of model.layers[-1], i.e. the last layer of the model.

like image 84
Pallavi Avatar answered Oct 11 '22 18:10

Pallavi