def replace_op(self, graph: Graph, node: Node): attrs = {'name': node.id + "/ScaleShift_"} param = graph.node[node.id]['pb'].bn_param pb_model = graph.node[node.id]['model_pb'] blobs = pb_model.blobs if len(blobs) != 4: raise Error("Incorrect number of blobs in BN layer {}".format( node.id)) mean = np.array(blobs[0].data) var = np.array(blobs[1].data) betta = np.array(blobs[2].data) gamma = np.array(blobs[3].data) gamma = gamma + np.repeat(param.eps, gamma.shape) scale = 1.0 / np.sqrt(gamma) * mean shift = var - betta * scale ss = ScaleShiftOp(graph, attrs) scale_shift = ss.create_node([node.in_node(0)]) input_as_const(scale_shift, attrs, 1, 'weights', scale) input_as_const(scale_shift, attrs, 2, 'biases', shift) return [scale_shift.id]
def replace_op(self, graph: Graph, node: Node): in_node_0 = node.in_node(0) in_node_1 = node.in_node(1) in_node_2 = node.in_node(2) ss = ScaleShiftOp(graph, {'name': node.id + "/ScaleShift_", 'axis': 0}) scale_shift = ss.create_node(inputs=[in_node_1, in_node_0]) el = Add(graph, {'name': node.id + "/Add_"}) el_node = el.create_node(inputs=[scale_shift, in_node_2]) return [el_node.id]