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