1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
// This file is an example of an operator test file.
//
// In this file, we demonstrate how to write a test file for ONNX operators.
// There are 2 operator tests defined in this file:
//
// - "Simple Abs test example": a simple operator test for Abs operator. This example shows how to write a simple test with minimal properties.
//
// - "Conv2D with padding": a simple operator test for Conv operator with padding. This example shows how to write a test with all optional properties.
//
// test file starts with an array of test objects.
[
// this is the first operator test object (Abs example).
{
"name": "Simple Abs op test example", // name of the test
"operator": "Abs", // OpType of the operator
"cases": [
// in this example, we only have one test case.
{
// name of the test case
"name": "3D float32 test",
"inputs": [
// specify the input tensor
{
"data": [1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, -1, -2, -3, -4, -5, -6, -7, -8, 101, 102, 103, 104],
"dims": [2, 3, 4],
"type": "float32"
}
],
"outputs": [
{
"data": [1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 1, 2, 3, 4, 5, 6, 7, 8, 101, 102, 103, 104],
"dims": [2, 3, 4],
"type": "float32"
}
]
}
]
},
// this is the second operator test object (Conv example).
{
// name of the test
"name": "Conv op test example",
// OpType of the operator
"operator": "Conv",
// [optional] specify the attributes of the operator
"attributes": [{ "name": "kernel_shape", "data": [2, 2], "type": "ints" }],
// [optional] specify a regex pattern to match the platform description.
//
// If not specified, the test will run on all platforms.
// Otherwise, the test will only run on platforms that match the pattern.
"platformCondition": "",
// [optional] specify input shape definitions.
//
// Sometimes, input shape definitions can offer shape information for ONNX Runtime to optimize its inferencing behavior.
// For example, ORT will transform a NCHW Conv operator into a NHWC operator when the input shape is 4 dimensional.
// If the input shape dimension is unknown, ORT will not perform this optimization.
//
// In operator test, we can specify input shape definitions to test the optimized behavior.
//
// The array of input shape definitions should have the same length as the number of model's inputs.
//
"inputShapeDefinitions": [
// input 0 shape definition. use semantic names to specify the dynamic dimensions.
["__input_0_dim_0", "__input_0_dim_1", "__input_0_dim_2", "__input_0_dim_3"],
// input 1 shape definition. use numbers to specify the static dimensions.
[1, 1, 2, 2]
],
// [optional] specify the opset of the operator.
"opset": { "domain": "", "version": 13 },
// test cases is required.
"cases": [
{
"name": "NCHW Conv2D test",
"inputs": [
{
"data": [10, 20, 30, 40, 50, 60, 70, 80, 90],
"dims": [1, 1, 3, 3],
"type": "float32"
},
// an input or output can be optional, depending on the operator.
// if an input or output is optional, we can specify it as follows:
//
// {
// "data": null,
// "type": "float32"
// }
{
"data": [1, 2, 3, 4],
"dims": [1, 1, 2, 2],
"type": "float32"
}
],
"outputs": [
{
"data": [370, 470, 670, 770],
"dims": [1, 1, 2, 2],
"type": "float32"
}
]
}
]
}
]
|