Ejemplo n.º 1
0
    def test_binarization(self, quantized_layer, layer, input_shape, kwargs):
        input_data = random_input(input_shape)
        random_weight = np.random.random() - 0.5

        quant_output = testing_utils.layer_test(
            quantized_layer,
            kwargs=dict(
                **kwargs,
                kernel_quantizer="ste_sign",
                input_quantizer="ste_sign",
                kernel_initializer=tf.keras.initializers.constant(
                    random_weight),
            ),
            input_data=input_data,
        )

        fp_output = testing_utils.layer_test(
            layer,
            kwargs=dict(
                **kwargs,
                kernel_initializer=tf.keras.initializers.constant(
                    np.sign(random_weight)),
            ),
            input_data=np.sign(input_data),
        )

        self.assertAllClose(quant_output, fp_output)
Ejemplo n.º 2
0
    def test_separable_layers(self, quantized_layer, layer, input_shape):
        input_data = random_input(input_shape)
        random_d_kernel = np.random.random() - 0.5
        random_p_kernel = np.random.random() - 0.5

        quant_output = testing_utils.layer_test(
            quantized_layer,
            kwargs=dict(
                filters=3,
                kernel_size=3,
                depthwise_quantizer="ste_sign",
                pointwise_quantizer="ste_sign",
                input_quantizer="ste_sign",
                depthwise_initializer=tf.keras.initializers.constant(
                    random_d_kernel),
                pointwise_initializer=tf.keras.initializers.constant(
                    random_p_kernel),
            ),
            input_data=input_data,
        )

        fp_output = testing_utils.layer_test(
            layer,
            kwargs=dict(
                filters=3,
                kernel_size=3,
                depthwise_initializer=tf.keras.initializers.constant(
                    np.sign(random_d_kernel)),
                pointwise_initializer=tf.keras.initializers.constant(
                    np.sign(random_p_kernel)),
            ),
            input_data=np.sign(input_data),
        )

        self.assertAllClose(quant_output, fp_output)
Ejemplo n.º 3
0
    def test_depthwise_layers(self):
        input_data = random_input((2, 3, 7, 6))
        random_weight = np.random.random() - 0.5

        quant_output = testing_utils.layer_test(
            lq.layers.QuantDepthwiseConv2D,
            kwargs=dict(
                kernel_size=3,
                depthwise_quantizer="ste_sign",
                input_quantizer="ste_sign",
                depthwise_initializer=tf.keras.initializers.constant(
                    random_weight),
            ),
            input_data=input_data,
        )

        fp_output = testing_utils.layer_test(
            tf.keras.layers.DepthwiseConv2D,
            kwargs=dict(
                kernel_size=3,
                depthwise_initializer=tf.keras.initializers.constant(
                    np.sign(random_weight)),
            ),
            input_data=np.sign(input_data),
        )

        self.assertAllClose(quant_output, fp_output)
Ejemplo n.º 4
0
    def test_binarization(self, quantized_layer, layer, input_shape, kwargs,
                          keras_should_run_eagerly):
        input_data = testing_utils.random_input(input_shape)
        random_weight = np.random.random() - 0.5

        with lq.metrics.scope(["flip_ratio"]):
            quant_output = testing_utils.layer_test(
                quantized_layer,
                kwargs=dict(
                    **kwargs,
                    kernel_quantizer="ste_sign",
                    input_quantizer="ste_sign",
                    kernel_initializer=tf.keras.initializers.constant(
                        random_weight),
                ),
                input_data=input_data,
                should_run_eagerly=keras_should_run_eagerly,
            )

        fp_model = tf.keras.models.Sequential([
            layer(
                **kwargs,
                kernel_initializer=tf.keras.initializers.constant(
                    np.sign(random_weight)),
                input_shape=input_shape[1:],
            )
        ])

        np.testing.assert_allclose(quant_output,
                                   fp_model.predict(np.sign(input_data)))
Ejemplo n.º 5
0
    def test_depthwise_layers(self, keras_should_run_eagerly):
        input_data = testing_utils.random_input((2, 3, 7, 6))
        random_weight = np.random.random() - 0.5

        with lq.metrics.scope(["flip_ratio"]):
            quant_output = testing_utils.layer_test(
                lq.layers.QuantDepthwiseConv2D,
                kwargs=dict(
                    kernel_size=3,
                    depthwise_quantizer="ste_sign",
                    input_quantizer="ste_sign",
                    depthwise_initializer=tf.keras.initializers.constant(
                        random_weight),
                ),
                input_data=input_data,
                should_run_eagerly=keras_should_run_eagerly,
            )

        fp_model = tf.keras.models.Sequential([
            tf.keras.layers.DepthwiseConv2D(
                kernel_size=3,
                depthwise_initializer=tf.keras.initializers.constant(
                    np.sign(random_weight)),
                input_shape=input_data.shape[1:],
            )
        ])

        np.testing.assert_allclose(quant_output,
                                   fp_model.predict(np.sign(input_data)))
Ejemplo n.º 6
0
    def test_separable_layers(
        self, quantized_layer, layer, input_shape, keras_should_run_eagerly
    ):
        input_data = testing_utils.random_input(input_shape)
        random_d_kernel = np.random.random() - 0.5
        random_p_kernel = np.random.random() - 0.5

        with lq.context.metrics_scope(["flip_ratio"]):
            quant_output = testing_utils.layer_test(
                quantized_layer,
                kwargs=dict(
                    filters=3,
                    kernel_size=3,
                    depthwise_quantizer="ste_sign",
                    pointwise_quantizer="ste_sign",
                    input_quantizer="ste_sign",
                    depthwise_initializer=tf.keras.initializers.constant(
                        random_d_kernel
                    ),
                    pointwise_initializer=tf.keras.initializers.constant(
                        random_p_kernel
                    ),
                ),
                input_data=input_data,
                should_run_eagerly=keras_should_run_eagerly,
            )

        fp_model = tf.keras.models.Sequential(
            [
                layer(
                    filters=3,
                    kernel_size=3,
                    depthwise_initializer=tf.keras.initializers.constant(
                        np.sign(random_d_kernel)
                    ),
                    pointwise_initializer=tf.keras.initializers.constant(
                        np.sign(random_p_kernel)
                    ),
                    input_shape=input_shape[1:],
                )
            ]
        )

        np.testing.assert_allclose(quant_output, fp_model.predict(np.sign(input_data)))