2016-04-05 2 views
4

Я пытаюсь выяснить, как импортировать извлеченную сохраненную модель как часть более крупной модели.Tensorflow: перенос переменных по графикам

Чтобы быть конкретным, у меня есть RNN и некоторые матрицы внедрения (модель A), которые были обучены большому набору данных, хранящемуся в файле .ckpt. У меня также есть другая модель (модель B), которая использует эту ту же самую RNN и модель внедрения в качестве подмодели, с дополнительными операциями для управления выходом этого RNN и использования его для классификации.

Графические определения для этих двух моделей различны, но я хотел бы инициализировать модель B сохраненной версией модели A. Как это можно сделать?

Моя попытка заключается в том, чтобы попытаться загрузить модель A в качестве другой модели под другой сеанс и график, а затем присвоить соответствующие матрицы в модели B тем, кто из A, но это не работает.

Вот соответствующая часть кода:

sup = supervised() # spins up a class with an interactive session inside and sets up the graph 
g = tf.Graph() 
with g.as_default(): 
    unsup = unsupervised('unsup.ckpt') # loads in model A from file 
             # w/ another session (not interactive) 
    # get matrix from unsup and assign to sup 
    sup._word_embeddings.assign(unsup.session.run(unsup._word_embeddings)) 
    # do the same for the RNN 
    sup._gate_matrix.assign(unsup.session.run(unsup._gate_matrix)) 
    sup._gate_bias.assign(unsup.session.run(unsup._gate_bias)) 
    sup._cand_matrix.assign(unsup.session.run(unsup._cand_matrix)) 
    sup._cand_bias.assign(unsup.session.run(unsup._cand_bias)) 

Обратите внимание, что обе модели имеют явные переменные, присвоенные матриц из rnn_cell.linear для RNN с помощью tf.get_variable() при инстанцировании класса.

Заранее благодарен!

ответ

1

Ответ оказался таким простым. Это просто создало назначение ops ... Чтобы выполнить задание, запустите ops в соответствующем сеансе.

+1

Привет, Не могли бы вы поделиться своим решением? Спасибо – Sentient07

+0

Извините, у меня больше нет кода для этого. В основном все эти присваиваемые операторы являются символьными операциями, определенными на 'g', поэтому для их запуска вам нужно запустить' g' в 'session.run'. Надеюсь это поможет. – Taaam

+0

То, что я намереваюсь сделать, это восстановить весы для двух разных моделей (которые я рассматриваю как два разных графика), тогда я хочу, чтобы первый вход был входом второго графика. – Sentient07

Смежные вопросы