2016-10-09 6 views
4

Предположим, что я обучил модель TensorFlow и сохранил ее, теперь у меня другая модель, и я хочу использовать некоторые из весов в сохраненной модели для некоторых слоев в моей модели (они имеют одинаковую форму).Восстановление определенных переменных TensorFlow на определенный уровень (восстановление по имени)

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

Например, предположим, что в моей сохраненной модели я сохранил тензор весов (с некоторой формой) под названием «v1». Теперь в моей новой модели у меня тензор весов, называемый «v2» (который имеет одинаковую форму тензора «v1»). Теперь я хочу загрузить сохраненные переменные «v1» в мой тензор весов «v2» или даже лучше загрузить эти весы «v1» в несколько тензоров на моем новом графике.

Возможно ли это? Если да, то как мне это сделать?

ответ

0

Я нашел обходное решение для решения этой проблемы.

Что вы можете сделать, это сохранить значения переменных непосредственно на вашем диске, либо как значение, либо как словарь с ключами как имена и значения тензора. Например:

vars_dict = {} 
for tensor in (list_of_tensors_you_want_to_save): 
    vars_dict[tensor.name] = sess.run(tensor) 

Затем вы можете загрузить любую переменную из этого словаря в любой другой переменной, которую вы хотите.

В моем примере, предположим, что исходный тензор называется «v1» и два тензора Я хочу, чтобы загрузить являются «v2» и «v3», то можно сделать следующее:

tensor_to_load_1 = tf.get_default_graph().get_tensor_by_name("v2") 
tensor_to_load_2 = tf.get_default_graph().get_tensor_by_name("v3") 

assign_op_1 = tf.assign(tensor_to_load_1, vars_dict["v1"]) 
assign_op_1 = tf.assign(tensor_to_load_2, vars_dict["v1"]) 

sess.run([assign_op_1, assign_op_2]) 

Это, конечно, ограничивается только тем, что «v1», «v2» и «v3» должны иметь одинаковую форму.

Используя этот пример кода, вы можете сохранять любые переменные и загружать их в любые другие переменные, не требуя, чтобы исходный граф соответствовал вашему текущему.

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