Ejemplo n.º 1
0
def _transform_extract_bias_add(g):
    # type:(NNEFGraph)->None

    supported_ops = {"conv", "deconv"}

    for nnefop in list(g.operations):
        if nnefop.name in supported_ops and len(nnefop.inputs) >= 3:
            bias = nnefop.inputs[2]
            nnefop.inputs = tuple(nnefop.inputs)[:2]

            if not (bias.is_constant and bias.data == [0]):
                output_with_bias = nnefop.output
                output_without_bias = NNEFTensor(graph=g,
                                                 name=None,
                                                 dtype=output_with_bias.dtype,
                                                 shape=output_with_bias.shape)
                nnefop.outputs = output_without_bias

                NNEFOperation(graph=g,
                              name="_bias_add",
                              inputs=(output_without_bias, bias),
                              outputs=output_with_bias)
Ejemplo n.º 2
0
def transform_extract_padding(g):
    # type:(NNEFGraph)->None
    forward_ops = {
        "conv", "argmax_pool", "max_pool_with_index", "max_pool", "avg_pool"
    }
    backward_ops = {
        "deconv", "conv_grad_filter", "max_pool_grad_with_index",
        "avg_pool_grad", "max_pool_grad"
    }
    supported_ops = forward_ops.union(backward_ops)

    for nnefop in list(g.operations):
        if nnefop.name in supported_ops:
            in_op_padding, separate_padding = get_paddings(nnefop)
            nnefop.attribs["padding"] = in_op_padding

            assert separate_padding is None if nnefop.name in backward_ops else True

            if separate_padding is not None:
                input = nnefop.inputs[0]
                pad_op = NNEFOperation(
                    graph=g,
                    name="box",
                    inputs=input,
                    attribs=dict(size=[1] * input.rank,
                                 border=nnefop.attribs["border"],
                                 padding=separate_padding),
                    outputs=NNEFTensor(
                        graph=g,
                        name=None,
                        shape=[
                            s + p + q
                            for s, (p, q) in zip(input.shape, separate_padding)
                        ],
                        dtype=input.dtype))

                nnefop.inputs = (pad_op.output, ) + tuple(nnefop.inputs)[1:]
Ejemplo n.º 3
0
 def create_copy_op(self, graph, input, output):
     return NNEFOperation(graph=graph,
                          name="copy",
                          inputs=input,
                          outputs=output)
Ejemplo n.º 4
0
 def create_transpose_op(self, graph, input, output, axes):
     return NNEFOperation(graph=graph,
                          name="transpose",
                          inputs=input,
                          attribs=dict(axes=axes),
                          outputs=output)