tutorial reconocimiento imagenes imagen espaƱol ejemplos ejemplo documentacion clasificador basicos tensorflow autoencoder tf-slim

reconocimiento - Reutilizando los pesos de las capas en Tensorflow



tensorflow reconocimiento de imagen (1)

Estoy usando tf.slim para implementar un autoencoder. Soy completamente convolucional con la siguiente arquitectura:

[conv, outputs = 1] => [conv, outputs = 15] => [conv, outputs = 25] => => [conv_transpose, outputs = 25] => [conv_transpose, outputs = 15] => [conv_transpose, outputs = 1]

Tiene que ser completamente convolucional y no puedo agrupar (limitaciones del problema más grande). Quiero usar pesas atadas, entonces

encoder_W_3 = decoder_W_1_Transposed

(por lo que los pesos de la primera capa del decodificador son los de la última capa del codificador, transpuesta).

Si reutilizo los pesos de la manera habitual en que tfslim te permite reutilizarlos, es decir, reutilizar = Verdadero y luego solo proporcionar el nombre del alcance de la capa que deseas reutilizar, obtengo un problema de tamaño:

ValueError: Trying to share variable cnn_block_3/weights, but specified shape (21, 11, 25, 25) and found shape (21, 11, 15, 25).

Esto tiene sentido, si no transpone los pesos del modelo anterior. ¿Alguien tiene una idea sobre cómo puedo transponer esos pesos?

PD: Sé que esto es muy abstracto y manual, pero estoy trabajando con una API personalizada, además de tfslim, por lo que no puedo publicar ejemplos de código aquí.


¿Alguien tiene una idea sobre cómo puedo transponer esos pesos?

La transposición es simple:

new_weights = tf.transpose(weights, perm=[0, 1, 3, 2])

intercambiará los dos últimos ejes.

Sin embargo, como mencionó @Seven, eso no sería suficiente para corregir el error, ya que el número total de pesas cambió.