Prerequisite
- The op should already be supported in TF api.
- The op should not have been supported in TF.js, see op support list.
- Check here for various ops supported in different backends.
Implementation Details
-
Create a new op in
tfjs-core/opsdirectory.The op file should have the following elements: 1. License information. 2. JSDoc comment. 3. Input validations, if any. 4. Delegate the execution to the right kernel through
ENGINE.runKernel().In addition, for the kernel delegation to work properly, in
kernel_names.tsfile, define: 1. kernel name. 2. input type. 3. attribute type. -
Export the op file in ops.ts in the same directory.
-
Add tests for the op in the same directory. Test file name should be the same as the op file’s name with _test suffix.
-
Exclude the test in all the backends, and add annotation “Not implemented yet.”. See below for where to exclude the test in each backend:
cpu backend
In run_tests.ts, customInclude method, add:
// Not implemented yet.
if (testName.includes(test_name)) {
return false;
}
webgl backend
In setup_test.ts, customInclude method, add:
// Not implemented yet.
if (testName.includes(test_name)) {
return false;
}
node backend
In run_tests.ts, IGNORE_LIST, add test_name to the list.
Example PRs
Implementation Details
-
Create a new kernel in the
kernelsdirectory of a backend.The kernel file should have the following elements:
- License information.
- The kernel implementation, and export it.
- Export a
kernelConfig.
-
Register the kernel in
register_all_kernels.tsin the corresponding backend. -
Remove the op from test exclusion list in the corresponding backend. For wasm backend, add the test to the inclusion list.
Example PRs
-
Add op mapping in the op list ts file, use your best judgement to assign an op category:
tfjs-converter/python/tensorflowjs/op_list/{corresponding_op_category}.json. The corresponding.tsfile will be automatically generated when converter is built. Use the TF C++ op api as reference for tfOpName, inputs, and attrs. -
Find the corresponding executor for the op and add the op to the switch, the executors are in
tfjs-converter/src/operations/executors. -
Add a test to the corresponding executor test file.
-
Update the supported op doc in
tfjs-converter/docs/supported_ops.md.
Example PRs