| |
| |
| |
| |
| |
| import sys |
| import numpy as np |
| |
| def print_test_debug_info(testname, items_dict): |
| filename = "debug_operator_onnxifi_" + testname + ".txt" |
| np.set_printoptions(threshold=sys.maxsize) |
| with open(filename, 'w') as f: |
| for key, value in items_dict.items(): |
| print(key, value) |
| f.write("{}\n".format(key)) |
| f.write("{}\n".format(value)) |
| |
| def print_net(net): |
| for i in net.external_input: |
| print("Input: {}".format(i)) |
| for i in net.external_output: |
| print("Output: {}".format(i)) |
| for op in net.op: |
| print("Op {}".format(op.type)) |
| for x in op.input: |
| print(" input: {}".format(x)) |
| for y in op.output: |
| print(" output: {}".format(y)) |
| |
| def _sigmoid(x): |
| return 1. / (1. + np.exp(np.float64(-x))) |
| |
| def _tanh(x): |
| return np.tanh(np.float64(x)) |
| |
| def _swish(x): |
| return np.float64(x) * _sigmoid(x) |
| |
| def _gelu_by_sigmoid(x): |
| return np.float64(x) / (1. + np.exp(np.float64(x) * 1.702)) |
| |
| |
| def _acc_func(opname, x): |
| if opname == "Swish": |
| return _swish(x) |
| elif opname == "Sigmoid": |
| return _sigmoid(x) |
| elif opname == "Tanh": |
| return _tanh(x) |
| elif opname == "Gelu": |
| return _gelu_by_sigmoid(x) |
| else: |
| return x |
| |
| def _get_ulp16(x): |
| abs_x = np.abs(x) |
| mask = (abs_x > 2.**(-14)) |
| abs_x = mask * abs_x + (1 - mask) * 2.**(-14) |
| k = np.floor(np.log2(abs_x)) |
| return 2.**(k - 10) |
| |
| def compute_ulp_error(opname, xvec, y_nnpi): |
| y_acc = _acc_func(opname, np.float64(xvec)) |
| scale = 1. / _get_ulp16(y_acc) |
| return (y_nnpi - y_acc) * scale |