def extract(node: Node):
     pb = node.pb
     assert pb, 'Protobuf layer can not be empty'
     param = pb.power_param
     attrs = {
         'output_spatial_shape': None,
         'power': param.power,
         'scale': param.scale,
         'shift': param.shift,
     }
     Power.update_node_stat(node, attrs)
     return __class__.enabled
    def replace_pattern(graph: Graph, match: [str, Node]):
        op = match['op']
        op_type = op.type

        const_port, tensor_port = get_value_in_port(op), get_tensor_in_port(op)
        if const_port is None or tensor_port is None:
            return
        value = const_port.data.get_value()
        assert value is not None
        if value.size != 1:
            return
        value = value.item(0)

        assert op_type in EltwisesWithScalarInputToPower.eltw_types
        if op_type == 'Add':
            delete_node = value == 0
            Power.update_node_stat(op, {'shift': value})
        elif op_type == 'Multiply':
            delete_node = value == 1
            Power.update_node_stat(op, {'scale': value})
        elif op_type == 'Pow':
            delete_node = value == 1
            Power.update_node_stat(op, {'power': value})

        const_port.disconnect()
        if tensor_port.idx != 0:
            tensor_port.get_connection().set_destination(op.in_port(0))
Ejemplo n.º 3
0
 def extract(node):
     # update the attributes of the node
     Power.update_node_stat(node, {'power': 1 / 2, 'op': SqrtExtractor.op})
     return __class__.enabled
Ejemplo n.º 4
0
 def extract(cls, node):
     Power.update_node_stat(node, {'scale': 0})
     return cls.enabled
Ejemplo n.º 5
0
 def extract(cls, node):
     # update the attributes of the node
     Power.update_node_stat(node, {'power': 2})
     return cls.enabled
Ejemplo n.º 6
0
 def extract(cls, node):
     Power.update_node_stat(node, {'power': -0.5})
     return cls.enabled
Ejemplo n.º 7
0
 def extract(node: Node):
     Power.update_node_stat(node)
     return __class__.enabled
Ejemplo n.º 8
0
 def extract(node):
     Power.update_node_stat(node, {'scale': 0})
     return __class__.enabled
Ejemplo n.º 9
0
 def extract(node):
     # update the attributes of the node
     Power.update_node_stat(node, {'power': 2})
     return __class__.enabled
Ejemplo n.º 10
0
 def extract(node):
     Power.update_node_stat(node, {'power': -0.5})
     return __class__.enabled
Ejemplo n.º 11
0
 def extract(node: Node):
     scale = onnx_attr(node, 'scale', 'f', default=np.array(1.0), dst_type=lambda x: np.array(x))
     Power.update_node_stat(node, {'scale': scale})
     return __class__.enabled