Fix dropout converters logic
Context
Fix ONNX Dropout operator compatibility issues across different opset versions. The current implementation was missing proper handling for opset version differences where:
-
Opsets < 12: Use
ratio
as attribute -
Opsets ≥ 12: Use
ratio
as optional input tensor
This caused export failures and all Dropout tests to be marked as XFAIL due to argument signature mismatches.
Modified files
-
aidge_onnx/node_export/aidge_converters/dropout.py
: Partial rewrite to handle opset version differences for export (Aidge → ONNX) -
aidge_onnx/node_import/onnx_converters/dropout.py
: Enhanced to extract ratio values from input tensors for opset ≥ 12 (ONNX → Aidge) -
aidge_onnx/unit_tests/test_onnx_nodes_export.py
: Removed outdated Dropout XFAIL entry to enable testing
Detailed major modifications
Import converter (dropout.py
import):
- Added opset version detection with
< 12
vs≥ 12
branching logic - Added tensor value extraction using
np.array(ratio_tensor).item()
pattern - Error handling with try-catch and fallback to default probability
- Maintains backward compatibility for attribute-based ratios
Export converter (dropout.py
export):
- Added opset version detection with
< 12
vs≥ 12
branching logic - For opset < 12: Single data input +
ratio
attribute - For opset ≥ 12: Creates Constant node for ratio value as input tensor when needed
Remaining Dropout XFAIL entries requiring fixes
Import issues (test_onnx_nodes_import.py
):
-
dropout/training_dropout*
- "unsupported 'training_mode' attribute" -
dropout/dropout_default_mask.*
- "RuntimeError: Output index out of bound" -
dropout/dropout_default_ratio/0
- "Attribute 'seed' is not supported for operator DropOut" -
dropout/dropout_default/0
- "Attribute 'seed' is not supported for operator DropOut"
Forward testing issues:
-
test_onnx_nodes_import_forward.py
:dropout.*/dropout_.*/0
- "DropOut cannot be tested without setting the same seed" -
test_unit_cases_import_forward.py
:dropout.*
- "DropOut cannot be tested without setting the same seed"
TODO
-
Fix Dropout export converter for opset compatibility -
Implement input-tensor ratio value extraction for import -
Remove outdated XFAIL entry to enable Dropout testingns -
Fix training_mode attribute support -
Fix seed attribute handling -
Resolve output index bounds issue for mask output -
Implement deterministic testing with seed support
References
https://onnx.ai/onnx/operators/onnx__Dropout.html
Key insight: There are still 6 Dropout XFAIL entries that need to be addressed, primarily around training_mode
attribute, seed
attribute support, and deterministic testing capabilities.