я следующая ситуация:TensorFlow: Восстановление переменных из из нескольких контрольных точек
у меня есть 2 модель написана в 2 отдельных сценариях:
Модели А состоит из переменных
a1
,a2
иa3
, и записывается вA.py
Модель B состоит из переменных
b1
,b2
, иb3
, и написано в B.py
В каждом из A.py
и B.py
, у меня есть tf.train.Saver
, сохраняющий блокпост всех локальных переменных, и давайте называть файлы контрольных точек ckptA
и ckptB
соответственно ,
Теперь я хочу сделать модель C, которая использует a1
и b1
. Я могу сделать так, чтобы точно такое же имя переменной для a1
использовалось как в A, так и в C с помощью var_scope (и то же самое для b1
).
Вопрос заключается в том, как я мог бы загрузить a1
и b1
из ckptA
и ckptB
в модели C? Например, будет ли следующая работа?
saver.restore(session, ckptA_location)
saver.restore(session, ckptB_location)
Возможно, возникнет ошибка, если вы попытаетесь восстановить один и тот же сеанс дважды? Хотелось бы пожаловаться на то, что для дополнительных переменных нет выделенных «слотов» (b2
, b3
, , , a3
), или это просто восстановит переменные, которые он может, и только жалуется, есть ли какие-то другие переменные в C, которые неинициализированы?
Я пытаюсь написать некоторый код, чтобы проверить это сейчас, но я хотел бы увидеть канонический подход к этой проблеме, потому что это часто встречается при попытке повторно использовать некоторые предварительно подготовленные веса.
Спасибо!
первые фрагменты кода относятся к материалам, которые должны быть написаны на C.py правильно? и он написан в конце определения графа, где a1 a2 a3 и b1 b2 b3 определены в C.py? Мой первоначальный вопрос был в том, что если только a1 и b1 определены в C и ничего больше? –
Извинения - обновленный ответ, чтобы покрыть этот случай. Если вы переопределите переменные на C.py, тогда все будет намного проще! – mrry
Еще одно продолжение: когда мы выполняем это утверждение «saver_a.restore (session, ckptA_location)» saver_a создается с помощью единственной переменной [a1] и ничего больше, но ckptA содержит значения для всех a1, a2, a3. Вы говорите, что это не проблема, так как заставка будет искать только a1 в ckpt и восстанавливать a1 до модели C, игнорируя a2 и a3? И последний вопрос: a1 в C будет идентифицироваться как a1 в ckptA, если оба a1 создаются (в C и A) с тем же именем? –