Я обучил квантованную модель inception_v1 из моделей tenorflow , преобразовал ее в файл .pb
после комментария в export_inference_graph.py
из того же проекта, затем преобразовал файл .pb
в файл .tflite
следующий за документом toco .
Теперь у меня есть 2 файла, файл .pb
и файл tflite
.
Хотя я получил результат симуляционного вывода в слое Prediction, Я получил совершенно разные значения активации в средних слоях !!
Я хочу знать, почему это произошло, и как соотнести узлы из файлов .pb
с файлами из .tflite
файлов.
Спасибо за помощь!
Что я пробовал
Вывод модели в формате .pb
следует за проблемой . Обратите внимание, что входные данные модели были нормированы на [-1, 1] при обучении, я также делал это перед выводом.
Для вывода модели в формате .tflite
используется интерфейс lite.Interpreter.
Я получил тот же или почти такой же результат, когда узлами вывода являются Preditions или Weights (после квантования). Потому что я мог получить почти целые значения веса после квантования значений веса из файла .pb
, я полагал, что нашел правильные узлы и их параметры квантования. Значения активации также являются почти целыми значениями. Но значения в формате 2 файлов совершенно разные! (После квантования), например. позиции с нулевым значением очень разные.
Например, я получил значения активации в узле InceptionV1/InceptionV1/Mixed_3c/Branch_1/Conv2d_0b_3x3/act_quant/FakeQuantWithMinMaxVars:0
из файла .pb
и значения в узле InceptionV1/InceptionV1/Mixed_3c/Branch_1/Conv2d_0b_3x3/Relu
из файла .tflite
. Они совершенно разные даже после квантования.
Еще более запутанно, в файле .tflite
я получил значения активации в узлах InceptionV1/InceptionV1/Conv2d_1a_7x7/Relu
и InceptionV1/InceptionV1/MaxPool_2a_3x3/MaxPool
. Первый (назовем его 'x') - это ввод последнего (назовите его 'y') в соответствии с графиком. И когда я сделал max_pool (x), я не могу получить y вообще !!! Это действительно сбивало с толку.
Обратите внимание: входное изображение было таким же, и предварительная обработка была такой же, как и тренировка, если я не неправильно понял некоторые детали обучающих кодов и то, как работает tflite.
Кроме того, я не могу получить целочисленные значения смещения после квантования. Хотя это менее важно, поскольку они представляют собой 32-разрядные целые числа, я буду очень признателен, если вы подскажете, как получить целочисленные значения смещения, такие как веса фильтров.