python - redes - Pre-entrenamiento sin supervisión para red neuronal convolucional en theano
tensorflow ejemplos basicos (1)
Este documento describe un enfoque para construir un autoencoder convolucional apilado. Basado en ese documento y en algunas búsquedas de Google, pude implementar la red descrita. Básicamente, todo lo que necesita se describe en la red convolucional de Theano y los tutoriales de autoencoder con una excepción crucial: cómo revertir el paso de agrupamiento máximo en la red convolucional. Pude resolverlo usando un método de esta discusión : la parte más complicada es calcular las dimensiones correctas para W_prime, ya que dependerán de los tamaños de filtro de avance y de la relación de agrupamiento. Aquí está mi función inversora:
def get_reconstructed_input(self, hidden):
""" Computes the reconstructed input given the values of the hidden layer """
repeated_conv = conv.conv2d(input = hidden, filters = self.W_prime, border_mode=''full'')
multiple_conv_out = [repeated_conv.flatten()] * np.prod(self.poolsize)
stacked_conv_neibs = T.stack(*multiple_conv_out).T
stretch_unpooling_out = neibs2images(stacked_conv_neibs, self.pl, self.x.shape)
rectified_linear_activation = lambda x: T.maximum(0.0, x)
return rectified_linear_activation(stretch_unpooling_out + self.b_prime.dimshuffle(''x'', 0, ''x'', ''x''))
Me gustaría diseñar una red profunda con una (o más) capas convolucionales (CNN) y una o más capas ocultas totalmente conectadas en la parte superior.
Para una red profunda con capas totalmente conectadas, hay métodos en theano para el preentrenamiento no supervisado, por ejemplo, utilizando autocoders de eliminación de ruido o RBMs .
Mi pregunta es: ¿cómo puedo implementar (en theano) una etapa de preentrenamiento no supervisada para capas convolucionales?
No espero una implementación completa como respuesta, pero agradecería un enlace a un buen tutorial o una referencia confiable.