Получение ошибочных результатов при выполнении логического вывода с квантованными весами TFlite - PullRequest
0 голосов
/ 08 мая 2020

Я хочу экспортировать квантованную модель на 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

Пожалуйста, помогите мне найти, где я Я ошибаюсь.

1 Ответ

1 голос
/ 11 мая 2020

Возможно, вы захотите проверить, как работает квантование в TensorFlow - возможно, вы пропустили обработку нулевой точки и масштабирования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...