Максимальное значение Relu6 больше 6 в сверточных слоях квантованной мобильной сети с квантованным обучением.
Я использую tensorflow slim для обучения пользовательской модели mobilenet_v1_1.0_224_quant для своего проекта. Я использовал эту команду:
python train_image_classifier.py --train_dir=TRAINDIR --dataset_dir=classes_data --dataset_name=classes --dataset_split_name=train --model_name=mobilenet_v1 --train_image_size=224 --checkpoint_path=mobilenet_v1_1.0_224_quant/mobilenet_v1_1.0_224_quant.ckpt --max_number_of_steps=200 --checkpoint_exclude_scopes=MobilenetV1/Logits --trainable_scopes=MobilenetV1/Logits --quantize_delay=0 --clone_on_cpu=True
в https://github.com/tensorflow/models/tree/master/research/slim, и все прошло хорошо. Потери быстро сошлись примерно до 0.11, и я получил это для eval Accuracy [0.81] eval / Recall_51.
Однако, когда я заморозил график и проверил его, я увидел, что максимальное значение Relu6 было немного больше 6. Мой замороженный график с максимальным значением Relu6 больше 6 В примере модель mobilenet_v1_1.0_224_quant, обученная на 1000 классах на imageenet, которые они использовали, их Relu6 максимальное значение было меньше 6, поэтому я думаю, что они верны. Пример замороженного графика с правильным значением Relu6 max.
Проблема с максимальным значением Relu6, превышающим 6, заключается в том, что я думаю, что моя модель не работает из-за этого. Когда я запускаю python label_image.py в своем файле tflite, я получаю много 1.000 для класса, когда число не должно быть таким большим, а иногда 1.000 находится в неправильном классе. Кто-нибудь знает, что может быть причиной этого? Я тонко настраиваюсь с контрольной точки, и ресурсы в Интернете говорят, что вы должны установить задержку квантования на 0 при тонкой настройке, чтобы начать обучение с квантованным осознанием. Я не знаю, что является причиной того, что максимальное значение Relu6 превышает 6.