Я хочу экспортировать квантованную модель на FPGA
Я применил поток обучения с учетом квантования согласно https://www.tensorflow.org/model_optimization/guide/quantization/training_example, чтобы получить tflite-модель с квантованием uint8.
Набор данных: MNIST
Используемая модель:
model = keras.Sequential([
keras.layers.InputLayer(input_shape=(28, 28)),
keras.layers.Flatten(),
keras.layers.Dense(32, activation=tf.nn.relu),
keras.layers.Dense(16, activation=tf.nn.relu),
keras.layers.Dense(10, activation=tf.nn.softmax)
])
Точность Полученные результаты tflite-модели
Quant TFLite test_accuracy: 0.9478
Quant TF test accuracy: 0.9527000188827515
Теперь я хочу использовать эту квантованную модель на FPGA. Итак, я экспортирую модель tflite и экспортирую веса как массив numpy, используя netron (https://github.com/lutzroeder/netron).
Используя эти веса, я выполняю вывод для python путем ручного кодирования прямой путь, как показано. Я получаю точность = 32% по сравнению с точностью 95%, полученной с использованием интерпретатора tflite.
Вот кодированный вручную прямой путь
w_32x784=np.load("w_32x784.npy")
b_32 = np.load("b_32.npy")
w_16x32 = np.load("w_16x32.npy")
b_16 = np.load("b_16.npy")
w_10x16 = np.load("w_10x16.npy")
b_10 =np.load("b_10.npy")
def eval_q(x_inp):
layer1_op = relu(np.squeeze(np.matmul(w_32x784,x_inp))+b_32)
layer2_op = relu(np.squeeze(np.matmul(w_16x32,layer1_op))+b_16)
layer3_op = np.squeeze(np.matmul(w_10x16,layer2_op))+b_10
predict = np.argmax(layer3_op)
return predict
def relu(w):
op =[x if x > 0 else 0 for x in w]
return op
# Evaluate Model
predictions=[]
for img in test_images:
x_inp = img.reshape(784,1)
predictions.append(eval_q(x_inp))
print((predictions==test_labels).mean())
Accuracy =0.3248
Пожалуйста, помогите мне найти, где я Я ошибаюсь.