Restaurar variables específicas de TensorFlow a una capa específica (Restaurar por nombre)

Supongamos que entrené un modelo TensorFlow y lo guardé, ahora tengo un modelo diferente, y quiero usar algunos de los pesos en el modelo guardado para algunas de las capas de mi modelo (tienen la misma forma).

Ahora, pude encontrar cómo guardar variables específicas de un modelo (con nombres específicos) pero no pude encontrar ningún ejemplo para restaurar esas variables por nombre.

Por ejemplo, supongamos que en mi modelo guardado guardé un tensor de pesos (con alguna forma) llamado “v1”. Ahora en mi nuevo modelo tengo un tensor de pesos llamado “v2” (que tiene la misma forma que el tensor “v1”). Ahora quiero cargar las variables guardadas de “v1” en mi tensor de pesos “v2”, o incluso mejor cargar estos pesos de “v1” a tensor múltiple en mi nuevo gráfico.

¿Es eso posible? Si es así, ¿cómo lo hago?

He encontrado una solución para resolver este problema.

Lo que puede hacer es guardar los valores variables directamente en su disco, ya sea como un valor o como un diccionario con claves como nombres y valores de tensor. Por ejemplo:

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

Luego, puede cargar cualquier variable de este diccionario a cualquier otra variable que desee.

En mi ejemplo, supongamos que el tensor original se llama “v1” y que los dos que quiero cargar son “v2” y “v3”, se puede hacer lo siguiente:

 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]) 

Esto, por supuesto, solo está limitado por el hecho de que “v1”, “v2” y “v3” deben tener la misma forma.

Usando este código de ejemplo, puede guardar cualquier variable y cargarla en cualquier otra variable que desee, sin la necesidad de que el gráfico original coincida con el actual.