Не удается получить значения активации симуляции из моделей tfmodels и tflite.Они из одного графика - PullRequest
0 голосов
/ 01 апреля 2019

Я обучил квантованную модель 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-разрядные целые числа, я буду очень признателен, если вы подскажете, как получить целочисленные значения смещения, такие как веса фильтров.

...