У меня есть модель keras, и я пытаюсь использовать обратный вызов ModelCheckpoint
, чтобы сохранить объект модели, а не только веса, после эпохи обучения.Примечание. Я отключил все параметры многопоточности в функции train_generator
.
Когда код выполняет обратный вызов, я получаю сообщение об ошибке, связанной с блокируемым объектом.Я установил точку останова прямо перед функцией, которая генерирует ошибку для проверки объекта.Из консоли отладчика python я получаю похожую ошибку TypeError: can't pickle _thread.RLock objects
, когда пытаюсь вручную выбрать объект из командной строки pdb.
Я также попытался с успехом использовать модуль inspect
.
Я хотел бы знать, как я могу определить, что нацелено на этот объект.Затем планируется выяснить, как заставить эту функцию освободить блокировку объекта.
Обновление
Чуть больше, углубившись в код для train_generator
похоже, проблема в том, что в структуре данных, представляющей мою модель, OrderedDict
есть значение, представляющее собой неоцененный тип данных с постоянным тензорным потоком.Пара вещей.Во-первых, поскольку сеанс не сохраняется с моделью, я не могу оценить tf.constant.Во-вторых, это, кажется, артефакт тензорного потока, работающего в режиме отложенного вычисления.Может показаться, что группа обеспечения доступности баз данных, созданная в tenorflow, предотвращает оценку с помощью RLocks
Это то, что я до сих пор выводил.Таким образом, следующий шаг - запустить тензор потока в активном режиме и посмотреть, исчезнет ли проблема.