def build(self, input_shape): super().build(input_shape) if self.depthwise_quantizer: if "flip_ratio" in self._custom_metrics: self.depthwise_flip_ratio = lq_metrics.FlipRatio( name=f"flip_ratio/{self.name}_depthwise", ) if self.pointwise_quantizer: if "flip_ratio" in self._custom_metrics: self.pointwise_flip_ratio = lq_metrics.FlipRatio( name=f"flip_ratio/{self.name}_pointwise", )
def build(self, input_shape): super().build(input_shape) if self.kernel_quantizer: if "flip_ratio" in self._custom_metrics: self.flip_ratio = lq_metrics.FlipRatio( values_shape=self.kernel.shape, name=f"flip_ratio/{self.name}" )
def test_metric(self): mcv = metrics.FlipRatio([2]) self.evaluate(tf.compat.v1.variables_initializer(mcv.variables)) self.assertAllClose(0, mcv.result()) self.assertAllClose(0, self.evaluate(mcv.total)) self.assertAllClose(0, self.evaluate(mcv.count)) self.evaluate(mcv.update_state([1, 1])) self.assertAllClose([1, 1], self.evaluate(mcv._previous_values)) self.assertAllClose(0, self.evaluate(mcv.total)) self.assertAllClose(1, self.evaluate(mcv.count)) self.assertAllClose(0, mcv.result()) self.evaluate(mcv.update_state([2, 2])) self.assertAllClose([2, 2], self.evaluate(mcv._previous_values)) self.assertAllClose(1, self.evaluate(mcv.total)) self.assertAllClose(2, self.evaluate(mcv.count)) self.assertAllClose(1, mcv.result()) self.evaluate(mcv.update_state([1, 2])) self.assertAllClose([1, 2], self.evaluate(mcv._previous_values)) self.assertAllClose(1.5, self.evaluate(mcv.total)) self.assertAllClose(3, self.evaluate(mcv.count)) self.assertAllClose(1.5 / 2, mcv.result())
def build(self, input_shape): super().build(input_shape) if self.kernel_quantizer: self.quantized_latent_weights.append(self.kernel) self.quantizers.append(self.kernel_quantizer) if "flip_ratio" in self._custom_metrics and utils.supports_metrics(): self.flip_ratio = metrics.FlipRatio( values_shape=self.kernel.shape, name=f"{self.name}/flip_ratio" )
def build(self, input_shape): super().build(input_shape) if self.depthwise_quantizer: self.quantized_latent_weights.append(self.depthwise_kernel) self.quantizers.append(self.depthwise_quantizer) if "flip_ratio" in self._custom_metrics: self.depthwise_flip_ratio = metrics.FlipRatio( values_shape=self.depthwise_kernel.shape, name=f"{self.name}/depthwise_flip_ratio", ) if self.pointwise_quantizer: self.quantized_latent_weights.append(self.pointwise_kernel) self.quantizers.append(self.pointwise_quantizer) if "flip_ratio" in self._custom_metrics: self.pointwise_flip_ratio = metrics.FlipRatio( values_shape=self.pointwise_kernel.shape, name=f"{self.name}/pointwise_flip_ratio", )
def build(self, input_shape): super().build(input_shape) if self.depthwise_quantizer: self.quantized_latent_weights.append(self.depthwise_kernel) self.quantizers.append(self.depthwise_quantizer) if "flip_ratio" in self._custom_metrics and utils.supports_metrics( ): self.depthwise_flip_ratio = lq_metrics.FlipRatio( values_shape=self.depthwise_kernel.shape, name=f"flip_ratio/{self.name}_depthwise", ) if self.pointwise_quantizer: self.quantized_latent_weights.append(self.pointwise_kernel) self.quantizers.append(self.pointwise_quantizer) if "flip_ratio" in self._custom_metrics and utils.supports_metrics( ): self.pointwise_flip_ratio = lq_metrics.FlipRatio( values_shape=self.pointwise_kernel.shape, name=f"flip_ratio/{self.name}_pointwise", )
def test_config(): mcv = metrics.FlipRatio(values_dtype="int16", name="mcv", dtype=tf.float16) assert mcv.name == "mcv" assert mcv.stateful assert mcv.dtype == tf.float16 assert mcv.values_dtype == tf.int16 mcv2 = metrics.FlipRatio.from_config(mcv.get_config()) assert mcv2.name == "mcv" assert mcv2.stateful assert mcv2.dtype == tf.float16 assert mcv2.values_dtype == tf.int16
def test_config(self): mcv = metrics.FlipRatio( values_shape=[3, 3], values_dtype="int16", name="mcv", dtype=tf.float16 ) self.assertEqual(mcv.name, "mcv") self.assertTrue(mcv.stateful) self.assertEqual(mcv.dtype, tf.float16) self.assertEqual(mcv.values_dtype, tf.int16) self.assertEqual(mcv.values_shape, [3, 3]) mcv2 = metrics.FlipRatio.from_config(mcv.get_config()) self.assertEqual(mcv2.name, "mcv") self.assertTrue(mcv2.stateful) self.assertEqual(mcv2.dtype, tf.float16) self.assertEqual(mcv2.values_dtype, tf.int16) self.assertEqual(mcv2.values_shape, [3, 3])
def test_metric_implicit_build(eager_mode): mcv = metrics.FlipRatio() mcv.update_state(np.array([1, 1])) assert all([1, 1] == mcv._previous_values.numpy()) assert 0 == mcv.total.numpy() assert 1 == mcv.count.numpy() assert 0 == mcv.result().numpy() mcv.update_state(np.array([2, 2])) assert all([2, 2] == mcv._previous_values.numpy()) assert 1 == mcv.total.numpy() assert 2 == mcv.count.numpy() assert 1 == mcv.result().numpy() mcv.update_state(np.array([1, 2])) assert all([1, 2] == mcv._previous_values.numpy()) assert 1.5 == mcv.total.numpy() assert 3 == mcv.count.numpy() assert 1.5 / 2 == mcv.result().numpy()
def test_metric_in_graph_mode(graph_mode): mcv = metrics.FlipRatio() mcv.build((2, )) new_state = tf.compat.v1.placeholder(dtype=tf.float32, shape=[2]) update_state_op = mcv.update_state(new_state) metric_value = mcv.result() with tf.compat.v1.Session() as sess: sess.run(tf.compat.v1.variables_initializer(mcv.variables)) sess.run(update_state_op, feed_dict={new_state: [1, 1]}) sess.run(update_state_op, feed_dict={new_state: [2, 2]}) sess.run(update_state_op, feed_dict={new_state: [1, 2]}) previous, total, count, result = sess.run( [mcv._previous_values, mcv.total, mcv.count, metric_value]) assert all([1, 2] == previous) assert 1.5 == total assert 3 == count assert 1.5 / 2 == result
def test_metric_in_graph_mode(self): mcv = metrics.FlipRatio([2]) new_state = tf.compat.v1.placeholder(dtype=tf.float32, shape=[2]) update_state_op = mcv.update_state(new_state) metric_value = mcv.result() with tf.compat.v1.Session() as sess: sess.run(tf.compat.v1.variables_initializer(mcv.variables)) sess.run(update_state_op, feed_dict={new_state: [1, 1]}) sess.run(update_state_op, feed_dict={new_state: [2, 2]}) sess.run(update_state_op, feed_dict={new_state: [1, 2]}) previous, total, count, result = sess.run( [mcv._previous_values, mcv.total, mcv.count, metric_value] ) self.assertAllClose([1, 2], previous) self.assertAllClose(1.5, total) self.assertAllClose(3, count) self.assertAllClose(1.5 / 2, result)
def test_metric_wrong_shape(eager_mode): mcv = metrics.FlipRatio() mcv.build((3, )) with pytest.raises((ValueError, tf.errors.InvalidArgumentError)): mcv.update_state(np.array([1, 1]))
def build(self, input_shape): if self._custom_metrics and "flip_ratio" in self._custom_metrics: self.flip_ratio = lq_metrics.FlipRatio( name=f"flip_ratio/{self.name}")