def Discriminator(image_shape, condition_shape, initial_size, latent_shape, base_filters, min_filters): # Initial Layers condition_input = Input(condition_shape) condition_latent = Dense(units=latent_shape)(condition_input) condition_latent = Activation('relu')(condition_latent) condition_model = Model(inputs=condition_input, outputs=condition_latent) filters = base_filters image_input = Input(image_shape) image = Conv2D(filters, kernel_size=4, strides=1)(image_input) for i in range(int(np.log2(initial_size / 4))): filters = filters // 2 image = Conv2D(filters, kernel_size=3, strides=2)(image) image = Activation('relu')(image) image = Reshape()(image) image_latent = Dense(units=latent_shape)(image) image_model = Model(inputs=image_input, outputs=image_latent) dis = concatenate([condition_model.output, image_model.output]) dis = Dense(units=filters)(dis) dis = Dense(units=filters)(dis) dis = Dense(units=1)(dis) dis = Activation('sigmoid')(dis) D = Model(inputs=[image_model.input, condition_model.input], outputs=dis, name='Discriminator') return D