def testQuantizeTraining(self):
    with session.Session() as sess:
      a = constant_op.constant(6.0, shape=[1, 1])
      b = constant_op.constant(7.0, shape=[1, 1])
      c = math_ops.matmul(a, b, name='matmul')

      self.assertEquals(c.eval(), 42.0)
      self.assertEquals(len(sess.graph_def.node), 3)

      result = pywrap_tensorflow.do_quantize_training_on_graphdef(
          sess.graph_def, 8)

      # We just want to guarantee that some rewrite happened.
      self.assertGreater(len(result.node), 3)
  def testQuantizeTraining(self):
    with session.Session() as sess:
      a = constant_op.constant(6.0, shape=[1, 1])
      b = constant_op.constant(7.0, shape=[1, 1])
      c = math_ops.matmul(a, b, name='matmul')

      self.assertEquals(c.eval(), 42.0)
      self.assertEquals(len(sess.graph_def.node), 3)

      result = pywrap_tensorflow.do_quantize_training_on_graphdef(
          sess.graph_def, 8)

      # We just want to guarantee that some rewrite happened.
      self.assertGreater(len(result.node), 3)
  def testQuantizeTraining(self):
    with session.Session() as sess:
      a = constant_op.constant(6.0, shape=[1, 1])
      b = constant_op.constant(7.0, shape=[1, 1])
      c = math_ops.matmul(a, b, name='matmul')

      self.assertEquals(len(sess.graph_def.node), 3)

      result = pywrap_tensorflow.do_quantize_training_on_graphdef(
          sess.graph_def, 8)

      # 2 convert ops are added so it should have 5 nodes now.
      self.assertEquals(len(result.node), 5)

      self.assertEquals(c.eval(), 42)
    def testQuantizeTraining(self):
        with session.Session() as sess:
            a = constant_op.constant(6.0, shape=[1, 1])
            b = constant_op.constant(7.0, shape=[1, 1])
            c = math_ops.matmul(a, b, name='matmul')

            self.assertEquals(len(sess.graph_def.node), 3)

            result = pywrap_tensorflow.do_quantize_training_on_graphdef(
                sess.graph_def, 8)

            # 2 convert ops are added so it should have 5 nodes now.
            self.assertEquals(len(result.node), 5)

            self.assertEquals(c.eval(), 42)
    def testQuantizedSaveRestore(self):
        save_path = os.path.join(self.get_temp_dir(), 'quantized_save_restore')

        g = ops.Graph()
        with session.Session(graph=g) as sess:
            a = constant_op.constant(6.0, shape=[1, 1], name='a')
            b = variables.Variable(constant_op.constant(7.0, shape=[1, 1]),
                                   name='b')
            c = math_ops.matmul(a, b, name='matmul')

            init_op = variables.global_variables_initializer()

            saver = saver_module.Saver({'b': b})

            result = pywrap_tensorflow.do_quantize_training_on_graphdef(
                sess.graph_def, 8)

        with ops.Graph().as_default() as g, session.Session(graph=g) as sess:
            _ = importer.import_graph_def(result, name='')

            # Initialize the variable.
            sess.run(g.get_operation_by_name(init_op.name))

            # Run the graph for one step to assign values to the quantization min/max
            # variables.
            sess.run(g.get_tensor_by_name(c.name))

            saver.save(sess, save_path)

        with ops.Graph().as_default() as g, session.Session(graph=g) as sess:
            _ = importer.import_graph_def(result, name='')

            # When we restore the saved variabled, the quantization variables should
            # be restored as well.
            saver.restore(sess, save_path)
            self.assertEquals(7.0, sess.run(g.get_tensor_by_name('b:0')))
            self.assertEquals(
                6.0, sess.run(g.get_tensor_by_name('a/Min/Variable:0')))
            self.assertEquals(
                6.0, sess.run(g.get_tensor_by_name('a/Max/Variable:0')))
            self.assertEquals(
                7.0, sess.run(g.get_tensor_by_name('b/read/Min/Variable:0')))
            self.assertEquals(
                7.0, sess.run(g.get_tensor_by_name('b/read/Max/Variable:0')))
  def testQuantizedSaveRestore(self):
    save_path = os.path.join(self.get_temp_dir(), 'quantized_save_restore')

    g = ops.Graph()
    with session.Session(graph=g) as sess:
      a = constant_op.constant(6.0, shape=[1, 1], name='a')
      b = variables.VariableV1(
          constant_op.constant(7.0, shape=[1, 1]), name='b')
      c = math_ops.matmul(a, b, name='matmul')

      init_op = variables.global_variables_initializer()

      saver = saver_module.Saver({'b': b})

      result = pywrap_tensorflow.do_quantize_training_on_graphdef(
          sess.graph_def, 8)

    with ops.Graph().as_default() as g, session.Session(graph=g) as sess:
      _ = importer.import_graph_def(result, name='')

      # Initialize the variable.
      self.evaluate(g.get_operation_by_name(init_op.name))

      # Run the graph for one step to assign values to the quantization min/max
      # variables.
      self.evaluate(g.get_tensor_by_name(c.name))

      saver.save(sess, save_path)

    with ops.Graph().as_default() as g, session.Session(graph=g) as sess:
      _ = importer.import_graph_def(result, name='')

      # When we restore the saved variabled, the quantization variables should
      # be restored as well.
      saver.restore(sess, save_path)
      self.assertEquals(7.0, sess.run(g.get_tensor_by_name('b:0')))
      self.assertEquals(6.0, sess.run(g.get_tensor_by_name('a/Min/Variable:0')))
      self.assertEquals(6.0, sess.run(g.get_tensor_by_name('a/Max/Variable:0')))
      self.assertEquals(7.0,
                        sess.run(g.get_tensor_by_name('b/read/Min/Variable:0')))
      self.assertEquals(7.0,
                        sess.run(g.get_tensor_by_name('b/read/Max/Variable:0')))