parameters: (self, input_graph, quantization_mode)
return_statement: return output_graph
docstring: Quantize float Const ops.
  
      There are two modes of operations, both replace float Const ops with
      quantized values.
      1. If quantization_mode is "weights_rounded", this function replaces float
      Const ops with quantized float Const ops - same as the original op, but
      float values being mapped to the center of one of 1<<FLAGS.bitdepth buckets.
      This does not change the raw model size, but compression algorithms such as
      zip (as used for compressing apks) or bzip2 will achieve a very good
      compression ratio.
      2. For other quantization modes ("MIN_COMBINED" or "MIN_FIRST"), float
      Const ops are quantized and replaced by a tuple of four ops to perform
      the dequantization at runtime:
      * eight-bit Const (bucket indices, same shape as original float Const op
      * two float Const ops (min and max value of original float Const op)
      * Dequantize op to convert the eight-bit consts to float tensors.
      The quantization mode is important because we see accuracy problems when
      quantizing weights for different situations depending on the algorithm
      used. We haven't figured out exactly what the underlying cause is yet,
      unfortunately.
  
      Args:
        input_graph: A GraphDef of the model containing float Const ops.
        quantization_mode: How to quantize and dequantize the values.
  
      Returns:
        A GraphDef of the converted graph.
  
      Raises:
        ValueError: If quantization_mode is unsupported.
docstring_summary: Quantize float Const ops.
docstring_tokens: Quantize float Const ops .
function: def quantize_weights(self, input_graph, quantization_mode):
      """Quantize float Const ops.
  
      There are two modes of operations, both replace float Const ops with
      quantized values.
      1. If quantization_mode is "weights_rounded", this function replaces float
      Const ops with quantized float Const ops - same as the original op, but
      float values being mapped to the center of one of 1<<FLAGS.bitdepth buckets.
      This does not change the raw model size, but compression algorithms such as
      zip (as used for compressing apks) or bzip2 will achieve a very good
      compression ratio.
      2. For other quantization modes ("MIN_COMBINED" or "MIN_FIRST"), float
      Const ops are quantized and replaced by a tuple of four ops to perform
      the dequantization at runtime:
      * eight-bit Const (bucket indices, same shape as original float Const op
      * two float Const ops (min and max value of original float Const op)
      * Dequantize op to convert the eight-bit consts to float tensors.
      The quantization mode is important because we see accuracy problems when
      quantizing weights for different situations depending on the algorithm
      used. We haven't figured out exactly what the underlying cause is yet,
      unfortunately.
  
      Args:
        input_graph: A GraphDef of the model containing float Const ops.
        quantization_mode: How to quantize and dequantize the values.
  
      Returns:
        A GraphDef of the converted graph.
  
      Raises:
        ValueError: If quantization_mode is unsupported.
      """
      output_graph = graph_pb2.GraphDef()
      for input_node in input_graph.node:
        should_quantize = False
        if input_node.op == "Const":
          dtype = dtypes.as_dtype(input_node.attr["dtype"].type)
          if dtype == dtypes.float32:
            should_quantize = True
        if should_quantize:
          if quantization_mode == "weights_rounded":
            output_graph.node.extend(quantize_weight_rounded(input_node))
          elif quantization_mode in (b"MIN_COMBINED", b"MIN_FIRST"):
            output_graph.node.extend(
                quantize_weight_eightbit(input_node, quantization_mode))
          else:
            raise ValueError("Unsupported quantization mode %s." %
                             quantization_mode)
        else:
          output_node = node_def_pb2.NodeDef()
          output_node.CopyFrom(input_node)
          output_graph.node.extend([output_node])
      return output_graph
function_tokens: def quantize_weights ( self , input_graph , quantization_mode ) : output_graph = graph_pb2 . GraphDef ( ) for input_node in input_graph . node : should_quantize = False if input_node . op == "Const" : dtype = dtypes . as_dtype ( input_node . attr [ "dtype" ] . type ) if dtype == dtypes . float32 : should_quantize = True if should_quantize : if quantization_mode == "weights_rounded" : output_graph . node . extend ( quantize_weight_rounded ( input_node ) ) elif quantization_mode in ( b"MIN_COMBINED" , b"MIN_FIRST" ) : output_graph . node . extend ( quantize_weight_eightbit ( input_node , quantization_mode ) ) else : raise ValueError ( "Unsupported quantization mode %s." % quantization_mode ) else : output_node = node_def_pb2 . NodeDef ( ) output_node . CopyFrom ( input_node ) output_graph . node . extend ( [ output_node ] ) return output_graph