Обучение квантованию для модели Tensorflow Keras - PullRequest
0 голосов
/ 31 марта 2020

Я хочу учесть квантование поезда с моей моделью keras. Я пытался, как показано ниже. Я использую тензор потока 1.14.0

train_graph = tf.Graph()
train_sess = tf.compat.v1.Session(graph=train_graph)
tf.compat.v1.keras.backend.set_session(train_sess)

with train_graph.as_default():
    tf.keras.backend.set_learning_phase(1)
    model = my_keras_model()

    tf.contrib.quantize.create_training_graph(input_graph = train_graph, quant_delay=5)
    train_sess.run(tf.global_variables_initializer()) 

    model.compile(...)
    model.fit_generator(...)

    saver = tf.compat.v1.train.Saver()  
    saver.save(train_sess, checkpoint_path)

Он работает без ошибок.

Однако размер сохраненной модели (h5 и ckpt) полностью совпадает с размером модели без квантования.

Это правильный путь? Как я могу проверить, хорошо ли он квантован?

Или есть лучший способ квантования?

1 Ответ

0 голосов
/ 06 мая 2020

Когда вы завершаете sh обучение с учетом квантования и сохраняете свою модель на диск, она фактически еще не квантуется. Другими словами, он «подготовлен» к квантованию, но весовые коэффициенты все еще плавают32. Вы должны в дальнейшем преобразовать свою модель в TFLite, чтобы она была фактически квантована. Это можно сделать с помощью следующего фрагмента кода:

converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]

quantized_tflite_model = converter.convert()

Это приведет к квантованию вашей модели с использованием весов int8 и активаций uint8.

Посмотрите официальный пример для дальнейшего использования.

...