def create_stimuli(root, ksize, stride, bitwidth_data_in, bitwidth_data_out, bitwidth_weights, channel_in, channel_out, width, height): a_rand = random_fixed_array((1, channel_in, height, width), bitwidth_data_in) a_in = v_to_fixedint(a_rand) np.savetxt(join(root, "gen", f"input_{ksize}_{stride}_{channel_in}.csv"), flatten(a_in), delimiter=", ", fmt="%3d") a_weights_rand = random_fixed_array( (channel_out, channel_in, ksize, ksize), bitwidth_weights) a_bias_rand = random_fixed_array((channel_out, ), bitwidth_weights) # weights and bias to txt weights_to_files(a_weights_rand, a_bias_rand, f"conv_{ksize}_{stride}_{channel_in}", join(root, "gen")) # assign the outputs conv_out = v_to_fixedint( conv(a_rand, a_weights_rand, a_bias_rand, (ksize, stride), bitwidth_data_out.as_tuple)) filename = join(root, "gen", f"output_{ksize}_{stride}_{channel_in}.csv") with open(filename, "w") as outfile: np.savetxt(outfile, flatten(conv_out), delimiter=", ", fmt="%3d")
def create_stimuli(root, ksize, stride, bitwidth, shape): a_rand = random_fixed_array(shape, bitwidth) a_in = v_to_fixedint(a_rand) np.savetxt(join(root, "src", "input_%d_%d.csv" % (ksize, stride)), flatten(a_in), delimiter=", ", fmt="%3d") # assign the outputs filename = join(root, "src", "output_%d_%d.csv" % (ksize, stride)) max_out = v_to_fixedint(max_pool(a_rand, ksize, stride)) with open(filename, "w") as outfile: np.savetxt(outfile, flatten(max_out), delimiter=", ", fmt="%3d")
def create_stimuli(root, ksize, stride, total_bits, frac_bits, channel, width, height): int_bits = total_bits - frac_bits a_rand = np.random.randint(2 ** total_bits, size=(1, channel, height, width)) np.savetxt(join(root, "src", "input_%d_%d.csv" % (ksize, stride)), flatten(a_rand), delimiter=", ", fmt="%3d") # assign the outputs filename = join(root, "src", "output_%d_%d.csv" % (ksize, stride)) max_out = max_pool(a_rand, ksize, stride, (int_bits, frac_bits)) with open(filename, "w") as outfile: np.savetxt(outfile, flatten(max_out), delimiter=", ", fmt="%3d")
def create_arrays(root, w, h, ch): id_ = "one" if ch == 1 else "multiple" a_rand = random_fixed_array((1, ch, h, w), 8, 0) a_in = v_float2fixedint(a_rand, 8, 0) np.savetxt(join(root, "src", "input_%s.csv" % id_), flatten(a_in), delimiter=", ", fmt="%3d") a_out = v_float2fixedint(zero_pad(a_rand), 8, 0) np.savetxt(join(root, "src", "output_%s.csv" % id_), flatten(a_out), delimiter=", ", fmt="%3d")
def create_stimuli(root, model_name): model = onnx.load(join(root, model_name)) shape = cnn_onnx.parse_param.get_input_shape(model) in_ = np.random.randint(256, size=shape) out_ = cnn_onnx.inference.numpy_inference(model, in_) np.savetxt(join(root, "input.csv"), flatten(in_), delimiter=", ", fmt="%3d") np.savetxt(join(root, "output.csv"), out_, delimiter=", ", fmt="%3d")
def create_stimuli(root, w, h, ch, total_bits, frac_bits): int_bits = total_bits - frac_bits a_rand = np.random.randint(256, size=(1, ch, h, w), dtype=np.uint8) np.savetxt(join(root, "src", "input.csv"), flatten(a_rand), delimiter=", ", fmt="%3d") a_out = avg_pool(a_rand, (int_bits, frac_bits)) np.savetxt(join(root, "src", "output.csv"), a_out, delimiter=", ", fmt="%3d")
def create_stimuli(root, model_name): model = onnx.load(join(root, model_name)) shape = cnn_onnx.parse_param.get_input_shape(model) a_rand = random_fixed_array(shape, Bitwidth(8, 8, 0), signed=False) a_in = v_to_fixedint(a_rand) a_out = v_to_fixedint(cnn_onnx.inference.numpy_inference(model, a_rand)) np.savetxt(join(root, "input.csv"), flatten(a_in), delimiter=", ", fmt="%3d") np.savetxt(join(root, "output.csv"), a_out, delimiter=", ", fmt="%3d")
def create_stimuli(root, shape, bitwidth): a_rand = random_fixed_array(shape, bitwidth) a_in = v_to_fixedint(a_rand) np.savetxt(join(root, "src", "input.csv"), flatten(a_in), delimiter=", ", fmt="%3d") a_out = v_to_fixedint(avg_pool(a_rand)) np.savetxt(join(root, "src", "output.csv"), a_out, delimiter=", ", fmt="%3d")
def create_stimuli(root, ksize, stride, total_bits_data, frac_bits_data_in, frac_bits_data_out, total_bits_weight, frac_bits_weight, channel_in, channel_out, width, height): int_bits_data_in = total_bits_data - frac_bits_data_in int_bits_data_out = total_bits_data - frac_bits_data_out a_rand = np.random.randint(256, size=(1, channel_in, height, width), dtype=np.uint8) np.savetxt(join(root, "gen", f"input_{ksize}_{stride}_{channel_in}.csv"), flatten(a_rand), delimiter=", ", fmt="%3d") int_bits_weight = total_bits_weight - frac_bits_weight scale = 2**frac_bits_weight a_weights_rand = np.random.randint(-2**7, 2**7 - 1, size=(channel_out, channel_in, ksize, ksize), dtype=np.int8) a_bias_rand = np.random.randint(-2**7, 2**7 - 1, size=(channel_out, ), dtype=np.int8) # weights and bias to txt weights_to_files(a_weights_rand / scale, a_bias_rand / scale, (int_bits_weight, frac_bits_weight), f"conv_{ksize}_{stride}_{channel_in}", join(root, "gen")) # assign the outputs conv_out = conv(a_rand, a_weights_rand, a_bias_rand, (ksize, stride), (int_bits_data_in, frac_bits_data_in, int_bits_data_out, frac_bits_data_out, int_bits_weight, frac_bits_weight)) filename = join(root, "gen", f"output_{ksize}_{stride}_{channel_in}.csv") with open(filename, "w") as outfile: np.savetxt(outfile, flatten(conv_out), delimiter=", ", fmt="%3d")
def create_stimuli(root, model_name): model = onnx.load(join(root, model_name)) shape = cnn_onnx.parse_param.get_input_shape(model) a_rand = random_fixed_array(shape, Bitwidth(8, 8, 0), signed=False) a_in = v_to_fixedint(a_rand) a_out = v_to_fixedint(cnn_onnx.inference.numpy_inference(model, a_rand)) # ONNX runtime prediction, TODO: doesn't work right now # https://github.com/microsoft/onnxruntime/issues/2964 # sess = rt.InferenceSession(join(root, model_name)) # input_name = sess.get_inputs()[0].name # pred_onnx = sess.run(None, {input_name: in_.astype(np.float32)})[0] # print(pred_onnx) np.savetxt(join(root, "input.csv"), flatten(a_in), delimiter=", ", fmt="%3d") np.savetxt(join(root, "output.csv"), a_out, delimiter=", ", fmt="%3d")
def create_stimuli(root, model_name): model = onnx.load(join(root, model_name)) shape = cnn_onnx.parse_param.get_input_shape(model) in_ = np.random.randint(256, size=shape, dtype=np.uint8) out_ = cnn_onnx.inference.numpy_inference(model, in_) # ONNX runtime prediction, TODO: doesn't work right now # https://github.com/microsoft/onnxruntime/issues/2964 # sess = rt.InferenceSession(join(root, model_name)) # input_name = sess.get_inputs()[0].name # pred_onnx = sess.run(None, {input_name: in_.astype(np.float32)})[0] # print(pred_onnx) np.savetxt(join(root, "input.csv"), flatten(in_), delimiter=", ", fmt="%3d") np.savetxt(join(root, "output.csv"), out_, delimiter=", ", fmt="%3d")