Я модифицирую сеть deeplab. Я добавил узел к первому уровню экстрактора функций mobil enet -v3, который повторно использовал существующие переменные. Поскольку никаких дополнительных параметров не потребуется, я теоретически мог бы загрузить старую контрольную точку.
Вот ситуация, которую я не мог понять:
когда я начинаю тренироваться в новой пустой папке, загрузите контрольную точку вот так:
python "${WORK_DIR}"/train.py \
#--didn't change other parameters \
--train_logdir="${EXP_DIR}/train" \
--fine_tune_batch_norm=true \
--tf_initial_checkpoint="init/deeplab/model.ckpt"
Я получаю сообщение об ошибке:
ValueError: Total size of new array must be unchanged for MobilenetV3/Conv/BatchNorm/gamma lh_shape: [(16,)], rh_shape: [(480,)]
НО, если я начинаю обучение в новой пустой папке, не загружайте контрольную точку:
python "${WORK_DIR}"/train.py \
#--didn't change other parameters \
--train_logdir="${EXP_DIR}/train" \
--fine_tune_batch_norm=false \
#--tf_initial_checkpoint="init/deeplab/model.ckpt" #i.e. no checkpoint
Я мог бы плавно начать обучение.
Что меня еще больше сбило с толку, так это то, что если в той же папке (, которая была каталогом train_logdir без загруженной контрольной точки ), я пытаюсь начать тренировку с контрольной точки, я мог бы начать тренировку без ошибок:
# same code as the first code block
python "${WORK_DIR}"/train.py \
#--didn't change other parameters \
--train_logdir="${EXP_DIR}/train" \
--fine_tune_batch_norm=true \
--tf_initial_checkpoint="init/deeplab/model.ckpt"
Как такое могло случиться? --Train_logdir может каким-то образом сохранить форму параметров пакетной нормализации из последнего обучения?