Ejemplo n.º 1
0
    def sample_program_configs(self, draw):
        def generate_input(*args, **kwargs):
            if kwargs["type"] == "int32":
                return np.random.randint(kwargs["low"], kwargs["high"],
                                         kwargs["shape"]).astype(np.int32)
            elif kwargs["type"] == "int64":
                return np.random.randint(kwargs["low"], kwargs["high"],
                                         kwargs["shape"]).astype(np.int64)
            elif kwargs["type"] == "float32":
                return (kwargs["high"] - kwargs["low"]) * np.random.random(
                    kwargs["shape"]).astype(np.float32) + kwargs["low"]

        input_type = draw(st.sampled_from(["float32"]))  # "int32", "int64"

        max_dim_size = 4
        x1_shape = draw(
            st.lists(st.integers(min_value=1, max_value=8),
                     min_size=4,
                     max_size=max_dim_size))
        x2_shape = draw(
            st.lists(st.integers(min_value=1, max_value=8),
                     min_size=4,
                     max_size=max_dim_size))
        x3_shape = draw(
            st.lists(st.integers(min_value=1, max_value=8),
                     min_size=4,
                     max_size=max_dim_size))
        mask_shape = draw(
            st.lists(st.integers(min_value=1, max_value=1),
                     min_size=1,
                     max_size=3))

        select_input_op = OpConfig(type="select_input",
                                   inputs={
                                       "X": ["x1_data", "x2_data", "x3_data"],
                                       "Mask": ["mask"]
                                   },
                                   outputs={"Out": ["output_data"]},
                                   attrs={})

        program_config = ProgramConfig(
            ops=[select_input_op],
            weights={},
            inputs={
                "x1_data":
                TensorConfig(data_gen=partial(generate_input,
                                              type=input_type,
                                              low=-10,
                                              high=10,
                                              shape=x1_shape)),
                "x2_data":
                TensorConfig(data_gen=partial(generate_input,
                                              type=input_type,
                                              low=-10,
                                              high=10,
                                              shape=x2_shape)),
                "x3_data":
                TensorConfig(data_gen=partial(generate_input,
                                              type=input_type,
                                              low=-10,
                                              high=10,
                                              shape=x3_shape)),
                "mask":
                TensorConfig(data_gen=partial(generate_input,
                                              type="int32",
                                              low=1,
                                              high=2,
                                              shape=mask_shape))
            },
            outputs=["output_data"])

        return program_config
Ejemplo n.º 2
0
    def sample_program_configs(self, draw):
        shape0 = draw(st.integers(min_value=1, max_value=3))
        shape1 = draw(st.integers(min_value=1, max_value=3))
        shape2 = draw(st.integers(min_value=1, max_value=3))
        input_lod_ = [[0, shape0, shape0 + shape1,
                       shape0 + shape1 + shape2]]  #must be increasing array

        N = len(input_lod_[0]) - 1  #batch
        D = draw(st.sampled_from([4, 8, 16]))  #hidden_size, output_width
        T = input_lod_[0][3]  #time_step, output_height
        in_shape = draw(st.sampled_from([[T, 4 * D]]))
        input_weight_shape = draw(st.sampled_from([[D, D * 4]]))
        input_h0_data_shape = draw(st.sampled_from([[N, D]]))
        input_c0_data_shape = draw(st.sampled_from([[N, D]]))
        use_p_ = draw(st.sampled_from([False, True]))
        is_r_ = draw(st.sampled_from([False, True]))
        gate_activation_ = draw(st.sampled_from(["sigmoid"]))
        cell_activation_ = draw(st.sampled_from(["tanh"]))
        candidate_activation_ = draw(st.sampled_from(["tanh"]))

        input_bias_shape = draw(st.sampled_from([[1, D * 4]]))
        if use_p_ == True:
            input_bias_shape = draw(st.sampled_from([[1, D * 7]]))

        def generate_input_data_in_shape(*args, **kwargs):
            return np.random.random(in_shape).astype(np.float32)

        def generate_input_data_input_weight_shape(*args, **kwargs):
            return np.random.random(input_weight_shape).astype(np.float32)

        def generate_input_data_input_h0_data_shape(*args, **kwargs):
            return np.random.random(input_h0_data_shape).astype(np.float32)

        def generate_input_data_input_c0_data_shape(*args, **kwargs):
            return np.random.random(input_c0_data_shape).astype(np.float32)

        def generate_input_data_input_bias_shape(*args, **kwargs):
            return np.random.random(input_bias_shape).astype(np.float32)

        lstm_op = OpConfig(type="lstm",
                           inputs={
                               "Input": ["input_data"],
                               "H0": ["input_h0_data"],
                               "C0": ["input_c0_data"],
                               "Weight": ["input_weight_data"],
                               "Bias": ["input_bias_data"]
                           },
                           outputs={
                               "Hidden": ["output_data_hidden"],
                               "Cell": ["output_data_cell"],
                               "BatchGate": ["BatchGate"],
                               "BatchCellPreAct": ["BatchCellPreAct"]
                           },
                           attrs={
                               "use_peepholes": use_p_,
                               "is_reverse": is_r_,
                               "gate_activation": gate_activation_,
                               "cell_activation": cell_activation_,
                               "candidate_activation": candidate_activation_,
                               "is_test": 1
                           })
        program_config = ProgramConfig(
            ops=[lstm_op],
            weights={},
            inputs={
                "input_data":
                TensorConfig(data_gen=partial(generate_input_data_in_shape),
                             lod=input_lod_),
                "input_weight_data":
                TensorConfig(
                    data_gen=partial(generate_input_data_input_weight_shape)),
                "input_h0_data":
                TensorConfig(
                    data_gen=partial(generate_input_data_input_h0_data_shape)),
                "input_c0_data":
                TensorConfig(
                    data_gen=partial(generate_input_data_input_c0_data_shape)),
                "input_bias_data":
                TensorConfig(
                    data_gen=partial(generate_input_data_input_bias_shape))
            },
            outputs={"output_data_hidden"})
        return program_config
Ejemplo n.º 3
0
def sample_program_configs(draw):
    in_shape = draw(
        st.sampled_from([[3, 3, 24], [3, 24, 24], [3, 24], [24, 24], [24]]))
    batch = draw(st.integers(min_value=1, max_value=10))
    in_shape.insert(0, batch)
    sections = draw(
        st.sampled_from([[], [1, 2], [2, 1], [10, 14], [1, 1, 1], [2, 2, 2],
                         [3, 3, 3], [3, 7, 14]]))
    input_num = draw(st.sampled_from([0, 1]))
    num = draw(st.sampled_from([0, 3]))
    input_axis = draw(st.sampled_from([0, 1, 2, 3]))
    input_type = draw(st.sampled_from(["type_float", "type_int",
                                       "type_int64"]))
    Out = draw(
        st.sampled_from([["output_var0", "output_var1"],
                         ["output_var0", "output_var1", "output_var2"]]))

    #Sections and num cannot both be equal to 0.
    assume((num != 0 & len(sections) == 0) | (num == 0 & len(sections) != 0))

    # the dimensions of input and axis match
    assume(input_axis < len(in_shape))

    #When sections and num are not both equal to 0, sections has higher priority.
    #The sum of sections should be equal to the input size.
    if len(sections) != 0:
        assume(len(Out) == len(sections))
        assume(in_shape[input_axis] % len(sections) == 0)
        sum = 0
        for num in sections:
            sum += num
        assume(sum == in_shape[input_axis])

    if num != 0:
        assume(len(Out) == num)
        assume(in_shape[input_axis] % 3 == 0)

    if input_num == 0:
        assume((len(in_shape) == 2) & (in_shape[1] == 24)
               & (sections == [10, 14]) & (len(Out) == 2))

    def generate_input(*args, **kwargs):
        if input_type == "type_float":
            return np.random.normal(0.0, 1.0, in_shape).astype(np.float32)
        elif input_type == "type_int":
            return np.random.normal(0.0, 1.0, in_shape).astype(np.int32)
        elif input_type == "type_int64":
            return np.random.normal(0.0, 1.0, in_shape).astype(np.int64)

    def generate_AxisTensor(*args, **kwargs):
        return np.ones([1]).astype(np.int32)

    def generate_SectionsTensorList1(*args, **kwargs):
        return np.array([10]).astype(np.int32)

    def generate_SectionsTensorList2(*args, **kwargs):
        return np.array([14]).astype(np.int32)

    dics_intput = [{
        "X": ["input_data"],
        "AxisTensor": ["AxisTensor"],
        "SectionsTensorList": ["SectionsTensorList1", "SectionsTensorList2"]
    }, {
        "X": ["input_data"]
    }]

    dics_weight = [{
        "AxisTensor":
        TensorConfig(data_gen=partial(generate_AxisTensor)),
        "SectionsTensorList1":
        TensorConfig(data_gen=partial(generate_SectionsTensorList1)),
        "SectionsTensorList2":
        TensorConfig(data_gen=partial(generate_SectionsTensorList2))
    }, {}]

    ops_config = OpConfig(type="split",
                          inputs=dics_intput[input_num],
                          outputs={"Out": Out},
                          attrs={
                              "sections": sections,
                              "num": num,
                              "axis": input_axis
                          })

    program_config = ProgramConfig(
        ops=[ops_config],
        weights=dics_weight[input_num],
        inputs={"input_data": TensorConfig(data_gen=partial(generate_input))},
        outputs=Out)

    return program_config
Ejemplo n.º 4
0
def sample_program_configs(draw):
    in_shape = draw(
        st.lists(st.integers(min_value=1, max_value=8), min_size=1,
                 max_size=4))

    bias = draw(st.floats(min_value=-5, max_value=5))
    bias_after_scale = draw(st.booleans())
    scale = draw(st.floats(min_value=-5, max_value=5))
    input_type = draw(st.sampled_from(["int8", "int32", "int64", "float32"]))
    has_scale_tensor = draw(st.booleans())

    def generate_input_int8(*args, **kwargs):
        return np.random.randint(1, 10, in_shape).astype(np.int8)

    def generate_input_int32(*args, **kwargs):
        return np.random.randint(-10, 10, in_shape).astype(np.int32)

    def generate_input_int64(*args, **kwargs):
        return np.random.randint(-10, 10, in_shape).astype(np.int64)

    def generate_input_float32(*args, **kwargs):
        return np.random.random(in_shape).astype(np.float32)

    input_dict = {"X": ["input_data"]}
    if has_scale_tensor:
        input_dict["ScaleTensor"] = "scale_tensor_data"

    scale_op = OpConfig(type="scale",
                        inputs=input_dict,
                        outputs={"Out": ["output_data"]},
                        attrs={
                            "bias": bias,
                            "bias_after_scale": bias_after_scale,
                            "scale": scale
                        })

    if input_type == "int8":
        if has_scale_tensor:
            program_config = ProgramConfig(
                ops=[scale_op],
                weights={},
                inputs={
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input_int8)),
                    "scale_tensor_data":
                    TensorConfig(shape=[
                        1,
                    ])
                },
                outputs=["output_data"])
        else:
            program_config = ProgramConfig(
                ops=[scale_op],
                weights={},
                inputs={
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input_int8))
                },
                outputs=["output_data"])
    elif input_type == "int32":
        if has_scale_tensor:
            program_config = ProgramConfig(
                ops=[scale_op],
                weights={},
                inputs={
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input_int32)),
                    "scale_tensor_data":
                    TensorConfig(shape=[
                        1,
                    ])
                },
                outputs=["output_data"])
        else:
            program_config = ProgramConfig(
                ops=[scale_op],
                weights={},
                inputs={
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input_int32))
                },
                outputs=["output_data"])
    elif input_type == "int64":
        if has_scale_tensor:
            program_config = ProgramConfig(
                ops=[scale_op],
                weights={},
                inputs={
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input_int64)),
                    "scale_tensor_data":
                    TensorConfig(shape=[
                        1,
                    ])
                },
                outputs=["output_data"])
        else:
            program_config = ProgramConfig(
                ops=[scale_op],
                weights={},
                inputs={
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input_int64))
                },
                outputs=["output_data"])
    elif input_type == "float32":
        if has_scale_tensor:
            program_config = ProgramConfig(
                ops=[scale_op],
                weights={},
                inputs={
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input_float32)),
                    "scale_tensor_data":
                    TensorConfig(shape=[
                        1,
                    ])
                },
                outputs=["output_data"])
        else:
            program_config = ProgramConfig(
                ops=[scale_op],
                weights={},
                inputs={
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input_float32))
                },
                outputs=["output_data"])

    return program_config
Ejemplo n.º 5
0
    def sample_program_configs(self, draw):

        in_shape0 = draw(
            st.lists(st.integers(min_value=1, max_value=128),
                     min_size=3,
                     max_size=3))
        in_shape0 = [draw(st.integers(min_value=1, max_value=4))] + in_shape0
        weight_shape0 = [
            draw(st.integers(min_value=3, max_value=64)), in_shape0[1], 1, 1
        ]
        weight_shape1 = [
            draw(st.integers(min_value=3, max_value=64)), weight_shape0[0], 1,
            1
        ]

        scale_in = draw(st.floats(min_value=0.001, max_value=0.1))
        scale_out = draw(st.floats(min_value=0.001, max_value=0.1))

        padding_algorithm0 = draw(st.sampled_from(["VALID", "SAME"]))
        strides0 = draw(st.sampled_from([[1, 1], [2, 2]]))
        paddings0 = draw(
            st.lists(st.integers(min_value=0, max_value=2),
                     min_size=2,
                     max_size=2))
        dilations0 = draw(st.sampled_from([[1, 1], [2, 2]]))

        assume(in_shape0[1] == weight_shape0[1] * 1)
        mula = in_shape0[1] * (weight_shape1[0] - weight_shape0[0])
        mulb = weight_shape0[0] * weight_shape1[0]
        assume(not (mula <= 0 or mula > mulb))

        paddings_, dilations_ = UpdatePaddingAndDilation(
            in_shape=in_shape0,
            weight_shape=weight_shape0,
            paddings=[0, 0],
            dilations=[1, 1],
            groups=1,
            padding_algorithm="VALID",
            strides=[1, 1])
        out_shape = [in_shape0[0], weight_shape0[0]]
        oh, ow = ConvOutputSize(in_shape=in_shape0,
                                weight_shape=weight_shape0,
                                dilations=dilations_,
                                paddings=paddings_,
                                strides=[1, 1])
        out_shape0 = out_shape + [oh, ow]
        assume(oh > 0 and ow > 0)

        in_shape1 = out_shape0
        paddings_, dilations_ = UpdatePaddingAndDilation(
            in_shape=in_shape1,
            weight_shape=weight_shape1,
            paddings=[0, 0],
            dilations=[1, 1],
            groups=1,
            padding_algorithm="VALID",
            strides=[1, 1])
        out_shape = [in_shape1[0], weight_shape1[0]]
        oh, ow = ConvOutputSize(in_shape=in_shape1,
                                weight_shape=weight_shape1,
                                dilations=dilations_,
                                paddings=paddings_,
                                strides=[1, 1])
        out_shape1 = out_shape + [oh, ow]
        assume(oh > 0 and ow > 0)

        conv0_op = OpConfig(type="conv2d",
                            inputs={
                                "Input": ["input_data"],
                                "Filter": ["weight_data0"]
                            },
                            outputs={"Output": ["conv_output_data"]},
                            attrs={
                                "data_format": 'nchw',
                                "dilations": dilations0,
                                "padding_algorithm": padding_algorithm0,
                                "groups": 1,
                                "Scale_in": scale_in,
                                "Scale_out": scale_out,
                                "paddings": paddings0,
                                "strides": strides0
                            })

        conv1_op = OpConfig(type="conv2d",
                            inputs={
                                "Input": ["conv_output_data"],
                                "Filter": ["weight_data1"]
                            },
                            outputs={"Output": ["output_data"]},
                            attrs={
                                "data_format": 'nchw',
                                "dilations": [1, 1],
                                "padding_algorithm": "VALID",
                                "Scale_in": scale_in,
                                "Scale_out": scale_out,
                                "groups": 1,
                                "paddings": [0, 0],
                                "strides": [1, 1]
                            })

        ops = [conv0_op, conv1_op]
        self.ops = ops
        program_config = ProgramConfig(ops=ops,
                                       weights={
                                           "weight_data0":
                                           TensorConfig(shape=weight_shape0),
                                           "weight_data1":
                                           TensorConfig(shape=weight_shape1)
                                       },
                                       inputs={
                                           "input_data":
                                           TensorConfig(shape=in_shape0),
                                       },
                                       outputs=["output_data"])

        return program_config
    def sample_program_config(self, draw):
        padding_algorithm = draw(st.sampled_from(["EXPLICIT", "SAME",
                                                  "VALID"]))
        groups = draw(st.integers(min_value=1, max_value=3))
        data_format = draw(st.sampled_from(["NCHW", "NHWC"]))
        axis = draw(st.sampled_from([1]))
        filter_channel = draw(st.integers(min_value=1, max_value=16)) * 4
        filter_size = draw(st.integers(min_value=1, max_value=4))
        in_channel = groups * filter_channel
        out_channel_factor = draw(st.integers(min_value=1, max_value=16)) * 4
        out_channel = groups * out_channel_factor
        batch_size = draw(st.integers(min_value=1, max_value=4))
        dilations = draw(
            st.lists(st.integers(min_value=1, max_value=2),
                     min_size=2,
                     max_size=2))
        paddings = draw(
            st.lists(st.integers(min_value=0, max_value=2),
                     min_size=2,
                     max_size=2))
        strides = draw(
            st.lists(st.integers(min_value=1, max_value=2),
                     min_size=2,
                     max_size=2))
        has_bias = draw(st.booleans())

        x_shape = [
            batch_size, in_channel, 64, 64
        ] if data_format == "NCHW" else [batch_size, 64, 64, in_channel]
        w_shape = [out_channel, filter_channel, filter_size, filter_size]
        scale_shape = [out_channel]
        bias_shape = [out_channel]

        def generate_input():
            return np.random.random(x_shape).astype(np.float32)

        def generate_weight():
            return np.random.random(w_shape).astype(np.float32)

        def generate_bias():
            return np.random.random(bias_shape).astype(np.float32)

        def generate_scale_bias():
            return np.random.random(bias_shape).astype(np.float32)

        conv2d_op = OpConfig("conv2d",
                             inputs={
                                 "Input": ["input_data"],
                                 "Filter": ["conv2d_weight"],
                             },
                             outputs={"Output": ["conv_output"]},
                             data_format=data_format,
                             dilations=dilations,
                             padding_algorithm=padding_algorithm,
                             groups=groups,
                             paddings=paddings,
                             strides=strides,
                             has_bias=has_bias,
                             is_test=True)
        ac_op = OpConfig("affine_channel",
                         inputs={
                             "X": ["conv_output"],
                             "Scale": ["affine_channel_scale"],
                             "Bias": ["affine_channel_bias"]
                         },
                         outputs={"Out": ["affine_channel_ouput"]},
                         data_layout=data_format)
        if has_bias == True:
            conv2d_op.inputs["Bias"] = ["conv2d_bias"]
        ops = [conv2d_op, ac_op]

        program_config = ProgramConfig(
            ops=ops,
            inputs={
                "input_data": TensorConfig(data_gen=partial(generate_input)),
            },
            weights={
                "conv2d_weight":
                TensorConfig(data_gen=partial(generate_weight)),
                "conv2d_bias":
                TensorConfig(data_gen=partial(generate_bias)),
                "affine_channel_scale":
                TensorConfig(data_gen=partial(generate_scale_bias)),
                "affine_channel_bias":
                TensorConfig(data_gen=partial(generate_scale_bias)),
            },
            outputs=["affine_channel_ouput"])
        if has_bias == True:
            program_config.weights["conv2d_bias"] = TensorConfig(
                data_gen=partial(generate_bias))
        return program_config
Ejemplo n.º 7
0
def sample_program_configs(draw):
    prior_box_type = draw(st.sampled_from(["density_prior_box"]))
    if prior_box_type == "density_prior_box":
        #image params
        batch_size = draw(st.integers(min_value=1, max_value=4))
        image_channels = 3
        image_w = draw(st.integers(min_value=40, max_value=50))
        image_h = draw(st.integers(min_value=40, max_value=50))

        density_prior_box_layer1_channels = draw(
            st.integers(
                min_value=10, max_value=40))
        density_prior_box_layer1_w = draw(
            st.integers(
                min_value=30, max_value=40))
        density_prior_box_layer1_h = draw(
            st.integers(
                min_value=30, max_value=40))

        density_prior_box_layer2_channels = draw(
            st.integers(
                min_value=10, max_value=40))
        density_prior_box_layer2_w = draw(
            st.integers(
                min_value=30, max_value=40))
        density_prior_box_layer2_h = draw(
            st.integers(
                min_value=30, max_value=40))

        def generate_image(*args, **kwargs):
            return np.random.random((batch_size, image_channels, image_h,
                                     image_w)).astype('float32')

        def generate_density_prior_box1(*args, **kwargs):
            return np.random.random(
                (batch_size, density_prior_box_layer1_channels,
                 density_prior_box_layer1_h,
                 density_prior_box_layer1_w)).astype('float32')

        def generate_density_prior_box2(*args, **kwargs):
            return np.random.random(
                (batch_size, density_prior_box_layer2_channels,
                 density_prior_box_layer2_h,
                 density_prior_box_layer2_w)).astype('float32')

        min_max_aspect_ratios_order = draw(st.sampled_from([True, False]))
        clip = draw(st.sampled_from([True, False]))
        variances = [0.1, 0.1, 0.2, 0.2]  #common value

        fixed_sizes_1 = draw(
            st.lists(
                st.floats(
                    min_value=1, max_value=80), min_size=3, max_size=3))
        densities_1 = draw(
            st.lists(
                st.integers(
                    min_value=1, max_value=10), min_size=3, max_size=3))
        fixed_ratios_1 = draw(
            st.lists(
                st.floats(
                    min_value=1, max_value=10), min_size=1, max_size=1))

        fixed_sizes_2 = draw(
            st.lists(
                st.floats(
                    min_value=1, max_value=80), min_size=2, max_size=2))
        densities_2 = draw(
            st.lists(
                st.integers(
                    min_value=1, max_value=10), min_size=2, max_size=2))
        fixed_ratios_2 = draw(
            st.lists(
                st.floats(
                    min_value=1, max_value=10), min_size=1, max_size=1))

        value = draw(st.floats(min_value=1, max_value=1))
        step_h_1 = float(image_h) / float(density_prior_box_layer1_h)
        step_w_1 = float(image_w) / float(density_prior_box_layer1_w)
        step_h_2 = float(image_h) / float(density_prior_box_layer2_h)
        step_w_2 = float(image_w) / float(density_prior_box_layer2_w)
        offset_1 = 0.5  #common value
        offset_2 = 0.5  #common value

        #reshape2 params
        reshape2_w = draw(st.integers(min_value=4, max_value=4))
        #density_prior_box InferShape
        num_priors_1 = 0
        for index in range(len(densities_1)):
            num_priors_1 += len(fixed_ratios_1) * (pow(densities_1[index], 2))
        density_prior_box_out1_shape = [
            density_prior_box_layer1_h, density_prior_box_layer1_w,
            num_priors_1, 4
        ]  #4 is a common value
        num_priors_2 = 0
        for index in range(len(densities_2)):
            num_priors_2 += len(fixed_ratios_2) * (pow(densities_2[index], 2))
        density_prior_box_out2_shape = [
            density_prior_box_layer2_h, density_prior_box_layer2_w,
            num_priors_2, 4
        ]  #4 is a common value
        density_prior_box_layer1_length = density_prior_box_layer1_h * density_prior_box_layer1_w * num_priors_1
        density_prior_box_layer2_length = density_prior_box_layer2_h * density_prior_box_layer2_w * num_priors_2
        priorbox_shape = [
            density_prior_box_layer1_length + density_prior_box_layer2_length,
            4
        ]
        #box_coder params
        code_type = draw(st.sampled_from(["decode_center_size"]))
        axis = draw(st.sampled_from([0, 1]))
        box_normalized = draw(st.booleans())
        variance = draw(st.sampled_from([[0.1, 0.2, 0.3, 0.4], []]))
        lod_data = [[1, 1, 1, 1, 1]]

        if code_type == "encode_center_size":
            targetbox_shape = draw(st.sampled_from(
                [[30, 4], [80, 4]]))  #4 is required in paddle
        else:
            num0 = 1
            num1 = 1
            num2 = 1
            if axis == 0:
                num1 = priorbox_shape[0]
                num0 = np.random.randint(1, 100)
            else:
                num0 = priorbox_shape[0]
                num1 = np.random.randint(1, 100)
            num2 = priorbox_shape[1]
            targetbox_shape = draw(st.sampled_from([[num0, num1, num2]]))

        def generate_targetbox(*args, **kwargs):
            return np.random.random(targetbox_shape).astype(np.float32)

        density_prior_box_op_1 = OpConfig(
            type="density_prior_box",
            inputs={
                "Input": ["density_prior_box_input_data_1"],
                "Image": ["density_prior_box_input_image"]
            },
            outputs={
                "Boxes": ["density_prior_box_output_boxes_1"],
                "Variances": ["density_prior_box_output_variances_1"]
            },
            attrs={
                "clip": clip,
                "value": value,
                "min_max_aspect_ratios_order": min_max_aspect_ratios_order,
                "variances": variances,
                "step_h_1": step_h_1,
                "step_w_1": step_w_1,
                "offset": offset_1,
                "fixed_sizes": fixed_sizes_1,
                "fixed_ratios": fixed_ratios_1,
                "densities": densities_1,
                "flatten_to_2d": False
            })

        density_prior_box_op_2 = OpConfig(
            type="density_prior_box",
            inputs={
                "Input": ["density_prior_box_input_data_2"],
                "Image": ["density_prior_box_input_image"]
            },
            outputs={
                "Boxes": ["density_prior_box_output_boxes_2"],
                "Variances": ["density_prior_box_output_variances_2"]
            },
            attrs={
                "clip": clip,
                "value": value,
                "min_max_aspect_ratios_order": min_max_aspect_ratios_order,
                "variances": variances,
                "step_h_2": step_h_2,
                "step_w_2": step_w_2,
                "offset": offset_2,
                "fixed_sizes": fixed_sizes_2,
                "fixed_ratios": fixed_ratios_2,
                "densities": densities_2,
                "flatten_to_2d": False
            })

        reshape2_op_1 = OpConfig(
            type="reshape2",
            inputs={"X": ["density_prior_box_output_boxes_1"]},
            outputs={
                "Out": ["reshape2_out_1"],
                "XShape": ["reshape2_xshape_1"]
            },
            attrs={"shape": [-1, reshape2_w]})

        reshape2_op_2 = OpConfig(
            type="reshape2",
            inputs={"X": ["density_prior_box_output_boxes_2"]},
            outputs={
                "Out": ["reshape2_out_2"],
                "XShape": ["reshape2_xshape_2"]
            },
            attrs={"shape": [-1, reshape2_w]})

        reshape2_op_3 = OpConfig(
            type="reshape2",
            inputs={"X": ["density_prior_box_output_variances_1"]},
            outputs={
                "Out": ["reshape2_out_3"],
                "XShape": ["reshape2_xshape_3"]
            },
            attrs={"shape": [-1, reshape2_w]})

        reshape2_op_4 = OpConfig(
            type="reshape2",
            inputs={"X": ["density_prior_box_output_variances_2"]},
            outputs={
                "Out": ["reshape2_out_4"],
                "XShape": ["reshape2_xshape_4"]
            },
            attrs={"shape": [-1, reshape2_w]})

        axis_1 = draw(st.sampled_from([0]))
        axis_2 = draw(st.sampled_from([0]))

        concat_op_1 = OpConfig(
            type="concat",
            inputs={"X": ["reshape2_out_1", "reshape2_out_2"]},
            outputs={"Out": ["concat_out_1"]},
            attrs={"axis": axis_1})

        concat_op_2 = OpConfig(
            type="concat",
            inputs={"X": ["reshape2_out_3", "reshape2_out_4"]},
            outputs={"Out": ["concat_out_2"]},
            attrs={"axis": axis_2})

        box_coder_op = OpConfig(
            type="box_coder",
            inputs={
                "PriorBox": ["concat_out_1"],
                "TargetBox": ["targetbox_data"],
                "PriorBoxVar": ["concat_out_2"]
            },
            outputs={"OutputBox": ["outputbox_data"]},
            attrs={
                "code_type": code_type,
                "box_normalized": box_normalized,
                "axis": axis,
                "variance": []
            })

        ops = [
            density_prior_box_op_1, density_prior_box_op_2, reshape2_op_1,
            reshape2_op_2, reshape2_op_3, reshape2_op_4, concat_op_1,
            concat_op_2, box_coder_op
        ]
        program_config = ProgramConfig(
            ops=ops,
            weights={},
            inputs={
                "density_prior_box_input_data_1":
                TensorConfig(data_gen=partial(generate_density_prior_box1)),
                "density_prior_box_input_data_2":
                TensorConfig(data_gen=partial(generate_density_prior_box2)),
                "density_prior_box_input_image":
                TensorConfig(data_gen=partial(generate_image)),
                "targetbox_data": TensorConfig(
                    data_gen=partial(generate_targetbox), lod=lod_data),
            },
            outputs=["outputbox_data"])
        return program_config
    else:
        #image params
        batch_size = draw(st.integers(min_value=1, max_value=4))
        image_channels = 3
        image_w = draw(st.integers(min_value=40, max_value=50))
        image_h = draw(st.integers(min_value=40, max_value=50))

        density_prior_box_layer1_channels = draw(
            st.integers(
                min_value=30, max_value=40))
        density_prior_box_layer1_w = draw(
            st.integers(
                min_value=30, max_value=80))
        density_prior_box_layer1_h = draw(
            st.integers(
                min_value=30, max_value=80))

        density_prior_box_layer2_channels = draw(
            st.integers(
                min_value=30, max_value=40))
        density_prior_box_layer2_w = draw(
            st.integers(
                min_value=30, max_value=80))
        density_prior_box_layer2_h = draw(
            st.integers(
                min_value=30, max_value=80))

        def generate_image(*args, **kwargs):
            return np.random.random((batch_size, image_channels, image_w,
                                     image_h)).astype('float32')

        def generate_density_prior_box1(*args, **kwargs):
            return np.random.random(
                (batch_size, density_prior_box_layer1_channels,
                 density_prior_box_layer1_w,
                 density_prior_box_layer1_h)).astype('float32')

        def generate_density_prior_box2(*args, **kwargs):
            return np.random.random(
                (batch_size, density_prior_box_layer2_channels,
                 density_prior_box_layer2_w,
                 density_prior_box_layer2_h)).astype('float32')

        min_sizes = [2.0, 4.0]
        max_sizes = [5.0, 10.0]
        aspect_ratios = [2.0, 3.0]
        variances = [0.1, 0.1, 0.2, 0.2]

        flip = draw(st.sampled_from([True, False]))
        clip = draw(st.sampled_from([True, False]))
        min_max_aspect_ratios_order = draw(st.sampled_from([True, False]))

        value = draw(st.floats(min_value=1, max_value=1))
        step_h_1 = float(image_h) / float(density_prior_box_layer1_h)
        step_w_1 = float(image_w) / float(density_prior_box_layer1_w)
        step_h_2 = float(image_h) / float(density_prior_box_layer2_h)
        step_w_2 = float(image_w) / float(density_prior_box_layer2_w)
        offset_1 = 0.5  #common value
        offset_2 = 0.5  #common value

        #reshape2 params
        reshape2_w = draw(st.integers(min_value=4, max_value=4))
        #density_prior_box InferShape
        output_aspect_ratior = []
        prior_box_expand_aspect_ratios(
            aspect_ratios, flip, output_aspect_ratior)  #compute output size
        num_priors_1 = len(output_aspect_ratior) * len(
            min_sizes)  #3 need compute
        num_priors_1 += len(max_sizes)
        density_prior_box_out1_shape = [
            density_prior_box_layer1_h, density_prior_box_layer1_w,
            num_priors_1, 4
        ]  #4 is a common value
        num_priors_2 = len(output_aspect_ratior) * len(min_sizes)
        num_priors_2 += len(max_sizes)
        density_prior_box_out2_shape = [
            density_prior_box_layer2_h, density_prior_box_layer2_w,
            num_priors_2, 4
        ]  #4 is a common value
        density_prior_box_layer1_length = density_prior_box_layer1_h * density_prior_box_layer1_w * num_priors_1
        density_prior_box_layer2_length = density_prior_box_layer2_h * density_prior_box_layer2_w * num_priors_2
        priorbox_shape = [
            density_prior_box_layer1_length + density_prior_box_layer2_length,
            4
        ]
        #box_coder params
        code_type = draw(st.sampled_from(["decode_center_size"]))
        axis = draw(st.sampled_from([0, 1]))
        box_normalized = draw(st.booleans())
        variance = draw(st.sampled_from([[0.1, 0.2, 0.3, 0.4], []]))
        lod_data = [[1, 1, 1, 1, 1]]

        if code_type == "encode_center_size":
            targetbox_shape = draw(st.sampled_from([[30, 4], [80, 4]]))
        else:
            num0 = 1
            num1 = 1
            num2 = 1
            if axis == 0:
                num1 = priorbox_shape[0]
                num0 = np.random.randint(1, 100)
            else:
                num0 = priorbox_shape[0]
                num1 = np.random.randint(1, 100)
            num2 = priorbox_shape[1]
            targetbox_shape = draw(st.sampled_from([[num0, num1, num2]]))
            print(targetbox_shape)

        def generate_targetbox(*args, **kwargs):
            return np.random.random(targetbox_shape).astype(np.float32)

        density_prior_box_op_1 = OpConfig(
            type="prior_box",
            inputs={
                "Input": ["density_prior_box_input_data_1"],
                "Image": ["density_prior_box_input_image"]
            },
            outputs={
                "Boxes": ["density_prior_box_output_boxes_1"],
                "Variances": ["density_prior_box_output_variances_1"]
            },
            attrs={
                "flip": flip,
                "clip": clip,
                "value": value,
                "min_max_aspect_ratios_order": min_max_aspect_ratios_order,
                "variances": variances,
                "step_h": step_h_1,
                "step_w": step_w_1,
                "offset": offset_1,
                "min_sizes": min_sizes,
                "max_sizes": max_sizes,
                "aspect_ratios": aspect_ratios,
                "flatten_to_2d": False
            })

        density_prior_box_op_2 = OpConfig(
            type="prior_box",
            inputs={
                "Input": ["density_prior_box_input_data_2"],
                "Image": ["density_prior_box_input_image"]
            },
            outputs={
                "Boxes": ["density_prior_box_output_boxes_2"],
                "Variances": ["density_prior_box_output_variances_2"]
            },
            attrs={
                "flip": flip,
                "clip": clip,
                "value": value,
                "min_max_aspect_ratios_order": min_max_aspect_ratios_order,
                "variances": variances,
                "step_h": step_h_2,
                "step_w": step_w_2,
                "offset": offset_2,
                "min_sizes": min_sizes,
                "max_sizes": max_sizes,
                "aspect_ratios": aspect_ratios,
                "flatten_to_2d": False
            })

        reshape2_op_1 = OpConfig(
            type="reshape2",
            inputs={"X": ["density_prior_box_output_boxes_1"]},
            outputs={
                "Out": ["reshape2_out_1"],
                "XShape": ["reshape2_xshape_1"]
            },
            attrs={"shape": [-1, reshape2_w]})

        reshape2_op_2 = OpConfig(
            type="reshape2",
            inputs={"X": ["density_prior_box_output_boxes_2"]},
            outputs={
                "Out": ["reshape2_out_2"],
                "XShape": ["reshape2_xshape_2"]
            },
            attrs={"shape": [-1, reshape2_w]})

        reshape2_op_3 = OpConfig(
            type="reshape2",
            inputs={"X": ["density_prior_box_output_variances_1"]},
            outputs={
                "Out": ["reshape2_out_3"],
                "XShape": ["reshape2_xshape_3"]
            },
            attrs={"shape": [-1, reshape2_w]})

        reshape2_op_4 = OpConfig(
            type="reshape2",
            inputs={"X": ["density_prior_box_output_variances_2"]},
            outputs={
                "Out": ["reshape2_out_4"],
                "XShape": ["reshape2_xshape_4"]
            },
            attrs={"shape": [-1, reshape2_w]})

        axis_1 = draw(st.sampled_from([0]))
        axis_2 = draw(st.sampled_from([0]))

        concat_op_1 = OpConfig(
            type="concat",
            inputs={"X": ["reshape2_out_1", "reshape2_out_2"]},
            outputs={"Out": ["concat_out_1"]},
            attrs={"axis": axis_1})

        concat_op_2 = OpConfig(
            type="concat",
            inputs={"X": ["reshape2_out_3", "reshape2_out_4"]},
            outputs={"Out": ["concat_out_2"]},
            attrs={"axis": axis_2})

        box_coder_op = OpConfig(
            type="box_coder",
            inputs={
                "PriorBox": ["concat_out_1"],
                "TargetBox": ["targetbox_data"],
                "PriorBoxVar": ["concat_out_2"]
            },
            outputs={"OutputBox": ["outputbox_data"]},
            attrs={
                "code_type": code_type,
                "box_normalized": box_normalized,
                "axis": axis,
                "variance": []
            })

        ops = [
            density_prior_box_op_1, density_prior_box_op_2, reshape2_op_1,
            reshape2_op_2, reshape2_op_3, reshape2_op_4, concat_op_1,
            concat_op_2, box_coder_op
        ]
        program_config = ProgramConfig(
            ops=ops,
            weights={},
            inputs={
                "density_prior_box_input_data_1":
                TensorConfig(data_gen=partial(generate_density_prior_box1)),
                "density_prior_box_input_data_2":
                TensorConfig(data_gen=partial(generate_density_prior_box2)),
                "density_prior_box_input_image":
                TensorConfig(data_gen=partial(generate_image)),
                "targetbox_data": TensorConfig(
                    data_gen=partial(generate_targetbox), lod=lod_data)
            },
            outputs=["outputbox_data"])
        return program_config
Ejemplo n.º 8
0
    def sample_program_configs(self, draw):

        #conv param or conv_transpose param
        in_shape = draw(
            st.lists(st.integers(min_value=2, max_value=128),
                     min_size=3,
                     max_size=3))
        in_shape = [draw(st.integers(min_value=1, max_value=4))] + in_shape
        weight_shape = draw(
            st.lists(st.integers(min_value=1, max_value=8),
                     min_size=2,
                     max_size=2))
        weight_shape = weight_shape + [1, 1]
        paddings = draw(
            st.lists(st.integers(min_value=0, max_value=2),
                     min_size=2,
                     max_size=2))
        dilations = draw(st.sampled_from([[1, 1], [2, 2]]))
        groups = draw(st.sampled_from([1, 2, in_shape[1]]))
        padding_algorithm = draw(st.sampled_from(["VALID", "SAME"]))
        strides = draw(st.sampled_from([[1, 1], [2, 2]]))
        output_padding = draw(
            st.sampled_from([[],
                             draw(
                                 st.lists(st.integers(min_value=0,
                                                      max_value=16),
                                          min_size=2,
                                          max_size=2))]))
        scale_in = draw(st.floats(min_value=0.001, max_value=0.1))
        scale_out = draw(st.floats(min_value=0.001, max_value=0.1))

        conv_out_shape = []
        paddings_, dilations_ = UpdatePaddingAndDilation(
            in_shape, weight_shape, paddings, dilations, groups,
            padding_algorithm, strides)

        self.depthwise = in_shape[1] == weight_shape[1] and in_shape[
            1] == groups
        assume(in_shape[1] == weight_shape[1] * groups)
        assume(weight_shape[0] % groups == 0)
        conv_out_shape = [in_shape[0], weight_shape[0]]
        oh, ow = ConvOutputSize(in_shape, weight_shape, dilations_, paddings_,
                                strides)
        conv_out_shape = conv_out_shape + [oh, ow]
        assume(oh > 0 and ow > 0)

        conv_type = "conv2d"
        conv_attrs = {
            "data_format": 'nchw',
            "dilations": dilations,
            "padding_algorithm": padding_algorithm,
            "groups": groups,
            "paddings": paddings,
            "strides": strides,
            "Scale_in": scale_in,
            "Scale_out": scale_out
        }

        conv_op = OpConfig(type=conv_type,
                           inputs={
                               "Input": ["input_data"],
                               "Filter": ["filter_data"]
                           },
                           outputs={"Output": ["conv_output_data"]},
                           attrs=conv_attrs)

        elementwise_add_op = OpConfig(type="elementwise_add",
                                      inputs={
                                          "X": ["add_input_data"],
                                          "Y": ["conv_output_data"]
                                      },
                                      outputs={"Out": ["output_data"]},
                                      attrs={"axis": -1})

        ops = [conv_op, elementwise_add_op]
        self.ops = ops
        program_config = ProgramConfig(
            ops=ops,
            weights={"filter_data": TensorConfig(shape=weight_shape)},
            inputs={
                "input_data": TensorConfig(shape=in_shape),
                "add_input_data": TensorConfig(shape=conv_out_shape)
            },
            outputs=["output_data"])
        return program_config
Ejemplo n.º 9
0
def sample_program_configs(draw):
    min_sizes = [2.0, 4.0]
    max_sizes = [5.0, 10.0]
    aspect_ratios = [2.0, 3.0]
    variances = [0.1, 0.1, 0.2, 0.2]
    flip = True
    clip = True
    layer_w = draw(st.integers(min_value=30, max_value=40))
    layer_h = draw(st.integers(min_value=30, max_value=40))
    image_w = draw(st.integers(min_value=40, max_value=50))
    image_h = draw(st.integers(min_value=40, max_value=50))

    step_w = float(image_w) / float(layer_w)
    step_h = float(image_h) / float(layer_h)

    input_channels = 2
    image_channels = 3
    batch_size = 10

    offset = 0.5
    min_max_aspect_ratios_order = draw(st.sampled_from([True, False]))

    def generate_input(*args, **kwargs):
        return np.random.random(
            (batch_size, image_channels, image_w, image_h)).astype('float32')

    def generate_image(*args, **kwargs):
        return np.random.random(
            (batch_size, input_channels, layer_w, layer_h)).astype('float32')

    ops_config = OpConfig(
        type="prior_box",
        inputs={
            "Input": ["intput_data"],
            "Image": ["intput_image"]
        },
        outputs={
            "Boxes": ["output_boxes"],
            "Variances": ["variances"]
        },
        attrs={
            "min_sizes": min_sizes,
            "max_sizes": max_sizes,
            "aspect_ratios": aspect_ratios,
            "variances": variances,
            "flip": flip,
            "clip": clip,
            "step_w": step_w,
            "step_h": step_h,
            "offset": offset,
            "min_max_aspect_ratios_order": min_max_aspect_ratios_order,
        },
    )

    program_config = ProgramConfig(
        ops=[ops_config],
        weights={},
        inputs={
            "intput_data": TensorConfig(data_gen=partial(generate_input)),
            "intput_image": TensorConfig(data_gen=partial(generate_image)),
        },
        outputs=["output_boxes", "variances"])

    return program_config
Ejemplo n.º 10
0
    def sample_program_configs(self, draw):
        in_shape = draw(
            st.lists(st.integers(min_value=6, max_value=64),
                     min_size=4,
                     max_size=4))
        idx_shape = draw(
            st.lists(st.integers(min_value=1, max_value=5),
                     min_size=1,
                     max_size=1))
        dim_data = draw(st.sampled_from([1, 2, 3]))
        type_str = draw(
            st.sampled_from(
                ["type_float", "type_int", "type_short", "type_char"]))

        def generate_input1(*args, **kwargs):
            return np.random.random(in_shape).astype(np.float32)

        def generate_input2(*args, **kwargs):
            return np.random.randint(low=1, high=100,
                                     size=in_shape).astype(np.int32)

        def generate_input3(*args, **kwargs):
            return np.random.randint(low=1, high=100,
                                     size=in_shape).astype(np.int16)

        def generate_input4(*args, **kwargs):
            return np.random.randint(low=1, high=100,
                                     size=in_shape).astype(np.int8)

        def generate_idx(*args, **kwargs):
            return np.random.randint(low=1, high=5,
                                     size=idx_shape).astype(np.int64)

        build_ops = OpConfig(type="index_select",
                             inputs={
                                 "X": ["input_data"],
                                 "Index": ["idx"]
                             },
                             outputs={
                                 "Out": ["output_data"],
                             },
                             attrs={
                                 "dim": dim_data,
                             })
        tmp_input = {}
        if type_str == "type_float":
            tmp_input = {
                "input_data": TensorConfig(data_gen=partial(generate_input1)),
                "idx": TensorConfig(data_gen=partial(generate_idx)),
            }
        elif type_str == "type_int":
            build_ops.outputs_dtype = {"output_data": np.int32}
            tmp_input = {
                "input_data": TensorConfig(data_gen=partial(generate_input2)),
                "idx": TensorConfig(data_gen=partial(generate_idx)),
            }
        elif type_str == "type_short":
            build_ops.outputs_dtype = {"output_data": np.int16}
            tmp_input = {
                "input_data": TensorConfig(data_gen=partial(generate_input3)),
                "idx": TensorConfig(data_gen=partial(generate_idx)),
            }
        elif type_str == "type_char":
            build_ops.outputs_dtype = {"output_data": np.int8}
            tmp_input = {
                "input_data": TensorConfig(data_gen=partial(generate_input4)),
                "idx": TensorConfig(data_gen=partial(generate_idx)),
            }
        program_config = ProgramConfig(ops=[build_ops],
                                       weights={},
                                       inputs=tmp_input,
                                       outputs=["output_data"])
        return program_config
Ejemplo n.º 11
0
    def sample_program_configs(self, draw):
        def judge_update_shape(ref_shape, index_shape):
            update_shape = []
            for i in range(len(index_shape) - 1):
                update_shape.append(index_shape[i])
            for i in range(index_shape[-1], len(ref_shape), 1):
                update_shape.append(ref_shape[i])
            return update_shape

        input_type = draw(st.sampled_from(["int32", "int64", "float32"]))
        index_type = draw(st.sampled_from(["int32", "int64"]))
        out_dtype_dict = {
            "int32": np.int32,
            "int64": np.int64,
            "float32": np.float32
        }
        in_shape = draw(
            st.lists(st.integers(min_value=2, max_value=8),
                     min_size=3,
                     max_size=7))

        index_np = np.vstack([
            np.random.randint(0, s, size=100) for s in in_shape
        ]).T.astype(index_type)
        update_shape = judge_update_shape(in_shape, index_np.shape)
        assume(index_np.shape[-1] <= len(in_shape))

        def generate_data(*args, **kwargs):
            if kwargs["type"] == "int32":
                return np.random.randint(kwargs["low"], kwargs["high"],
                                         kwargs["shape"]).astype(np.int32)
            elif kwargs["type"] == "int64":
                return np.random.randint(kwargs["low"], kwargs["high"],
                                         kwargs["shape"]).astype(np.int64)
            elif kwargs["type"] == "float32":
                return kwargs["high"] * np.random.random(
                    kwargs["shape"]).astype(np.float32) + kwargs["low"]

        def generate_index_data(*args, **kwargs):
            return index_np

        scatter_nd_add_op = OpConfig(
            type="scatter_nd_add",
            inputs={
                "X": ["input_data"],
                "Index": ["index"],
                "Updates": ["updates"]
            },
            outputs={"Out": ["output_data"]},
            outputs_dtype={"output_data": out_dtype_dict[input_type]},
            attrs={})

        program_config = ProgramConfig(
            ops=[scatter_nd_add_op],
            weights={},
            inputs={
                "input_data":
                TensorConfig(data_gen=partial(generate_data,
                                              type=input_type,
                                              low=-10,
                                              high=10,
                                              shape=in_shape)),
                "index":
                TensorConfig(data_gen=partial(generate_index_data)),
                "updates":
                TensorConfig(data_gen=partial(generate_data,
                                              type=input_type,
                                              low=-10,
                                              high=10,
                                              shape=update_shape)),
            },
            outputs=["output_data"])

        return program_config
Ejemplo n.º 12
0
    def sample_program_configs(self, draw):
        def generate_input(*args, **kwargs):
            if kwargs["type"] == "int32":
                return np.random.randint(kwargs["low"], kwargs["high"],
                                         kwargs["shape"]).astype(np.int32)
            elif kwargs["type"] == "int64":
                return np.random.randint(kwargs["low"], kwargs["high"],
                                         kwargs["shape"]).astype(np.int64)
            elif kwargs["type"] == "float32":
                return (kwargs["high"] - kwargs["low"]) * np.random.random(
                    kwargs["shape"]).astype(np.float32) + kwargs["low"]

        def generate_lod(seq_num, max_len):
            seq_offset = []
            sum = 0
            seq_offset.append(sum)
            for i in range(seq_num):
                sum += np.random.randint(0, max_len) + 1
                seq_offset.append(sum)
            return [seq_offset]

        input_type = draw(st.sampled_from(["float32", "int32", "int64"]))
        max_len = draw(st.integers(min_value=1, max_value=5))
        ref_level_data = draw(st.integers(min_value=-1, max_value=4))
        seq_num = draw(st.integers(min_value=1, max_value=7))
        in_shape = draw(
            st.lists(st.integers(min_value=1, max_value=10),
                     min_size=2,
                     max_size=8))
        lod_x = generate_lod(seq_num, max_len)
        lod_y = generate_lod(seq_num, max_len)
        in_shape[0] = lod_x[0][-1]

        x_lod_len = lod_x[0][-1]
        y_lod_len = lod_y[0][-1]
        assume(lod_x[0][0] == lod_y[0][0])
        # x lod level is <= 1; y lod level is > 0
        assume((np.array(lod_x)).shape[0] <= 1)
        assume((np.array(lod_y)).shape[0] > 0)
        assume(ref_level_data == -1
               or (ref_level_data >= 0 and ref_level_data <
                   (np.array(lod_y)).shape[0]))
        assume((np.array(lod_x)).shape[0] == 1
               and x_lod_len == (len(lod_y[ref_level_data])))

        # ! The input data type defined in Paddle can be float32, int32, int64.
        # There is only Host implementention which only support float32.
        assume(input_type == "float32")

        sequence_expand_op = OpConfig(type="sequence_expand",
                                      inputs={
                                          "X": ["x_data"],
                                          "Y": ["y_data"]
                                      },
                                      outputs={"Out": ["output_data"]},
                                      attrs={"ref_level": ref_level_data})

        program_config = ProgramConfig(
            ops=[sequence_expand_op],
            weights={},
            inputs={
                "x_data":
                TensorConfig(data_gen=partial(generate_input,
                                              type=input_type,
                                              low=-10,
                                              high=10,
                                              shape=in_shape),
                             lod=lod_x),
                "y_data":
                TensorConfig(data_gen=partial(generate_input,
                                              type=input_type,
                                              low=-10,
                                              high=10,
                                              shape=in_shape),
                             lod=lod_y)
            },
            outputs=["output_data"])

        return program_config
Ejemplo n.º 13
0
    def sample_program_configs(self, draw):
        has_relu = draw(st.sampled_from([True, False]))
        mul_x_in_shape = draw(
            st.lists(
                st.integers(
                    min_value=5, max_value=10), min_size=2, max_size=5))
        x_num_col_dims_data = draw(
            st.integers(
                min_value=1, max_value=len(mul_x_in_shape) - 1))
        x0 = 1
        x1 = 1
        for i in range(0, x_num_col_dims_data):
            x0 = x0 * mul_x_in_shape[i]
        for i in range(x_num_col_dims_data, len(mul_x_in_shape)):
            x1 = x1 * mul_x_in_shape[i]

        #lite not check fuse condition : bias[0]=1 bias[1]=weight[1] 
        add_x_data_shape = draw(
            st.sampled_from([[
                1, draw(st.integers(
                    min_value=5, max_value=10))
            ], [draw(st.integers(
                min_value=5, max_value=10))]]))

        y_dims = 2
        y_num_col_dims = 1
        mul_out_shape = x_num_col_dims_data + y_dims - y_num_col_dims

        axis = mul_out_shape - len(add_x_data_shape)

        y1 = add_x_data_shape[0]
        if len(add_x_data_shape) == 2:
            y1 = add_x_data_shape[1]

        mul_op = OpConfig(
            type="mul",
            inputs={"X": ["mul_x_data"],
                    "Y": ["mul_y_data"]},
            outputs={"Out": ["mul_output_data"]},
            attrs={
                "x_num_col_dims": x_num_col_dims_data,
                "y_num_col_dims": 1
            })

        elementwise_add_op = OpConfig(
            type="elementwise_add",
            inputs={"X": ["mul_output_data"],
                    "Y": ["add_x_data"]},
            outputs={"Out": ["elementwise_add_output_data"]},
            attrs={"axis": axis})

        active_op = OpConfig(
            type="relu",
            inputs={"X": ["elementwise_add_output_data"]},
            outputs={"Out": ["output_data"]},
            attrs={})

        ops = [mul_op, elementwise_add_op]
        output_data = "elementwise_add_output_data"
        if has_relu:
            ops.append(active_op)
            output_data = "output_data"
        program_config = ProgramConfig(
            ops=ops,
            weights={"add_x_data": TensorConfig(shape=add_x_data_shape)},
            inputs={
                "mul_x_data": TensorConfig(shape=mul_x_in_shape),
                "mul_y_data": TensorConfig(shape=[x1, y1])
            },
            outputs=[output_data])
        return program_config
Ejemplo n.º 14
0
    def sample_program_configs(self, draw):
        if self.get_target() == "OpenCL":
            in_shape = draw(
                st.lists(st.integers(min_value=1, max_value=8),
                         min_size=4,
                         max_size=4))
        else:
            in_shape = draw(
                st.lists(st.integers(min_value=1, max_value=8),
                         min_size=2,
                         max_size=4))
        expand_shape = draw(
            st.lists(st.integers(min_value=1, max_value=4),
                     min_size=len(in_shape),
                     max_size=len(in_shape)))
        with_tensor = draw(st.sampled_from([True, False]))

        def generate_shape(*args, **kwargs):
            return np.array(expand_shape).astype(np.int32)

        def generate_input(*args, **kwargs):
            if kwargs["type"] == "int32":
                return np.random.randint(kwargs["low"], kwargs["high"],
                                         kwargs["shape"]).astype(np.int32)
            elif kwargs["type"] == "int64":
                return np.random.randint(kwargs["low"], kwargs["high"],
                                         kwargs["shape"]).astype(np.int64)
            elif kwargs["type"] == "float32":
                return (kwargs["high"] - kwargs["low"]) * np.random.random(
                    kwargs["shape"]).astype(np.float32) + kwargs["low"]

        input_type = draw(st.sampled_from(["float32", "int32", "int64"]))

        def gnerate_inputs(with_tensor):
            inputs1 = {}
            inputs2 = {}
            if (with_tensor):
                inputs1 = {"X": ["input_data"], "ExpandTimes": ["expand_data"]}
                inputs2 = {
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input,
                                                  type=input_type,
                                                  low=-10,
                                                  high=10,
                                                  shape=in_shape)),
                    "expand_data":
                    TensorConfig(data_gen=partial(generate_shape))
                }
            else:
                inputs1 = {"X": ["input_data"]}
                inputs2 = {
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input,
                                                  type=input_type,
                                                  low=-10,
                                                  high=10,
                                                  shape=in_shape))
                }
            return [inputs1, inputs2]

        attr_shape = draw(
            st.lists(st.integers(min_value=1, max_value=8),
                     min_size=len(in_shape),
                     max_size=len(in_shape)))
        if self.get_target() == "OpenCL":
            with_tensor = False
            attr_shape[1] = 1

        inputs = gnerate_inputs(with_tensor)
        expand_op = OpConfig(type="expand",
                             inputs=inputs[0],
                             outputs={"Out": ["output_data"]},
                             attrs={"expand_times": attr_shape})

        program_config = ProgramConfig(ops=[expand_op],
                                       weights={},
                                       inputs=inputs[1],
                                       outputs=["output_data"])
        return program_config
Ejemplo n.º 15
0
    def sample_program_configs(self, draw):
        target_str = self.get_target()
        if target_str == "OpenCL":
            shape0 = draw(st.integers(min_value=1, max_value=4)) * 4
            shape1 = draw(st.integers(min_value=1, max_value=4)) * 4
            shape2 = draw(st.integers(min_value=1, max_value=4)) * 4
            batch0 = draw(st.integers(min_value=1, max_value=4)) * 4
            batch1 = draw(st.integers(min_value=1, max_value=4)) * 4
        if target_str == "ARM" or target_str == "X86":
            shape0 = draw(st.integers(min_value=1, max_value=64))
            shape1 = draw(st.integers(min_value=1, max_value=64))
            shape2 = draw(st.integers(min_value=1, max_value=64))
            batch0 = draw(st.integers(min_value=1, max_value=64))
            batch1 = draw(st.integers(min_value=1, max_value=64))
        transpose_X = draw(st.booleans())
        transpose_Y = draw(st.booleans())
        if ((not transpose_X) and (not transpose_Y)):
            X_shape = [batch0, 1, shape0, shape1]
            Y_shape = [batch0, shape1, shape2]
        if ((transpose_X) and (not transpose_Y)):
            X_shape = [batch1, 1, shape1, shape0]
            Y_shape = [batch1, 1, shape1, shape2]
        if ((not transpose_X) and (transpose_Y)):
            X_shape = [batch0, shape0, shape1]
            Y_shape = [batch0, shape2, shape1]
        if ((transpose_X) and (transpose_Y)):
            X_shape = [batch0, shape1, shape0]
            Y_shape = [batch0, shape2, shape1]
        alpha = draw(st.sampled_from([0.1, 1.0, 1.1, -1.5]))
        fused_reshape_X = draw(st.sampled_from([[]]))
        fused_reshape_Y = draw(st.sampled_from([[]]))
        fused_transpose_X = draw(st.sampled_from([[]]))
        fused_transpose_Y = draw(st.sampled_from([[]]))
        fused_reshape_Out = draw(st.sampled_from([[]]))
        fused_transpose_Out = draw(st.sampled_from([[]]))
        Scale_x = draw(st.floats(min_value=0.1, max_value=10.0))
        Scale_y = draw(st.floats(min_value=0.1, max_value=10.0))
        Scale_out = draw(st.floats(min_value=0.1, max_value=10.0))
        # not use for lite
        head_number = draw(st.integers(min_value=1, max_value=1))
        force_fp32_output = draw(st.booleans())

        matmul_op = OpConfig(
            type="matmul",
            inputs={"X": ["input_data_x"],
                    "Y": ["input_data_y"]},
            outputs={"Out": ["output_data"]},
            attrs={
                "transpose_X": transpose_X,
                "transpose_Y": transpose_Y,
                "alpha": alpha,
                "fused_reshape_X": fused_reshape_X,
                "fused_reshape_Y": fused_reshape_Y,
                "fused_transpose_X": fused_transpose_X,
                "fused_transpose_Y": fused_transpose_Y,
                "fused_reshape_Out": fused_reshape_Out,
                "fused_transpose_Out": fused_transpose_Out,
                "Scale_x": Scale_x,
                "Scale_y": Scale_y,
                "Scale_out": Scale_out,
                "head_number": head_number,
                "force_fp32_output": force_fp32_output
            })
        program_config = ProgramConfig(
            ops=[matmul_op],
            weights={},
            inputs={
                "input_data_x": TensorConfig(shape=X_shape),
                "input_data_y": TensorConfig(shape=Y_shape)
            },
            outputs={"output_data"})
        return program_config
Ejemplo n.º 16
0
    def sample_program_configs(self, draw):
        shape0 = draw(st.integers(min_value=1, max_value=64))
        shape1 = draw(st.sampled_from([4, 8, 16, 24, 32]))
        shape2 = draw(st.integers(min_value=1, max_value=64))
        shape3 = draw(st.integers(min_value=1, max_value=64))
        X_shape = [shape0, shape2, shape1]  #[N, M, 4x]
        Y_shape = [shape0, shape3, shape2]  #[N, C, M]
        background_label = draw(st.sampled_from([1, 0]))
        score_threshold = draw(st.floats(min_value=0.1, max_value=1.0))
        nms_threshold = draw(st.floats(min_value=0.1, max_value=0.1))
        nms_eta = draw(st.floats(min_value=1.0, max_value=10.0))
        nms_top_k = draw(st.integers(min_value=1, max_value=64))
        keep_top_k = draw(st.integers(min_value=1, max_value=64))
        normalized = draw(st.booleans())
        test_case = draw(st.sampled_from(["two_input", "three_input"]))

        def generate_input():
            return np.random.randint(low=1, high=64,
                                     size=[shape0]).astype(np.int32)

        if test_case == "two_input":
            multiclass_nms3_op = OpConfig(type="multiclass_nms3",
                                          inputs={
                                              "BBoxes": ["input_data_BBoxes"],
                                              "Scores": ["input_data_Scores"]
                                          },
                                          outputs={
                                              "Out": ["output_data"],
                                              "Index": ["Index"],
                                              "NmsRoisNum": ["NmsRoisNum"]
                                          },
                                          attrs={
                                              "background_label":
                                              background_label,
                                              "score_threshold":
                                              score_threshold,
                                              "nms_threshold": nms_threshold,
                                              "nms_top_k": nms_top_k,
                                              "keep_top_k": keep_top_k,
                                              "normalized": normalized,
                                              "nms_eta": nms_eta
                                          })
        else:
            multiclass_nms3_op = OpConfig(type="multiclass_nms3",
                                          inputs={
                                              "BBoxes": ["input_data_BBoxes"],
                                              "Scores": ["input_data_Scores"],
                                              "RoisNum":
                                              ["input_data_roisnum"]
                                          },
                                          outputs={
                                              "Out": ["output_data"],
                                              "Index": ["Index"],
                                              "NmsRoisNum": ["NmsRoisNum"]
                                          },
                                          attrs={
                                              "background_label":
                                              background_label,
                                              "score_threshold":
                                              score_threshold,
                                              "nms_threshold": nms_threshold,
                                              "nms_top_k": nms_top_k,
                                              "keep_top_k": keep_top_k,
                                              "normalized": normalized,
                                              "nms_eta": nms_eta
                                          })

        program_config = ProgramConfig(
            ops=[multiclass_nms3_op],
            weights={},
            inputs={
                "input_data_BBoxes": TensorConfig(shape=X_shape),
                "input_data_Scores": TensorConfig(shape=Y_shape),
                "input_data_roisnum": TensorConfig(data_gen=generate_input)
            },
            outputs={"output_data"})
        return program_config
Ejemplo n.º 17
0
    def sample_program_config(self, draw):
        data_format = draw(st.sampled_from(["NCHW", "NHWC"]))
        dilations = draw(st.sampled_from([[1, 1], [2, 2], [1, 2]]))
        padding_algorithm = draw(st.sampled_from(["EXPLICIT", "SAME",
                                                  "VALID"]))
        groups = draw(st.sampled_from([1, 2, 4]))
        paddings = draw(st.sampled_from([[0, 3], [1, 2, 3, 4]]))
        strides = draw(st.sampled_from([[1, 1], [2, 2], [1, 2]]))
        batch_size = draw(st.integers(min_value=1, max_value=4))

        def generate_input():
            if data_format == "NCHW":
                return np.random.random([batch_size, 48, 64,
                                         64]).astype(np.float32)
            else:
                return np.random.random([batch_size, 64, 64,
                                         48]).astype(np.float32)

        def generate_weight():
            return np.random.random([16, int(48 / groups), 3,
                                     3]).astype(np.float32)

        ops_config = [{
            "op_type": "conv2d",
            "op_inputs": {
                "Input": ["input_data"],
                "Filter": ["input_weight"]
            },
            "op_outputs": {
                "Output": ["conv_output"]
            },
            "op_attrs": {
                "data_format": data_format,
                "dilations": dilations,
                "padding_algorithm": padding_algorithm,
                "groups": groups,
                "paddings": paddings,
                "strides": strides
            }
        }, {
            "op_type": "mish",
            "op_inputs": {
                "X": ["conv_output"]
            },
            "op_outputs": {
                "Out": ["mish_output"]
            },
            "op_attrs": {},
        }]

        ops = self.generate_op_config(ops_config)

        program_config = ProgramConfig(
            ops=ops,
            weights={
                "input_weight": TensorConfig(data_gen=partial(generate_weight))
            },
            inputs={
                "input_data": TensorConfig(data_gen=partial(generate_input)),
            },
            outputs=["mish_output"])

        return program_config
Ejemplo n.º 18
0
    def sample_program_configs(self, draw):
        num = draw(st.integers(min_value=1, max_value=4))
        cin = draw(st.integers(min_value=1, max_value=128))
        cout = draw(st.integers(min_value=1, max_value=128))
        height = draw(st.integers(min_value=1, max_value=128))
        width = draw(st.integers(min_value=1, max_value=128))
        cout = draw(st.integers(min_value=1, max_value=128))
        kw = np.random.randint(1, 5)
        kh = np.random.randint(1, 5)
        groups = draw(st.integers(min_value=1, max_value=128))
        scale_in = draw(st.floats(min_value=0.001, max_value=0.1))
        scale_out = draw(st.floats(min_value=0.001, max_value=0.1))
        assume(cin % groups == 0)
        assume(cout % groups == 0)
        w_cin = (int)(cin / groups)
        in_shape = [num, cin, height, width]
        weight_shape = [cout, w_cin, kh, kw]
        assume(in_shape[2] >= weight_shape[2])
        assume(in_shape[3] >= weight_shape[3])

        paddings = draw(
            st.lists(st.integers(min_value=0, max_value=2),
                     min_size=2,
                     max_size=2))
        dilations = draw(st.sampled_from([[1, 1]]))
        padding_algorithm = draw(st.sampled_from(["VALID", "SAME"]))
        strides = draw(st.sampled_from([[1, 1], [2, 2]]))
        data_format = "NCHW"
        use_mkldnn = False
        if self.target[0] == "X86":
            use_mkldnn = True

        def generate_input(*args, **kwargs):
            return np.random.random(in_shape).astype(np.float32)

        def generate_filter(*args, **kwargs):
            return np.random.random(weight_shape).astype(np.float32)

        def generate_bias(*args, **kwargs):
            return np.random.random([cout]).astype(np.float32)

        inputs_data = {
            "input_data": TensorConfig(data_gen=partial(generate_input))
        }
        inputs_type = {"Input": ["input_data"], "Filter": ["filter_data"]}
        if use_mkldnn:
            inputs_data["bias_data"] = TensorConfig(
                data_gen=partial(generate_bias))
            inputs_type["Bias"] = ["bias_data"]

        conv_op = OpConfig(type="conv2d",
                           inputs=inputs_type,
                           outputs={"Output": ["output_data"]},
                           attrs={
                               "strides": strides,
                               "paddings": paddings,
                               "use_mkldnn": use_mkldnn,
                               "padding_algorithm": padding_algorithm,
                               "groups": groups,
                               "dilations": dilations,
                               "Scale_in": scale_in,
                               "Scale_out": scale_out,
                               "data_format": data_format
                           })
        program_config = ProgramConfig(
            ops=[conv_op],
            weights={
                "filter_data": TensorConfig(data_gen=partial(generate_filter))
            },
            inputs=inputs_data,
            outputs=["output_data"])
        return program_config
Ejemplo n.º 19
0
def sample_program_configs(draw):
    blank = draw(st.integers(min_value=0, max_value=10))
    merge_repeated = draw(st.booleans())
    padding_value = draw(st.integers(min_value=0, max_value=10))
    is_input_lod_tensor = draw(st.booleans())
    input_output_data_type = draw(st.sampled_from([np.int32, np.int64]))
    # LoD tensor need
    sequence_num = draw(st.integers(min_value=1, max_value=20))
    max_sequence_length = draw(st.integers(min_value=10, max_value=10))

    def gen_lod_data(sequence_num, max_sequence_length):
        sequence_length_list = [
            np.random.randint(1, max_sequence_length + 1)
            for i in range(sequence_num)
        ]
        lod_data_init_list = sequence_length_list
        lod_data_init_list.insert(0, 0)
        lod_data_init_array = np.array(lod_data_init_list)
        lod_data = np.cumsum(lod_data_init_array)
        return [lod_data.tolist()]

    if is_input_lod_tensor:
        input_lod_data = gen_lod_data(sequence_num, max_sequence_length)
    else:
        input_lod_data = None

    input_2d_tensor_shape = draw(
        st.lists(
            st.integers(
                min_value=1, max_value=6), min_size=2, max_size=2))

    def gen_input_data():
        if is_input_lod_tensor:
            total_sequence_length_of_mini_batch = input_lod_data[-1][-1]
            input_data = np.random.randint(
                0,
                10,
                size=(total_sequence_length_of_mini_batch, 1),
                dtype=input_output_data_type)
            return input_data
        else:
            return np.random.randint(
                0,
                10,
                size=input_2d_tensor_shape,
                dtype=input_output_data_type)

    def gen_input_length():
        input_length_data = []
        for i in range(input_2d_tensor_shape[0]):
            random_data = np.random.randint(
                0, input_2d_tensor_shape[1], dtype=input_output_data_type)
            input_length_data.append(random_data)
        return np.array(input_length_data).reshape(-1, 1)

    def gen_op_inputs_outputs_attrs():
        #inputs
        inputs = {'Input': ['input_data']}
        inputs_tensor = {
            'input_data': TensorConfig(
                data_gen=partial(gen_input_data), lod=input_lod_data)
        }
        if not is_input_lod_tensor:
            inputs['InputLength'] = ["input_length_data"]
            inputs_tensor['input_length_data'] = TensorConfig(
                data_gen=partial(gen_input_length))
        # attrs
        attrs = {
            'blank': blank,
            'merge_repeated': merge_repeated,
            'padding_value': padding_value
        }
        # output
        outputs_tensor_name_list = ['output']
        outputs = {'Output': ['output']}
        outputs_dtype = {'Output': input_output_data_type}
        if not is_input_lod_tensor:
            outputs['OutputLength'] = ['output_length']
            outputs_tensor_name_list.append('output_length')
            outputs_dtype['OutputLength'] = input_output_data_type
        return inputs, attrs, outputs, inputs_tensor, outputs_tensor_name_list, outputs_dtype

    inputs, attrs, outputs, inputs_tensor, outputs_tensor_name_list, outputs_dtype = gen_op_inputs_outputs_attrs(
    )
    ctc_align_op = OpConfig(
        type="ctc_align",
        inputs=inputs,
        outputs=outputs,
        attrs=attrs,
        outputs_dtype=outputs_dtype)

    program_config = ProgramConfig(
        ops=[ctc_align_op],
        weights={},
        inputs=inputs_tensor,
        outputs=outputs_tensor_name_list)
    return program_config
Ejemplo n.º 20
0
    def sample_program_configs(self):
        def generate_input1(attrs: List[Dict[str, Any]], batch):
            if self.dims == 4:
                return np.ones([batch, 3, 24, 24]).astype(np.float32)
            elif self.dims == 3:
                return np.ones([batch, 3, 24]).astype(np.float32)
            elif self.dims == 2:
                return np.ones([batch, 24]).astype(np.float32)
            elif self.dims == 1:
                return np.ones([24]).astype(np.float32)

        def generate_input2(attrs: List[Dict[str, Any]], batch):
            if self.dims == 4:
                return np.ones([batch, 3, 24, 24]).astype(np.float32)
            elif self.dims == 3:
                return np.ones([batch, 3, 24]).astype(np.float32)
            elif self.dims == 2:
                return np.ones([batch, 24]).astype(np.float32)
            elif self.dims == 1:
                return np.ones([24]).astype(np.float32)

        def generate_input3(attrs: List[Dict[str, Any]], batch):
            if self.dims == 4:
                return np.ones([batch, 3, 24, 24]).astype(np.float32)
            elif self.dims == 3:
                return np.ones([batch, 3, 24]).astype(np.float32)
            elif self.dims == 2:
                return np.ones([batch, 24]).astype(np.float32)
            elif self.dims == 1:
                return np.ones([24]).astype(np.float32)

        def generate_weight1(attrs: List[Dict[str, Any]]):
            return np.zeros([1]).astype(np.int32)

        for dims in [1, 2, 3, 4]:
            for num_input in [0, 1]:
                for batch in [1, 2, 4]:
                    for axis in [-1, 0, 1, 2, 3]:
                        self.num_input = num_input
                        self.dims = dims
                        dics = [{"axis": axis}, {}]
                        dics_intput = [{
                            "X": [
                                "concat_input1", "concat_input2",
                                "concat_input3"
                            ],
                            "AxisTensor": ["AxisTensor"],
                        }, {
                            "X": [
                                "concat_input1", "concat_input2",
                                "concat_input3"
                            ]
                        }]
                        dics_inputs = [{
                            "concat_input1":
                            TensorConfig(data_gen=partial(
                                generate_input1, dics, batch)),
                            "concat_input2":
                            TensorConfig(data_gen=partial(
                                generate_input2, dics, batch)),
                            "concat_input3":
                            TensorConfig(data_gen=partial(
                                generate_input3, dics, batch)),
                            "AxisTensor":
                            TensorConfig(
                                data_gen=partial(generate_weight1, dics))
                        }, {
                            "concat_input1":
                            TensorConfig(data_gen=partial(
                                generate_input1, dics, batch)),
                            "concat_input2":
                            TensorConfig(data_gen=partial(
                                generate_input2, dics, batch)),
                            "concat_input3":
                            TensorConfig(
                                data_gen=partial(generate_input3, dics, batch))
                        }]
                        ops_config = [{
                            "op_type": "concat",
                            "op_inputs": dics_intput[num_input],
                            "op_outputs": {
                                "Out": ["concat_output"]
                            },
                            "op_attrs": dics[0]
                        }]
                        ops = self.generate_op_config(ops_config)
                        program_config = ProgramConfig(
                            ops=ops,
                            weights={},
                            inputs=dics_inputs[num_input],
                            outputs=["concat_output"])

                        yield program_config
Ejemplo n.º 21
0
    def sample_program_configs(self, draw):
        in_num = draw(
            st.lists(st.integers(min_value=1, max_value=4),
                     min_size=1,
                     max_size=1))
        in_c_h_w = draw(
            st.lists(st.integers(min_value=1, max_value=64),
                     min_size=3,
                     max_size=3))
        X_shape = in_num + in_c_h_w
        align_corners = draw(st.booleans())
        scale1 = draw(st.floats(min_value=0.1, max_value=10.0))
        scale2 = draw(st.floats(min_value=0.1, max_value=10.0))
        interp_method = draw(st.sampled_from(["nearest"]))
        out_w = draw(st.integers(min_value=1, max_value=32))
        out_h = draw(st.integers(min_value=1, max_value=32))
        data_layout = draw(st.sampled_from(["NCHW"]))
        test_case = draw(st.sampled_from([1, 2, 3]))

        def generate_input1(*args, **kwargs):
            return np.random.normal(0.0, 1.0, X_shape).astype(np.float32)

        def generate_scale(*args, **kwargs):
            tmp = np.random.normal(0.1, 10.0, 2).astype(np.float32)
            assume(tmp[0] * X_shape[2] > 1.0)
            assume(tmp[0] * X_shape[3] > 1.0)
            assume(tmp[1] * X_shape[2] > 1.0)
            assume(tmp[1] * X_shape[3] > 1.0)
            return tmp

        def generate_input2(*args, **kwargs):
            return np.random.randint(1, 32, 2).astype(np.int32)

        def generate_input1_fp16(*args, **kwargs):
            return np.random.normal(0.0, 1.0, X_shape).astype(np.float16)

        assume(scale1 * X_shape[2] > 1.0)
        assume(scale1 * X_shape[3] > 1.0)
        assume(scale2 * X_shape[2] > 1.0)
        assume(scale2 * X_shape[3] > 1.0)
        assume(test_case != 2)

        nnadapter_device_name = self.get_nnadapter_device_name()
        if nnadapter_device_name == "nvidia_tensorrt":
            nearest_interp_v2 = OpConfig(type="nearest_interp_v2",
                                         inputs={"X": ["input_data_x"]},
                                         outputs={"Out": ["output_data"]},
                                         attrs={
                                             "data_layout": data_layout,
                                             "scale": [scale1, scale2],
                                             "out_w": out_w,
                                             "out_h": out_h,
                                             "interp_method": interp_method,
                                             "align_corners": False
                                         })
            program_config = ProgramConfig(
                ops=[nearest_interp_v2],
                weights={},
                inputs={
                    "input_data_x": TensorConfig(data_gen=generate_input1)
                },
                outputs={"output_data"})
            return program_config

        if test_case == 1:
            nearest_interp_v2 = OpConfig(type="nearest_interp_v2",
                                         inputs={
                                             "X": ["input_data_x"],
                                             "Scale": ["Scale"]
                                         },
                                         outputs={"Out": ["output_data"]},
                                         attrs={
                                             "data_layout": data_layout,
                                             "scale": [scale1, scale2],
                                             "out_w": out_w,
                                             "out_h": out_h,
                                             "interp_method": interp_method,
                                             "align_corners": align_corners
                                         })
            program_config = ProgramConfig(
                ops=[nearest_interp_v2],
                weights={},
                inputs={
                    "input_data_x": TensorConfig(data_gen=generate_input1),
                    "Scale": TensorConfig(data_gen=generate_scale)
                },
                outputs={"output_data"})
        elif test_case == 2:
            nearest_interp_v2 = OpConfig(type="nearest_interp_v2",
                                         inputs={
                                             "X": ["input_data_x"],
                                             "Scale": ["Scale"],
                                             "OutSize": ["OutSize"]
                                         },
                                         outputs={"Out": ["output_data"]},
                                         attrs={
                                             "data_layout": data_layout,
                                             "scale": [scale1, scale2],
                                             "out_w": out_w,
                                             "out_h": out_h,
                                             "interp_method": interp_method,
                                             "align_corners": align_corners
                                         })
            program_config = ProgramConfig(
                ops=[nearest_interp_v2],
                weights={},
                inputs={
                    "input_data_x": TensorConfig(data_gen=generate_input1),
                    "Scale": TensorConfig(data_gen=generate_scale),
                    "OutSize": TensorConfig(data_gen=generate_input2)
                },
                outputs={"output_data"})
        else:
            nearest_interp_v2 = OpConfig(type="nearest_interp_v2",
                                         inputs={"X": ["input_data_x"]},
                                         outputs={"Out": ["output_data"]},
                                         attrs={
                                             "data_layout": data_layout,
                                             "scale": [scale1, scale2],
                                             "out_w": out_w,
                                             "out_h": out_h,
                                             "interp_method": interp_method,
                                             "align_corners": align_corners
                                         })
            program_config = ProgramConfig(
                ops=[nearest_interp_v2],
                weights={},
                inputs={
                    "input_data_x": TensorConfig(data_gen=generate_input1)
                },
                outputs={"output_data"})
        return program_config
Ejemplo n.º 22
0
    def sample_program_configs(self, draw):
        in_shape_x = draw(
            st.lists(st.integers(min_value=3, max_value=10),
                     min_size=3,
                     max_size=4))
        axis = draw(st.sampled_from([-1, 0, 1, 2]))
        op_type_str = draw(st.sampled_from(["greater_equal", "greater_than"]))
        process_type = draw(
            st.sampled_from(["type_int64", "type_float", "type_int32"]))

        if axis == -1:
            in_shape_y = in_shape_x
        else:
            in_shape_y = in_shape_x[axis:]

        def generate_data(type, size_list):
            if type == "type_int32":
                return np.random.randint(low=0, high=100,
                                         size=size_list).astype(np.int32)
            elif type == "type_int64":
                return np.random.randint(low=0, high=100,
                                         size=size_list).astype(np.int64)
            elif type == "type_float":
                return np.random.random(size=size_list).astype(np.float32)

        def generate_input_x():
            return generate_data(process_type, in_shape_x)

        def generate_input_y():
            return generate_data(process_type, in_shape_y)

        build_ops = OpConfig(type=op_type_str,
                             inputs={
                                 "X": ["data_x"],
                                 "Y": ["data_y"]
                             },
                             outputs={
                                 "Out": ["output_data"],
                             },
                             attrs={
                                 "axis": axis,
                                 "force_cpu": True
                             },
                             outputs_dtype={"output_data": np.bool_})

        cast_out = OpConfig(type="cast",
                            inputs={
                                "X": ["output_data"],
                            },
                            outputs={
                                "Out": ["cast_data_out"],
                            },
                            attrs={
                                "in_dtype": int(0),
                                "out_dtype": int(2)
                            },
                            outputs_dtype={"cast_data_out": np.int32})

        program_config = ProgramConfig(
            ops=[build_ops, cast_out],
            weights={},
            inputs={
                "data_x": TensorConfig(data_gen=partial(generate_input_x)),
                "data_y": TensorConfig(data_gen=partial(generate_input_y)),
            },
            outputs=["cast_data_out"])
        return program_config
def sample_program_configs(draw):
    in_shape = draw(
        st.lists(st.integers(min_value=1, max_value=10),
                 min_size=1,
                 max_size=4))
    tensor_shape = draw(
        st.lists(st.integers(min_value=1, max_value=10),
                 min_size=1,
                 max_size=4))
    dtype = draw(st.sampled_from([2, 3, 5]))

    with_value_tensor = draw(st.sampled_from([True, False]))
    with_shape_tensor = draw(st.sampled_from([True, False]))

    def generate_shape_tensor(*args, **kwargs):
        return np.array(tensor_shape).astype(np.int32)

    def generate_input_bool(*args, **kwargs):
        return np.random.random([1]).astype(np.bool)

    def generate_input_int8(*args, **kwargs):
        return np.random.random([1]).astype(np.int8)

    def generate_input_int32(*args, **kwargs):
        return np.random.random([1]).astype(np.int32)

    def generate_input_int64(*args, **kwargs):
        return np.random.random([1]).astype(np.int64)

    def generate_input_float32(*args, **kwargs):
        return np.random.random([1]).astype(np.float32)

    if dtype == 0:
        value_data = generate_input_bool
    elif dtype == 2:
        value_data = generate_input_int32
    elif dtype == 3:
        value_data = generate_input_int64
    elif dtype == 5:
        value_data = generate_input_float32
    else:
        value_data = generate_input_int8

    value = draw(st.floats(min_value=-10, max_value=10))
    op_inputs = {}
    program_inputs = {}

    #ShapeTensorList not support now
    if (with_value_tensor and with_shape_tensor):
        op_inputs = {
            "ValueTensor": ["value_data"],
            "ShapeTensor": ["shape_data"]
        }
        program_inputs = {
            "value_data": TensorConfig(data_gen=partial(value_data)),
            "shape_data": TensorConfig(data_gen=partial(generate_shape_tensor))
        }
    elif ((not with_value_tensor) and with_shape_tensor):
        op_inputs = {"ShapeTensor": ["shape_data"]}
        program_inputs = {
            "shape_data": TensorConfig(data_gen=partial(generate_shape_tensor))
        }
    elif (with_value_tensor and (not with_shape_tensor)):
        op_inputs = {"ValueTensor": ["value_data"]}
        program_inputs = {
            "value_data": TensorConfig(data_gen=partial(value_data))
        }

    fill_constant_op = OpConfig(
        type="fill_constant",
        inputs=op_inputs,
        outputs={"Out": ["output_data"]},
        attrs={
            "dtype": dtype,
            "shape": in_shape,
            "value": value,
            "force_cpu": False
            #"place_type" : -1
        })
    program_config = ProgramConfig(ops=[fill_constant_op],
                                   weights={},
                                   inputs=program_inputs,
                                   outputs=["output_data"])
    return program_config
Ejemplo n.º 24
0
    def sample_program_config(self, draw):
        data_format = draw(st.sampled_from(["NCHW", "NHWC"]))
        dilations = draw(st.sampled_from([[1, 1], [2, 2], [1, 2]]))
        padding_algorithm = draw(st.sampled_from(["EXPLICIT", "SAME", "VALID"]))
        groups = draw(st.sampled_from([1, 2, 4, 8]))
        paddings = draw(st.sampled_from([[0, 3], [1, 2, 3, 4]]))
        strides = draw(st.sampled_from([[1, 1], [2, 2], [1, 2]]))
        axis = draw(st.sampled_from([1]))
        batch_size = draw(st.integers(min_value=1, max_value=4))

        def generate_input():
            if data_format == "NCHW":
                return np.random.random(
                    [batch_size, 16, 64, 64]).astype(np.float32)
            else:
                return np.random.random(
                    [batch_size, 64, 64, 16]).astype(np.float32)

        def generate_weight1():
            return np.random.random([16, 16, 3, 3]).astype(np.float32)

        def generate_weight2():
            return np.random.random([16 * groups]).astype(np.float32)

        conv2d_op = OpConfig(
            type="conv2d_transpose",
            inputs={"Input": ["input_data"],
                    "Filter": ["conv2d_weight"]},
            outputs={"Output": ["conv_output"]},
            attrs={
                "data_format": data_format,
                "dilations": dilations,
                "padding_algorithm": padding_algorithm,
                "groups": groups,
                "paddings": paddings,
                "strides": strides,
                "output_size": [],
                "output_padding": [],
                "is_test": True
            })

        elt_op = OpConfig(
            type="elementwise_add",
            inputs={"X": ["conv_output"],
                    "Y": ["elementwise_weight"]},
            outputs={"Out": ["elementwise_output"]},
            attrs={'axis': axis})

        model_net = [conv2d_op, elt_op]

        program_config = ProgramConfig(
            ops=model_net,
            weights={
                "conv2d_weight":
                TensorConfig(data_gen=partial(generate_weight1)),
                "elementwise_weight":
                TensorConfig(data_gen=partial(generate_weight2))
            },
            inputs={
                "input_data": TensorConfig(data_gen=partial(generate_input))
            },
            outputs=["elementwise_output"])

        return program_config
Ejemplo n.º 25
0
    def sample_program_configs(self, draw):
        num_pri = draw(st.integers(min_value=10, max_value=100))
        priorbox_shape = [num_pri, 4]
        code_type = draw(
            st.sampled_from(["encode_center_size", "decode_center_size"]))
        axis = draw(st.sampled_from([0, 1]))
        box_normalized = draw(st.booleans())
        variance = draw(st.sampled_from([[0.1, 0.2, 0.3, 0.4], []]))
        lod_data = [[1, 1, 1, 1, 1]]

        if code_type == "encode_center_size":
            targetbox_shape = draw(st.sampled_from([[30, 4], [80, 4]]))
        else:
            num0 = 1
            num1 = 1
            num2 = 1
            if axis == 0:
                num1 = priorbox_shape[0]
                num0 = np.random.randint(1, 100)
            else:
                num0 = priorbox_shape[0]
                num1 = np.random.randint(1, 100)
            num2 = priorbox_shape[1]
            targetbox_shape = draw(st.sampled_from([[num0, num1, num2]]))

        def generate_priorbox(*args, **kwargs):
            return np.random.random(priorbox_shape).astype(np.float32)

        def generate_priorbox_var(*args, **kwargs):
            return np.random.random(priorbox_shape).astype(np.float32)

        def generate_targetbox(*args, **kwargs):
            return np.random.random(targetbox_shape).astype(np.float32)

        input_type_dict = {}
        input_data_dict = {}
        input_type_dict["PriorBox"] = ["priorbox_data"]
        input_type_dict["TargetBox"] = ["targetbox_data"]
        input_data_dict["priorbox_data"] = TensorConfig(
            data_gen=partial(generate_priorbox), lod=lod_data)
        input_data_dict["targetbox_data"] = TensorConfig(
            data_gen=partial(generate_targetbox), lod=lod_data)
        if len(variance) == 0:
            input_type_dict["PriorBoxVar"] = ["priorbox_var_data"]
            input_data_dict["priorbox_var_data"] = TensorConfig(
                data_gen=partial(generate_priorbox_var))

        box_coder_op = OpConfig(type="box_coder",
                                inputs=input_type_dict,
                                outputs={"OutputBox": ["outputbox_data"]},
                                attrs={
                                    "code_type": code_type,
                                    "box_normalized": box_normalized,
                                    "axis": axis,
                                    "variance": variance
                                })

        program_config = ProgramConfig(ops=[box_coder_op],
                                       weights={},
                                       inputs=input_data_dict,
                                       outputs=["outputbox_data"])
        return program_config
Ejemplo n.º 26
0
    def sample_program_configs(self, draw):
        in_shape = draw(
            st.lists(st.integers(min_value=1, max_value=7),
                     min_size=2,
                     max_size=6))
        update_shape = in_shape
        assume(
            len(update_shape) == len(in_shape)
            and update_shape[1:] == in_shape[1:])

        index_shape = draw(
            st.lists(st.integers(min_value=1, max_value=len(update_shape)),
                     min_size=1,
                     max_size=1))
        index_shape[0] = in_shape[0]
        assume(
            len(index_shape) == 1
            or (len(index_shape) == 2 and index_shape[1] == 1))

        index_type = draw(st.sampled_from(["int32", "int64"]))
        overwrite = draw(st.booleans())

        def generate_data(*args, **kwargs):
            low, high = -10, 10
            dtype = "float32"
            shape = kwargs["shape"]
            if "low" in kwargs:
                low = kwargs["low"]
            if "high" in kwargs:
                high = kwargs["high"]
            if "dtype" in kwargs:
                dtype = kwargs["dtype"]

            if dtype == "int32":
                if low == high:
                    return low * np.ones(shape).astype(np.int32)
                else:
                    return np.random.randint(low, high, shape).astype(np.int32)
            elif dtype == "int64":
                if low == high:
                    return low * np.ones(shape).astype(np.int64)
                else:
                    return np.random.randint(low, high, shape).astype(np.int64)
            elif dtype == "float32":
                return (high - low) * np.random.random(shape).astype(
                    np.float32) + low

        def generate_index(*args, **kwargs):
            index_np = np.ones(index_shape).astype(np.int64)
            for i in range(index_shape[0]):
                index_np[i] = i
            if kwargs["dtype"] == "int32":
                index_np = index_np.astype(np.int32)
            return index_np

        scatter_op = OpConfig(type="scatter",
                              inputs={
                                  "X": ["input_data"],
                                  "Ids": ["index"],
                                  "Updates": ["updates"]
                              },
                              outputs={"Out": ["output_data"]},
                              attrs={"overwrite": overwrite})

        program_config = ProgramConfig(
            ops=[scatter_op],
            weights={},
            inputs={
                "input_data":
                TensorConfig(data_gen=partial(generate_data, shape=in_shape)),
                "index":
                TensorConfig(
                    data_gen=partial(generate_index, dtype=index_type)),
                "updates":
                TensorConfig(
                    data_gen=partial(generate_data, shape=update_shape))
            },
            outputs=["output_data"])

        return program_config
Ejemplo n.º 27
0
    def sample_program_configs(self, draw):
        input_n = draw(st.integers(min_value=1, max_value=4))
        input_c = draw(st.integers(min_value=1, max_value=128))
        input_h = draw(st.integers(min_value=1, max_value=128))
        input_w = draw(st.integers(min_value=1, max_value=128))
        filter_m = input_c
        filter_c = 1
        filter_h = draw(st.integers(min_value=1, max_value=7))
        filter_w = draw(st.integers(min_value=1, max_value=7))
        scale_in = draw(st.floats(min_value=0.001, max_value=0.1))
        scale_out = draw(st.floats(min_value=0.001, max_value=0.1))
        assume(input_h >= filter_h)
        assume(input_w >= filter_w)
        groups = input_c
        paddings = draw(
            st.lists(st.integers(min_value=0, max_value=20),
                     min_size=2,
                     max_size=2))
        dilations = draw(
            st.lists(st.integers(min_value=1, max_value=10),
                     min_size=2,
                     max_size=2))
        padding_algorithm = draw(st.sampled_from(["VALID", "SAME"]))
        strides = draw(
            st.lists(st.integers(min_value=1, max_value=10),
                     min_size=2,
                     max_size=2))
        data_format = "NCHW"
        use_mkldnn = False
        if self.get_target() == "X86":
            use_mkldnn = True

        def calc_output_size():
            if padding_algorithm == "SAME":
                output_h = input_h
                output_w = input_w
            elif padding_algorithm == "VALID":
                output_h = (input_h - (dilations[0] *
                                       (filter_h - 1) + 1)) / strides[0] + 1
                output_w = (input_w - (dilations[1] *
                                       (filter_w - 1) + 1)) / strides[1] + 1
            else:
                output_h = (input_h + 2 * paddings[0] -
                            (dilations[0] *
                             (filter_h - 1) + 1)) / strides[0] + 1
                output_w = (input_w + 2 * paddings[1] -
                            (dilations[1] *
                             (filter_w - 1) + 1)) / strides[1] + 1
            return output_h, output_w

        output_h, output_w = calc_output_size()
        assume(output_h >= 1)
        assume(output_w >= 1)

        in_shape = [input_n, input_c, input_h, input_w]
        weight_shape = [filter_m, filter_c, filter_h, filter_w]

        def generate_input(*args, **kwargs):
            return np.random.random(in_shape).astype(np.float32)

        def generate_filter(*args, **kwargs):
            return np.random.random(weight_shape).astype(np.float32)

        def generate_bias(*args, **kwargs):
            return np.random.random([filter_m]).astype(np.float32)

        inputs_type = {"Input": ["input_data"], "Filter": ["filter_data"]}
        inputs_data = {
            "input_data": TensorConfig(data_gen=partial(generate_input))
        }
        weights_data = {
            "filter_data": TensorConfig(data_gen=partial(generate_filter))
        }
        if use_mkldnn:
            has_bias = draw(st.booleans())
            if has_bias:
                inputs_type["Bias"] = ["bias_data"]
                weights_data['bias_data'] = TensorConfig(
                    data_gen=partial(generate_bias))

        depthwise_conv2d_op = OpConfig(type="depthwise_conv2d",
                                       inputs=inputs_type,
                                       outputs={"Output": ["output_data"]},
                                       attrs={
                                           "strides": strides,
                                           "paddings": paddings,
                                           "use_mkldnn": use_mkldnn,
                                           "padding_algorithm":
                                           padding_algorithm,
                                           "groups": groups,
                                           "dilations": dilations,
                                           "Scale_in": scale_in,
                                           "Scale_out": scale_out,
                                           "data_format": data_format,
                                       })
        program_config = ProgramConfig(ops=[depthwise_conv2d_op],
                                       weights=weights_data,
                                       inputs=inputs_data,
                                       outputs=["output_data"])
        return program_config
Ejemplo n.º 28
0
    def sample_program_configs(self, draw):
        in_shape = draw(st.sampled_from([[1, 1, 1], [2, 1, 4]]))
        Shape = draw(st.sampled_from([[2, 4, 4], [3, 2, 3, 4]]))
        expand_shape = draw(st.sampled_from([[2, 5, 4], [2, 3, 4]]))
        with_Shape = draw(st.sampled_from([True, False]))

        #todo daming5432 input vector tensor
        with_expand_shape = draw(st.booleans())

        def generate_shape(*args, **kwargs):
            return np.array(Shape).astype(np.int32)

        def generate_expand_shape(i, *args, **kwargs):
            return np.array([expand_shape[i]]).astype(np.int32)

        def generate_input(*args, **kwargs):
            if kwargs["type"] == "int32":
                return np.random.randint(kwargs["low"], kwargs["high"],
                                         kwargs["shape"]).astype(np.int32)
            elif kwargs["type"] == "int64":
                return np.random.randint(kwargs["low"], kwargs["high"],
                                         kwargs["shape"]).astype(np.int64)
            elif kwargs["type"] == "float32":
                return (kwargs["high"] - kwargs["low"]) * np.random.random(
                    kwargs["shape"]).astype(np.float32) + kwargs["low"]

        input_type = draw(st.sampled_from(["float32", "int64", "int32"]))

        def gnerate_inputs(with_Shape, with_expand_shape):
            inputs1 = {}
            inputs2 = {}
            # with_Shape has a higher priority than expand_shapes_tensor
            if (with_Shape):
                inputs1 = {
                    "X": ["input_data"],
                    "Shape": ["shape_data"],
                }
                inputs2 = {
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input,
                                                  type=input_type,
                                                  low=-10,
                                                  high=10,
                                                  shape=in_shape)),
                    "shape_data":
                    TensorConfig(data_gen=partial(generate_shape))
                }
            elif ((not with_Shape) and with_expand_shape):
                inputs1 = {
                    "X": ["input_data"],
                    "expand_shapes_tensor":
                    ["expand_data0", "expand_data1", "expand_data2"]
                }
                inputs2 = {
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input,
                                                  type=input_type,
                                                  low=-10,
                                                  high=10,
                                                  shape=in_shape)),
                    "expand_data0":
                    TensorConfig(data_gen=partial(generate_expand_shape, 0)),
                    "expand_data1":
                    TensorConfig(data_gen=partial(generate_expand_shape, 1)),
                    "expand_data2":
                    TensorConfig(data_gen=partial(generate_expand_shape, 2))
                }
            elif (with_Shape and (not with_expand_shape)):
                inputs1 = {"X": ["input_data"], "Shape": ["shape_data"]}
                inputs2 = {
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input,
                                                  type=input_type,
                                                  low=-10,
                                                  high=10,
                                                  shape=in_shape)),
                    "shape_data":
                    TensorConfig(data_gen=partial(generate_shape))
                }
            else:
                inputs1 = {"X": ["input_data"]}
                inputs2 = {
                    "input_data":
                    TensorConfig(data_gen=partial(generate_input,
                                                  type=input_type,
                                                  low=-10,
                                                  high=10,
                                                  shape=in_shape))
                }
            return [inputs1, inputs2]

        attr_shape = draw(
            st.sampled_from([[2, 3, 4], [2, 4, 4], [2, 2, 3, 4], [3, 2, 5,
                                                                  4]]))
        inputs = gnerate_inputs(with_Shape, with_expand_shape)
        expand_v2_op = OpConfig(type="expand_v2",
                                inputs=inputs[0],
                                outputs={"Out": ["output_data"]},
                                attrs={"shape": attr_shape})
        expand_v2_op.outputs_dtype = {"output_data": input_type}

        program_config = ProgramConfig(ops=[expand_v2_op],
                                       weights={},
                                       inputs=inputs[1],
                                       outputs=["output_data"])
        return program_config
Ejemplo n.º 29
0
def sample_program_configs(draw):
    Transpose = draw(st.sampled_from([True]))
    in_shape = draw(
        st.lists(st.integers(min_value=1, max_value=64),
                 min_size=4,
                 max_size=4))
    weight_shape = draw(
        st.lists(st.integers(min_value=1, max_value=8), min_size=4,
                 max_size=4))
    paddings = draw(
        st.sampled_from([[1, 2], [4, 2], [1, 1], [0, 0], [1, 0], [1, 1]]))
    dilations = draw(st.sampled_from([[1, 1], [2, 2]]))
    groups = draw(st.sampled_from([1, 2]))
    padding_algorithm = draw(st.sampled_from(["VALID", "SAME"]))
    strides = draw(st.sampled_from([[1, 1], [2, 2]]))
    threshold = draw(st.floats(min_value=0, max_value=1))
    alpha = draw(st.floats(min_value=0, max_value=1))
    scale = draw(st.floats(min_value=0.5, max_value=5))
    offset = draw(st.floats(min_value=0, max_value=1))
    output_padding = draw(
        st.sampled_from([[],
                         draw(
                             st.lists(st.integers(min_value=0, max_value=16),
                                      min_size=2,
                                      max_size=2))]))
    elementwise_bias_shape = draw(
        st.sampled_from([[weight_shape[1] * groups], [1]]))

    paddings_, dilations_ = UpdatePaddingAndDilation(in_shape, weight_shape,
                                                     paddings, dilations,
                                                     groups, padding_algorithm,
                                                     strides)
    assume(in_shape[1] == weight_shape[0])
    if len(output_padding):
        assume(output_padding[0] < max(strides[0], dilations_[0]))
        assume(output_padding[1] < max(strides[1], dilations_[1]))
    conv_out_shape = [in_shape[0], weight_shape[1] * groups]
    oh, ow = ConvTransposeOutputSize(in_shape, weight_shape, dilations_,
                                     paddings_, strides)
    if len(output_padding):
        oh = oh + output_padding[0]
        ow = ow + output_padding[1]
    conv_out_shape = conv_out_shape + [oh, ow]
    #assume(oh > 0 and ow > 0)????

    Alpha_shape = []
    mode_data = draw(st.sampled_from(["all", "channel", "element"]))
    if mode_data == "all":
        Alpha_shape = [1]
    elif mode_data == "channel":
        Alpha_shape = [conv_out_shape[1]]
    elif mode_data == "element":
        Alpha_shape = conv_out_shape

    act_type = draw(
        st.sampled_from(['relu', 'relu6', 'leaky_relu', 'hard_swish',
                         'prelu']))

    def generate_act_attrs(act_type_str):
        attrs = {}
        if act_type_str == 'relu6':
            attrs = {"threshold": threshold}
        if act_type_str == 'leaky_relu':
            attrs = {"alpha": alpha}
        if act_type_str == 'hard_swish':
            attrs = {"threshold": threshold, "scale": scale, "offset": offset}
        if act_type_str == "prelu":
            attrs = {"mode": mode_data, "data_format": "NCHW"}
        return attrs

    conv_op = OpConfig(type="conv2d_transpose",
                       inputs={
                           "Input": ["input_data"],
                           "Filter": ["weight_data"]
                       },
                       outputs={"Output": ["conv_output_data"]},
                       attrs={
                           "data_format": 'nchw',
                           "dilations": dilations,
                           "padding_algorithm": padding_algorithm,
                           "groups": groups,
                           "paddings": paddings,
                           "strides": strides,
                           "output_size": [],
                           "output_padding": output_padding
                       })

    active_op_input = {}
    inputs_data = {}
    if act_type == "prelu":
        active_op_input = {"X": ["conv_output_data"], "Alpha": ["alpha_data"]}
        inputs_data = {
            "input_data": TensorConfig(shape=in_shape),
            "alpha_data": TensorConfig(shape=Alpha_shape)
        }
    else:
        active_op_input = {"X": ["conv_output_data"]}
        inputs_data = {"input_data": TensorConfig(shape=in_shape)}

    elementwise_add_op = OpConfig(type="elementwise_add",
                                  inputs={
                                      "X": ["conv_output_data"],
                                      "Y": ["add_bias_data"]
                                  },
                                  outputs={"Out": ["output_data"]},
                                  attrs={"axis": 1})

    ops = [conv_op, elementwise_add_op]
    program_config = ProgramConfig(
        ops=ops,
        weights={
            "weight_data": TensorConfig(shape=weight_shape),
            "add_bias_data": TensorConfig(shape=elementwise_bias_shape)
        },
        inputs=inputs_data,
        outputs=["output_data"])
    return program_config
Ejemplo n.º 30
0
def sample_program_configs(draw):
    in_shape = draw(
        st.lists(st.integers(min_value=10, max_value=20),
                 min_size=4,
                 max_size=4))
    lod_data = draw(
        st.sampled_from([[0, 3, 5, in_shape[0]], [0, 4, 7, in_shape[0]],
                         [0, 4, in_shape[0]], [0, 7, in_shape[0]]]))
    lod_data1 = draw(
        st.sampled_from([[0, 3, 5, in_shape[0]], [0, 4, 7, in_shape[0]],
                         [0, 4, in_shape[0]], [0, 7, in_shape[0]]]))
    lod_data2 = draw(
        st.sampled_from([[0, 3, 5, in_shape[0]], [0, 4, 7, in_shape[0]],
                         [0, 4, in_shape[0]], [0, 7, in_shape[0]]]))
    case_num = draw(st.sampled_from([0, 1]))

    def generate_input_x(*args, **kwargs):
        return np.random.random(in_shape).astype(np.float32)

    def generate_input_y(*args, **kwargs):
        return np.array(lod_data1).astype(np.int32)

    if case_num == 0:
        build_ops = OpConfig(type="lod_reset",
                             inputs={
                                 "X": ["input_data_x"],
                                 "Y": []
                             },
                             outputs={
                                 "Out": ["output_data"],
                             },
                             attrs={
                                 "target_lod": lod_data,
                                 'append': True
                             })
        program_config = ProgramConfig(
            ops=[build_ops],
            weights={},
            inputs={
                "input_data_x":
                TensorConfig(
                    data_gen=partial(generate_input_x, lod=list(lod_data2))),
            },
            outputs=["output_data"])
    elif case_num == 1:
        build_ops = OpConfig(type="lod_reset",
                             inputs={
                                 "X": ["input_data_x"],
                                 "Y": ["input_data_y"]
                             },
                             outputs={
                                 "Out": ["output_data"],
                             },
                             attrs={
                                 "target_lod": [],
                                 'append': True
                             })
        program_config = ProgramConfig(
            ops=[build_ops],
            weights={},
            inputs={
                "input_data_x":
                TensorConfig(
                    data_gen=partial(generate_input_x, lod=list(lod_data2))),
                "input_data_y":
                TensorConfig(data_gen=partial(generate_input_y)),
            },
            outputs=["output_data"])
    return program_config