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)
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)
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)
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)