Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add webnn softmax tests #37254

Merged
merged 1 commit into from
Jan 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions webnn/resources/test_data/softmax.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
{
"tests": [
{
"name": "softmax float32 2D tensor",
"inputs": {
"x": {
"shape": [4, 6],
"data": [
-9.602943250149636,
5.353947088147631,
4.982506021190005,
-1.8709681620943286,
2.275207739606868,
-1.9403444022539098,
1.8985638253724968,
1.7877445512108103,
-7.243864108734894,
7.827657028853274,
-2.4196847673132726,
-8.018804523844905,
-3.1493873901132474,
7.674345195428224,
-5.183967275728079,
-7.301743057626533,
-7.121610082852072,
-8.29701166999875,
-5.77890866334104,
-9.76213424697228,
7.332167409724249,
3.9077721241449215,
-5.2970783047100545,
5.0440509491607965
],
"type": "float32"
}
},
"expected": {
"name": "output",
"shape": [4, 6],
"data": [
1.8385014755040174e-7,
0.575650691986084,
0.3970489799976349,
0.0004191970219835639,
0.026489850133657455,
0.0003911005624104291,
0.00264744833111763,
0.00236973213031888,
2.833488679243601e-7,
0.9949471354484558,
0.00003527247827150859,
1.3054766156983533e-7,
0.000019920609702239744,
0.9999766945838928,
0.0000026043292109534377,
3.1329790317613515e-7,
3.7513549955292547e-7,
1.1580249292819644e-7,
0.0000017836379129221314,
3.322107744452296e-8,
0.8818095922470093,
0.028719622641801834,
0.000002887773234760971,
0.08946608752012253
],
"type": "float32"
}
}
]
}
15 changes: 14 additions & 1 deletion webnn/resources/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,26 @@ const getExpectedData = (resources, outputName) => {
return data;
};

/**
* Get ULP tolerance of softmax operation.
* @param {Object} resources - Resources used for building a graph
* @returns {Number} A tolerance number
*/
const getSoftmaxPrecisionTolerance = (resources) => {
// Compute the softmax values of the 2-D input tensor along axis 1.
const inputShape = resources.inputs[Object.keys(resources.inputs)[0]].shape;
const tolerance = inputShape[1] * 3 + 3;
return tolerance;
};

// Refer to precision metrics on https://github.com/webmachinelearning/webnn/issues/265#issuecomment-1256242643
const PrecisionMetrics = {
clamp: {ULP: {float32: 0, float16: 0}},
concat: {ULP: {float32: 0, float16: 0}},
relu: {ULP: {float32: 0, float16: 0}},
reshape: {ULP: {float32: 0, float16: 0}},
slice: {ULP: {float32: 0, float16: 0}},
softmax: {ULP: {float32: getSoftmaxPrecisionTolerance, float16: getSoftmaxPrecisionTolerance}},
};

/**
Expand All @@ -82,7 +95,7 @@ const getPrecisonTolerance = (operationName, metricType, resources) => {
let tolerance = PrecisionMetrics[operationName][metricType][precisionType];
// If the tolerance is dynamic, then evaluate the function to get the value.
if (tolerance instanceof Function) {
tolerance = tolerance(resources, operationName);
tolerance = tolerance(resources);
}
return tolerance;
};
Expand Down
10 changes: 10 additions & 0 deletions webnn/softmax.https.any.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// META: title=test WebNN API softmax operation
// META: global=window,dedicatedworker
// META: script=./resources/utils.js
// META: timeout=long

'use strict';

// https://webmachinelearning.github.io/webnn/#api-mlgraphbuilder-softmax

testWebNNOperation('softmax', '/webnn/resources/test_data/softmax.json', buildOperationWithSingleInput);