示例#1
0
def verify_unary_abs(input_dim):
    dtype = "float32"

    a_np = np.random.uniform(-100.0, 100.0, size=input_dim).astype(dtype)
    ref_val = np.abs(a_np)

    inputs = [("input", datatypes.Array(*input_dim))]
    output = [("output", datatypes.Array(*ref_val.shape))]
    builder = NeuralNetworkBuilder(inputs, output)
    builder.add_unary(name="abs", input_name="input", output_name="output", mode="abs")

    model = cm.models.MLModel(builder.spec)
    for target, dev in tvm.testing.enabled_targets():
        out = run_tvm_graph(model, target, dev, [a_np], ["input"], ref_val.shape, dtype)
        tvm.testing.assert_allclose(out, ref_val, rtol=1e-5)
示例#2
0
def verify_unary_log(input_dim):
    dtype = 'float32'

    a_np = np.random.uniform(size=input_dim).astype(dtype)
    ref_val = np.log(a_np)

    inputs = [('input', datatypes.Array(*input_dim))]
    output = [('output', datatypes.Array(*ref_val.shape))]
    builder = NeuralNetworkBuilder(inputs, output)
    builder.add_unary(name="log",
                      input_name='input',
                      output_name='output',
                      mode='log')

    model = cm.models.MLModel(builder.spec)
    for target, ctx in tvm.testing.enabled_targets():
        out = run_tvm_graph(model, target, ctx, [a_np],
                            ['input'], ref_val.shape, dtype)
        tvm.testing.assert_allclose(out, ref_val, rtol=1e-5)
示例#3
0
def verify_unary_inverse(input_dim, epsilon=0):
    dtype = "float32"

    a_np = np.random.uniform(size=input_dim).astype(dtype)
    ref_val = 1 / (a_np + epsilon)

    inputs = [("input", datatypes.Array(*input_dim))]
    output = [("output", datatypes.Array(*ref_val.shape))]
    builder = NeuralNetworkBuilder(inputs, output)
    builder.add_unary(name="inverse",
                      input_name="input",
                      output_name="output",
                      mode="inverse",
                      epsilon=epsilon)

    model = cm.models.MLModel(builder.spec)
    for target, ctx in tvm.testing.enabled_targets():
        out = run_tvm_graph(model, target, ctx, [a_np], ["input"],
                            ref_val.shape, dtype)
        tvm.testing.assert_allclose(out, ref_val, rtol=1e-5)
def verify_unary_threshold(input_dim, alpha):
    dtype = 'float32'

    a_np = np.random.uniform(-100.0, 100.0, size=input_dim).astype(dtype)
    ref_val = np.maximum(a_np, alpha)

    inputs = [('input', datatypes.Array(*input_dim))]
    output = [('output', datatypes.Array(*ref_val.shape))]
    builder = NeuralNetworkBuilder(inputs, output)
    builder.add_unary(name="threshold",
                      input_name='input',
                      output_name='output',
                      mode='threshold',
                      alpha=alpha)

    model = cm.models.MLModel(builder.spec)
    for target, ctx in ctx_list():
        out = run_tvm_graph(model, target, ctx, [a_np],
                            ['input'], ref_val.shape, dtype)
        tvm.testing.assert_allclose(out, ref_val, rtol=1e-5)
def verify_unary_rsqrt(input_dim, epsilon=0):
    dtype = 'float32'

    a_np = np.random.uniform(size=input_dim).astype(dtype)
    ref_val = 1 / np.sqrt(a_np + epsilon)

    inputs = [('input', datatypes.Array(*input_dim))]
    output = [('output', datatypes.Array(*ref_val.shape))]
    builder = NeuralNetworkBuilder(inputs, output)
    builder.add_unary(name="rsqrt",
                      input_name='input',
                      output_name='output',
                      mode='rsqrt',
                      epsilon=epsilon)

    model = cm.models.MLModel(builder.spec)
    for target, ctx in ctx_list():
        out = run_tvm_graph(model, target, ctx, [a_np],
                            ['input'], ref_val.shape, dtype)
        tvm.testing.assert_allclose(out, ref_val, rtol=1e-5)
示例#6
0
 def test_unary_function_converter(self):
     input_dim = (3, )
     output_dim = (3, )
     input = [('input', datatypes.Array(*input_dim))]
     output = [('output', datatypes.Array(*output_dim))]
     builder = NeuralNetworkBuilder(input, output)
     builder.add_unary(name='Unary1',
                       input_name='input',
                       output_name='mid1',
                       mode='abs')
     builder.add_unary(name='Unary2',
                       input_name='mid1',
                       output_name='mid2',
                       mode='sqrt')
     builder.add_unary(name='Unary3',
                       input_name='mid2',
                       output_name='mid3',
                       mode='rsqrt')
     builder.add_unary(name='Unary4',
                       input_name='mid3',
                       output_name='mid4',
                       mode='inverse')
     builder.add_unary(name='Unary5',
                       input_name='mid4',
                       output_name='mid5',
                       mode='power',
                       alpha=2)
     builder.add_unary(name='Unary6',
                       input_name='mid5',
                       output_name='mid6',
                       mode='exp')
     builder.add_unary(name='Unary7',
                       input_name='mid6',
                       output_name='mid7',
                       mode='log')
     builder.add_unary(name='Unary8',
                       input_name='mid7',
                       output_name='output',
                       mode='threshold')
     model_onnx = convert_coreml(builder.spec)
     self.assertTrue(model_onnx is not None)
 def test_unary_function_converter(self):
     input_dim = (3, )
     output_dim = (3, )
     input = [('input', datatypes.Array(*input_dim))]
     output = [('output', datatypes.Array(*output_dim))]
     builder = NeuralNetworkBuilder(input, output)
     builder.add_unary(name='Unary1',
                       input_name='input',
                       output_name='mid1',
                       mode='abs')
     builder.add_unary(name='Unary3',
                       input_name='mid1',
                       output_name='mid2',
                       mode='sqrt')
     builder.add_unary(name='Unary2',
                       input_name='mid2',
                       output_name='mid3',
                       mode='rsqrt')
     builder.add_unary(name='Unary3',
                       input_name='mid3',
                       output_name='mid4',
                       mode='inverse')
     builder.add_unary(name='Unary4',
                       input_name='mid4',
                       output_name='mid5',
                       mode='power',
                       alpha=2)
     builder.add_unary(name='Unary5',
                       input_name='mid5',
                       output_name='mid6',
                       mode='exp')
     builder.add_unary(name='Unary6',
                       input_name='mid6',
                       output_name='mid7',
                       mode='log')
     builder.add_unary(name='Unary7',
                       input_name='mid7',
                       output_name='output',
                       mode='threshold')
     context = ConvertContext()
     for layer in builder.spec.neuralNetwork.layers:
         for node in UnaryFunctionLayerConverter.convert(
                 context, layer, ['input'], ['output']):
             self.assertTrue(node is not None)