parameters: (graph_def, statistic_types, input_layer,
                              input_shape_override, batch_size)
return_statement: return total_stats, node_stats
docstring: Looks at the performance statistics of all nodes in the graph.
docstring_summary: Looks at the performance statistics of all nodes in the graph.
docstring_tokens: Looks at the performance statistics of all nodes in the graph .
function: def calculate_graph_metrics(graph_def, statistic_types, input_layer,
                              input_shape_override, batch_size):
    """Looks at the performance statistics of all nodes in the graph."""
    _ = tf.import_graph_def(graph_def, name="")
    total_stats = {}
    node_stats = {}
    for statistic_type in statistic_types:
      total_stats[statistic_type] = ops.OpStats(statistic_type)
      node_stats[statistic_type] = {}
    # Make sure we get pretty-printed numbers with separators.
    locale.setlocale(locale.LC_ALL, "")
    with tf.Session() as sess:
      input_tensor = sess.graph.get_tensor_by_name(input_layer)
      input_shape_tensor = input_tensor.get_shape()
      if input_shape_tensor:
        input_shape = input_shape_tensor.as_list()
      else:
        input_shape = None
      if input_shape_override:
        input_shape = input_shape_override
      if input_shape is None:
        raise ValueError("""No input shape was provided on the command line,"""
                         """ and the input op itself had no default shape, so"""
                         """ shape inference couldn't be performed. This is"""
                         """ required for metrics calculations.""")
      input_shape[0] = batch_size
      input_tensor.set_shape(input_shape)
      for node in graph_def.node:
        # Ensure that the updated input shape has been fully-propagated before we
        # ask for the statistics, since they may depend on the output size.
        op = sess.graph.get_operation_by_name(node.name)
        ops.set_shapes_for_outputs(op)
        for statistic_type in statistic_types:
          current_stats = ops.get_stats_for_node_def(sess.graph, node,
                                                     statistic_type)
          node_stats[statistic_type][node.name] = current_stats
          total_stats[statistic_type] += current_stats
    return total_stats, node_stats
function_tokens: def calculate_graph_metrics ( graph_def , statistic_types , input_layer , input_shape_override , batch_size ) : _ = tf . import_graph_def ( graph_def , name = "" ) total_stats = { } node_stats = { } for statistic_type in statistic_types : total_stats [ statistic_type ] = ops . OpStats ( statistic_type ) node_stats [ statistic_type ] = { } # Make sure we get pretty-printed numbers with separators. locale . setlocale ( locale . LC_ALL , "" ) with tf . Session ( ) as sess : input_tensor = sess . graph . get_tensor_by_name ( input_layer ) input_shape_tensor = input_tensor . get_shape ( ) if input_shape_tensor : input_shape = input_shape_tensor . as_list ( ) else : input_shape = None if input_shape_override : input_shape = input_shape_override if input_shape is None : raise ValueError ( """No input shape was provided on the command line,""" """ and the input op itself had no default shape, so""" """ shape inference couldn't be performed. This is""" """ required for metrics calculations.""" ) input_shape [ 0 ] = batch_size input_tensor . set_shape ( input_shape ) for node in graph_def . node : # Ensure that the updated input shape has been fully-propagated before we # ask for the statistics, since they may depend on the output size. op = sess . graph . get_operation_by_name ( node . name ) ops . set_shapes_for_outputs ( op ) for statistic_type in statistic_types : current_stats = ops . get_stats_for_node_def ( sess . graph , node , statistic_type ) node_stats [ statistic_type ] [ node . name ] = current_stats total_stats [ statistic_type ] += current_stats return total_stats , node_stats