Exemple #1
0
    def __init__(self, images=None, targets=None, name='network'):
        """
        Class constructor. Creates the model and all the connections. 
        """
        with tf.variable_scope(name + '_feed') as scope:
            self.images = images
            self.name = name
            self.back_prop = None
            # Unflatten Layer

            images_square = unflatten_layer(self.images)
            visualize_images(images_square)
            # Placeholder probability for dropouts.
            self.dropout_prob = tf.placeholder_with_default(
                input=tf.constant(1.0, dtype=tf.float32),
                shape=None,
                name='dropout_probability')
            self.targets = targets
            if self.targets is None:
                self.targets = tf.placeholder(tf.float32,
                                              shape=[None, 10],
                                              name='targets')

        self.obj = 0.
        self.parmas = []
        self._build()  # This method needs to be written in the new class.
    def __init__(self,
                 images,
                 expert,
                 novice,
                 labels,
                 input_params=None,
                 name='judge'):
        """
        Class constructor. Creates the model and all the connections. 
        """
        self.labels = labels
        with tf.variable_scope(name) as scope:
            self.images = images
            self.name = name

            # Unflatten Layer
            images_square = unflatten_layer(self.images)
            visualize_images(images_square)

            # Placeholder probability for dropouts.
            #self.dropout_prob = tf.placeholder(tf.float32,
            self.dropout_prob = tf.placeholder_with_default(
                input=tf.constant(1.0, dtype=tf.float32),
                shape=None,
                name='dropout_probability')

            # Dropout Layer 1
            dropped_out = dropout_layer(input=self.images,
                                        prob=self.dropout_prob,
                                        name='dropout_1')

            # Embedding layers
            expert_embed, params = dot_product_layer(
                input=expert,
                neurons=INFERENCE_EMBED,
                name='expert_embed_inference')
            novice_embed, params = dot_product_layer(
                input=novice,
                neurons=INFERENCE_EMBED,
                params=params,
                name='novice_embed_inference')
            process_params(params, name=self.name)

            image_embed, params = dot_product_layer(input=self.images,
                                                    neurons=IMAGE_EMBED,
                                                    name='embed_image')
            process_params(params, name=self.name)

            merged_expert = tf.concat([expert_embed, image_embed], 1)
            merged_novice = tf.concat([novice_embed, image_embed], 1)

            # Merged Expert Dropout Layer 1
            merged_expert_dropout_1 = dropout_layer(
                input=merged_expert,
                prob=self.dropout_prob,
                name='merged_expert_dropout_1')
            # Merged Novice Dropout Layer 1
            merged_novice_dropout_1 = dropout_layer(
                input=merged_novice,
                prob=self.dropout_prob,
                name='merged_novice_dropout_1')

            # Merged Expert Dot Product Layer 1
            merged_expert_fc1_out, params = dot_product_layer(
                input=merged_expert_dropout_1,
                neurons=MERGED_D1,
                name='merged_expert_d1')
            # Merged Novice Dot Product Layer 1
            merged_novice_fc1_out, params = dot_product_layer(
                input=merged_novice_dropout_1,
                params=params,
                neurons=MERGED_D1,
                name='merged_novice_d1')
            process_params(params, name=self.name)

            # Merged Expert Dropout Layer 2
            merged_expert_dropout_2 = dropout_layer(
                input=merged_expert_fc1_out,
                prob=self.dropout_prob,
                name='merged_expert_dropout_2')
            # Merged Novice Dropout Layer 2
            merged_novice_dropout_2 = dropout_layer(
                input=merged_novice_fc1_out,
                prob=self.dropout_prob,
                name='merged_novice_dropout_2')

            # Merged Expert Dot Product Layer 2
            merged_expert_fc2_out, params = dot_product_layer(
                input=merged_expert_dropout_2,
                neurons=MERGED_D2,
                name='merged_expert_d2')
            # Merged Novice Dot Product Layer 2
            merged_novice_fc2_out, params = dot_product_layer(
                input=merged_novice_dropout_2,
                params=params,
                neurons=MERGED_D2,
                name='merged_novice_d2')
            process_params(params, name=self.name)

            self.judgement_expert, params = dot_product_layer(
                input=merged_expert_fc2_out,
                neurons=1,
                activation='sigmoid',
                name='expert_probability')
            self.judgement_novice, params = dot_product_layer(
                input=merged_novice_fc2_out,
                neurons=1,
                params=params,
                activation='sigmoid',
                name='novice_probability')
            process_params(params, name=self.name)
    def __init__(self, images, name='expert'):
        """
        Class constructor. Creates the model and allthe connections. 
        """
        with tf.variable_scope(name) as scope:
            self.images = images
            self.name = name

            # Unflatten Layer
            images_square = unflatten_layer(self.images)
            visualize_images(images_square)

            # Conv Layer 1
            conv1_out, params = conv_2d_layer(input=images_square,
                                              neurons=EXPERT_C1,
                                              filter_size=EXPERT_F1,
                                              name='conv_1',
                                              visualize=True)
            process_params(params, name=self.name)
            pool1_out = max_pool_2d_layer(input=conv1_out, name='pool_1')
            lrn1_out = local_response_normalization_layer(pool1_out,
                                                          name='lrn_1')

            # Conv Layer 2
            conv2_out, params = conv_2d_layer(input=lrn1_out,
                                              neurons=EXPERT_C2,
                                              filter_size=EXPERT_F2,
                                              name='conv_2')
            process_params(params, name=self.name)

            pool2_out = max_pool_2d_layer(input=conv2_out, name='pool_2')
            lrn2_out = local_response_normalization_layer(pool2_out,
                                                          name='lrn_2')

            flattened = flatten_layer(lrn2_out)

            # Placeholder probability for dropouts.
            self.dropout_prob = tf.placeholder_with_default(
                input=tf.constant(1.0, dtype=tf.float32),
                shape=None,
                name='dropout_probability')

            # Dropout Layer 1
            flattened_dropout = dropout_layer(input=flattened,
                                              prob=self.dropout_prob,
                                              name='dropout_1')

            # Dot Product Layer 1
            fc1_out, params = dot_product_layer(input=flattened_dropout,
                                                neurons=EXPERT_D1,
                                                name='dot_1')
            process_params(params, name=self.name)

            # Dropout Layer 2
            fc1_out_dropout = dropout_layer(input=fc1_out,
                                            prob=self.dropout_prob,
                                            name='dropout_2')
            # Dot Product Layer 2
            fc2_out, params = dot_product_layer(input=fc1_out_dropout,
                                                neurons=EXPERT_D2,
                                                name='dot_2')
            process_params(params, name=self.name)

            # Dropout Layer 3
            fc2_out_dropout = dropout_layer(input=fc2_out,
                                            prob=self.dropout_prob,
                                            name='dropout_3')

            # Logits layer
            self.logits, params = dot_product_layer(input=fc2_out_dropout,
                                                    neurons=C,
                                                    activation='identity',
                                                    name='logits_layer')
            process_params(params, name=self.name)

            # Softmax layer
            self.inference, self.predictions = softmax_layer(
                input=self.logits, name='softmax_layer')

            # Temperature Softmax layer
            self.temperature_softmax, _ = softmax_layer(
                input=self.logits,
                temperature=TEMPERATURE,
                name='temperature_softmax_layer')
    def __init__(self, images, input_params=None, name='novice'):
        """
        Class constructor. Creates the model and allthe connections. 
        """
        with tf.variable_scope(name) as scope:
            self.images = images
            self.name = name
            # self.decoder = decoder

            # Unflatten Layer
            images_square = unflatten_layer(self.images)
            visualize_images(images_square)

            # Placeholder probability for dropouts.
            #self.dropout_prob = tf.placeholder(tf.float32,
            self.dropout_prob = tf.placeholder_with_default(
                input=tf.constant(1.0, dtype=tf.float32),
                shape=None,
                name='dropout_probability')

            # Dropout Layer 1
            dropped_out = dropout_layer(input=self.images,
                                        prob=self.dropout_prob,
                                        name='dropout_1')

            # Dot Product Layer 1
            par = None
            # Dot Product Layer 1
            if input_params is not None:
                par = input_params[0]
            fc1_out, params = dot_product_layer(input=dropped_out,
                                                neurons=NOVICE_D1,
                                                params=par,
                                                name='dot_1')
            process_params(params, name=self.name)
            # d1_params = params

            # Unflatten Layer
            visualize_1D_filters(params[0])

            # Dropout Layer 2
            fc1_out_dropout = dropout_layer(input=fc1_out,
                                            prob=self.dropout_prob,
                                            name='dropout_2')
            # Dot Product Layer 2
            par = None
            # Dot Product Layer 1
            if input_params is not None:
                par = input_params[1]
            fc2_out, params = dot_product_layer(input=fc1_out_dropout,
                                                neurons=NOVICE_D2,
                                                params=par,
                                                name='dot_2')
            process_params(params, name=self.name)
            # d2_params = params

            # Dropout Layer 3
            fc2_out_dropout = dropout_layer(input=fc2_out,
                                            prob=self.dropout_prob,
                                            name='dropout_3')

            # Logits layer
            self.logits, params = dot_product_layer(input=fc2_out_dropout,
                                                    neurons=C,
                                                    activation='identity',
                                                    name='logits_layer')
            process_params(params, name=self.name)

            # Softmax layer
            self.inference, self.predictions = softmax_layer(
                input=self.logits, name='softmax_layer')
            # Temperature Softmax layer
            self.temperature_softmax, _ = softmax_layer(
                input=self.logits,
                temperature=TEMPERATURE,
                name='temperature_softmax_layer')
Exemple #5
0
    def _build(self):
        """
        This method builds the network architecture.
        """
        with tf.variable_scope(self.name + '_architecutre') as scope:
            images_square = unflatten_layer(self.images)
            visualize_images(images_square)

            # Conv Layer 1
            conv1_out, params = conv_2d_layer(input=images_square,
                                              neurons=CONV_1_N,
                                              filter_size=CONV_1_FILT,
                                              name='enc_conv_1',
                                              visualize=True)
            process_params(params, name=self.name)
            e1_params = params
            pool1_out = max_pool_2d_layer(input=conv1_out, name='enc_pool_1')
            # lrn1_out = local_response_normalization_layer (pool1_out, name = 'lrn_1' )

            # Conv Layer 2
            conv2_out, params = conv_2d_layer(input=pool1_out,
                                              neurons=CONV_2_N,
                                              filter_size=CONV_2_FILT,
                                              name='enc_conv_2')
            process_params(params, name=self.name)
            e2_params = params
            pool2_out = max_pool_2d_layer(input=conv2_out, name='enc_pool_2')
            # lrn2_out = local_response_normalization_layer (pool2_out, name = 'lrn_2' )

            flattened = flatten_layer(pool2_out)

            # Dropout Layer 1
            flattened_dropout = dropout_layer(input=flattened,
                                              prob=self.dropout_prob,
                                              name='enc_dropout_1')

            # Dot Product Layer 1
            fc1_out, params = dot_product_layer(input=flattened_dropout,
                                                neurons=HIDDEN_1,
                                                name='enc_dot_1')
            process_params(params, name=self.name)
            e3_params = params

            # Dropout Layer 2
            fc1_out_dropout = dropout_layer(input=fc1_out,
                                            prob=self.dropout_prob,
                                            name='enc_dropout_2')
            # Dot Product Layer 2
            fc2_out, params = dot_product_layer(input=fc1_out_dropout,
                                                neurons=HIDDEN_2,
                                                name='enc_dot_2')
            process_params(params, name=self.name)
            e4_params = params

            # Dropout Layer 3
            fc2_out_dropout = dropout_layer(input=fc2_out,
                                            prob=self.dropout_prob,
                                            name='enc_dropout_3')

            # Dot Product Layer 2
            self.codeword, params = dot_product_layer(
                input=fc2_out_dropout,
                neurons=CODEWORD_LENGTH,
                activation=CODE_ACTIVATION,
                name='enc_dot_2')
            process_params(params, name=self.name)
            process_codeword_normalization_regularizer(
                self.codeword,
                coeff=AUTOENCODER_CODEWORD_COEFF,
                name=self.name)
            e5_params = params
            # tf.summary.histogram('codewords', self.codeword)
            # self.hash = threshold_layer ( input = self.codeword,
            #                                 name = 'hash')
            # process_hash_regularizer(self.codeword, coeff = AUTOENCODER_HASH_COEFF,
            #                                name = self.name)

            # Decoder ...
            decoder_1_out, params = dot_product_layer(
                input=self.codeword,
                neurons=HIDDEN_2,
                params=[tf.transpose(e5_params[0]), None],
                name='decoder_dot_1')
            d1_params = params
            process_params([params[1]], name=self.name)

            dec_1_out_dropout = dropout_layer(input=decoder_1_out,
                                              prob=self.dropout_prob,
                                              name='dec_dropout_1')

            decoder_2_out, params = dot_product_layer(
                input=dec_1_out_dropout,
                neurons=HIDDEN_1,
                params=[tf.transpose(e4_params[0]), None],
                name='decoder_dot_2')
            d2_params = params
            process_params([params[1]], name=self.name)

            # dropout 2
            dec_2_out_dropout = dropout_layer(input=decoder_2_out,
                                              prob=self.dropout_prob,
                                              name='dec_dropout_2')

            decoder_3_out, params = dot_product_layer(
                input=dec_2_out_dropout,
                neurons=1250,
                params=[tf.transpose(e3_params[0]), None],
                name='decoder_dot_3')
            d3_params = params
            process_params([params[1]], name=self.name)

            # DeConv Layer 1
            # The output shapes need to be changed according to architecture.

            dec_3_square = unflatten_layer(decoder_3_out, channels=CONV_2_N)
            upsample_1 = upsampling_layer(dec_3_square,
                                          size=(10, 10),
                                          name='dec_upsampling_1')

            deconv1_out, params = deconv_2d_layer(
                input=upsample_1,
                neurons=CONV_1_N,
                filter_size=CONV_2_FILT,
                output_shape=(12, 12),
                # n_outs = MINI_BATCH_SIZE,
                stride=(1, 1, 1, 1),
                params=[e2_params[0], None],
                name='dec_deconv_1')

            process_params([params[1]], name=self.name)
            d4_params = params

            # DeConv Layer 2
            upsample_2 = upsampling_layer(deconv1_out,
                                          size=(24, 24),
                                          name='dec_upsampling_2')
            decoded_images_square, params = deconv_2d_layer(
                input=upsample_2,
                neurons=1,
                filter_size=CONV_1_FILT,
                stride=(1, 1, 1, 1),
                output_shape=(28, 28),
                # n_outs = MINI_BATCH_SIZE,
                params=[e1_params[0], None],
                activation='tanh',
                name='dec_deconv_2')

            process_params([params[1]], name=self.name)
            d5_params = params

            self.decoded = flatten_layer(decoded_images_square,
                                         in_shp=[-1, 28, 28, 1])
            visualize_images(decoded_images_square, name='decoded')
            # This is because transpose don't initialize.
            self.params = [[e5_params[0], d1_params[1]],
                           [e4_params[0], d2_params[1]],
                           [e3_params[0], d3_params[1]],
                           [e2_params[0], d4_params[1]],
                           [e1_params[0], d5_params[1]]]

        with tf.variable_scope(self.name + '_objectives') as scope:
            with tf.variable_scope(self.name + '_decoder_error') as scope:
                reconstruction_error = rmse(self.images, self.decoded)
                tf.add_to_collection(self.name + '_objectives',
                                     reconstruction_error)
                tf.summary.scalar('reconstruction_error', reconstruction_error)

            self._cook_optimizer(lr=AUTOENCODER_LR,
                                 optimizer=AUTOENCODER_OPTIMIZER,
                                 l1_coeff=AUTOENCODER_L1_COEFF,
                                 l2_coeff=AUTOENCODER_WEIGHT_DECAY_COEFF)
Exemple #6
0
    def _build(self, z, targets=None, input_params=None):
        """
        This method builds the network architecture.

        Args:
            input_params: list of paramers.
        """
        with tf.variable_scope(self.name + '_architecture') as scope:
            with tf.variable_scope('generator') as scope:
                self.z = z
                self.targets = targets

                # Dot Product Layer 1
                par = input_params[0]
                process_params(par, name=self.name)
                par[0] = tf.transpose(par[0])
                # Decoder ...
                decoder_1_out, params = dot_product_layer(
                    input=self.z,
                    neurons=HIDDEN_2,
                    params=par,
                    name='gen_decoder_dot_1')
                g1_params = params

                dec_1_out_dropout = dropout_layer(input=decoder_1_out,
                                                  prob=self.dropout_prob,
                                                  name='gen_dropout_1')

                # Dot Product Layer 2
                par = input_params[1]
                process_params(par, name=self.name)
                par[0] = tf.transpose(par[0])
                decoder_2_out, params = dot_product_layer(
                    input=dec_1_out_dropout,
                    neurons=HIDDEN_1,
                    params=par,
                    name='gen_decoder_dot_2')
                g2_params = params

                dec_2_out_dropout = dropout_layer(input=decoder_2_out,
                                                  prob=self.dropout_prob,
                                                  name='gen_dropout_2')

                # Dot Product Layer 3
                par = input_params[2]
                process_params(par, name=self.name)
                par[0] = tf.transpose(par[0])
                decoder_3_out, params = dot_product_layer(
                    input=dec_2_out_dropout,
                    neurons=1250,
                    params=par,
                    name='gen_decoder_dot_0')
                g3_params = params
                dec_3_square = unflatten_layer(decoder_3_out,
                                               channels=CONV_2_N,
                                               name='gen_unflatten')
                upsample_1 = upsampling_layer(dec_3_square,
                                              size=(10, 10),
                                              name='gen_upsampling_1')

                # Convolution layer 1
                par = input_params[3]
                process_params(par, name=self.name)
                deconv1_out, params = deconv_2d_layer(input=upsample_1,
                                                      neurons=CONV_1_N,
                                                      filter_size=CONV_2_FILT,
                                                      output_shape=(12, 12),
                                                      params=par,
                                                      name='deconv_1')

                g4_params = params

                # DeConv Layer 2
                par = input_params[4]
                process_params(par, name=self.name)
                upsample_2 = upsampling_layer(deconv1_out,
                                              size=(24, 24),
                                              name='gen_upsampling_2')
                generated_images_square, params = deconv_2d_layer(
                    input=upsample_2,
                    neurons=1,
                    filter_size=CONV_1_FILT,
                    stride=(1, 1, 1, 1),
                    output_shape=(28, 28),
                    params=par,
                    activation='tanh',
                    name='conv_2')

                g5_params = params
                self.generation = flatten_layer(generated_images_square,
                                                in_shp=[-1, 28, 28, 1])
                visualize_images(generated_images_square,
                                 name='generated_images')
            self.params = [
                g1_params, g2_params, g3_params, g4_params, g5_params
            ]