Through experimental analysis, we classify the obtained bugs. The classification results are shown in the following table:
Examples:
implementation bug
Conv2dTranspose
initialisation differences
[{'name': 'Transpose', 'params': {'output_shape': [0, 2, 3, 1], 'tensor_space': 4}}, {'name': 'ReduceSum', 'params': {'keep_dims': False, 'dim': 1, 'tensor_space': 4}}, {'name': 'Flatten'}, {'name': 'Dense', 'params': {'in_features': 28, 'out_features': 10}}, {'name': 'Softmax'}]
data format differences
Sigmoid + RSqrt / lambda(1/(x^2))
operator setting differences
MXNet uses unity cuda
precision
GlobalAvgPool2d
random error
When using Lambda, the output of the 1/x process is very likely to have nan/inf.
Finding 2.1. The existence of implementation differences leads to a large amount of false positives by existing testing approaches.
To reduce the false positives suffer from these implementation differences, we can consider strategies like initialization transformations, data format transformations and setting transformation for specific operators.