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