def replace_op(self, graph: Graph, node: Node): pb = node.parameters weights_size = read_binary_integer32_token(pb) weights = read_blob(pb, weights_size, dtype=np.int32) - 1 node_name = node.soft_get('name', node.id) const_attrs = { 'name': node_name + '/indexes', 'value': np.array(weights), 'shape': [weights_size], 'data_type': np.int32 } indexes_node = Const(graph).create_node(attrs=const_attrs) perm_in_1 = Const(graph, {'value': int64_array([1, 0]), 'name': node_name + '/order'}).create_node() perm1_node = Transpose(graph, {'name': node_name + '/input_permute'}).create_node([node.in_node(0)]) perm1_node.in_port(0).connect(node.in_port(0).get_source()) perm1_node.in_port(1).connect(perm_in_1.out_port(0)) gather_node = create_op_with_const_inputs(graph, Gather, {2: int64_array(0)}, {'name': node_name + '/gather'}) gather_node.in_port(0).connect(perm1_node.out_port(0)) gather_node.in_port(1).connect(indexes_node.out_port(0)) perm2_node = Transpose(graph, {'name': node_name + '/output_permute'}).create_node() perm2_node.in_port(0).connect(gather_node.out_port(0)) perm2_node.in_port(1).connect(perm_in_1.out_port(0)) return [perm2_node.id]
def read_binary_vector(file_desc: io.BufferedReader, read_token: bool = True, dtype=np.float32): if read_token: read_placeholder(file_desc) elements_number = read_binary_integer32_token(file_desc) return read_blob(file_desc, elements_number, dtype)
def replace_op(self, graph: Graph, node: Node): pb = node.parameters weights_size = read_binary_integer32_token(pb) weights = read_blob(pb, weights_size, dtype=np.int32) - 1 const_attrs = { 'name': 'indexes/{}'.format(node.id), 'value': np.array(weights), 'shape': [weights_size], 'data_type': np.int32 } indexes_node = Const(graph).create_node(attrs=const_attrs) perm_in_1 = Const( graph, { 'value': np.array([1, 0], dtype=np.int64), 'shape': [2], 'data_type': np.int64 }).create_node() axis_const = Const(graph, {'value': int64_array(0)}).create_node() perm1_node = Transpose(graph, { 'name': 'input_permute' }).create_node([node.in_node(0)]) perm1_node.in_port(0).connect(node.in_port(0).get_source()) perm1_node.in_port(1).connect(perm_in_1.out_port(0)) gather_node = Gather(graph, {}).create_node() gather_node.in_port(0).connect(perm1_node.out_port(0)) gather_node.in_port(1).connect(indexes_node.out_port(0)) gather_node.in_port(2).connect(axis_const.out_port(0)) perm2_node = Transpose(graph, {'name': 'output_permute'}).create_node() perm2_node.in_port(0).connect(gather_node.out_port(0)) perm2_node.in_port(1).connect(perm_in_1.out_port(0)) return [perm2_node.id]
def read_binary_matrix(file_desc: io.BufferedReader, read_token: bool = True): if read_token: read_placeholder(file_desc) rows_number = read_binary_integer32_token(file_desc) cols_number = read_binary_integer32_token(file_desc) # to compare: ((float *)a->buffer())[10] return read_blob(file_desc, rows_number * cols_number), (rows_number, cols_number)
def extract(node): pb = node.parameters weights_size = read_binary_integer32_token(pb) weights = read_blob(pb, weights_size, dtype=np.int32) - 1 attrs = {'infer': copy_shape_infer} embed_input(attrs, 1, 'indexes', weights) Permute.update_node_stat(node, attrs) return __class__.enabled
def extract(node): pb = node.parameters num_slice_points = read_binary_integer32_token(pb) mapping_rule = { 'axis': 1, 'slice_point': read_blob(pb, num_slice_points, np.int32), 'batch_dims': 0, 'spatial_dims': 1, 'infer': caffe_slice_infer } node.parameters.close() Slice.update_node_stat(node, mapping_rule) return __class__.enabled