From 4f7c7892689559bb4a962c17b8204a36232c2d53 Mon Sep 17 00:00:00 2001 From: Yaman Umuroglu <maltanar@gmail.com> Date: Wed, 13 May 2020 00:50:27 +0100 Subject: [PATCH] [Transform] check attrs in ConvertBipolarMatMulToXnorPopcount --- src/finn/transformation/bipolar_to_xnor.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/finn/transformation/bipolar_to_xnor.py b/src/finn/transformation/bipolar_to_xnor.py index 4c7ebaf04..8b65cfee1 100644 --- a/src/finn/transformation/bipolar_to_xnor.py +++ b/src/finn/transformation/bipolar_to_xnor.py @@ -35,6 +35,7 @@ from finn.transformation import Transformation from finn.transformation.infer_shapes import InferShapes from finn.transformation.infer_datatypes import InferDataTypes from finn.util.basic import get_by_name +from finn.custom_op.registry import getCustomOp class ConvertBipolarMatMulToXnorPopcount(Transformation): @@ -71,10 +72,19 @@ class ConvertBipolarMatMulToXnorPopcount(Transformation): ) graph_modified = True mt = mt_chain[-1] - bin_dt_attr = "BINARY".encode("utf-8") - get_by_name(mt.attribute, "out_dtype").s = bin_dt_attr - get_by_name(mt.attribute, "out_scale").f = 1.0 - get_by_name(mt.attribute, "out_bias").f = 0 + mt_inst = getCustomOp(mt) + # ensure old scale/bias were correct for BIPOLAR + scale_ok = mt_inst.get_nodeattr("out_scale") == 2.0 + bias_ok = mt_inst.get_nodeattr("out_bias") == -1.0 + assert ( + scale_ok and bias_ok + ), """Unexpected scale/bias + attributes for BIPOLAR MultiThreshold node.""" + # start conversion, set MT output to binary + # (this is what XnorPopcountMatMul expects) + mt_inst.set_nodeattr("out_dtype", "BINARY") + mt_inst.set_nodeattr("out_scale", 1.0) + mt_inst.set_nodeattr("out_bias", 0.0) model.set_tensor_datatype(mm_input, DataType.BINARY) # change node type and domain n.op_type = "XnorPopcountMatMul" -- GitLab