def test_vae_predictions(self): # Encoder. encoder = models.Sequential() encoder.add(layers.Dense(20, activation="relu", input_shape=(100, ))) # Decoder. decoder = models.Sequential() decoder.add(layers.Dense(100, activation="sigmoid", input_shape=(2, ))) # Variational Autoencoder. vae = ngdlmodels.VAE(encoder=encoder, decoder=decoder, latent_dim=2) prediction = vae.predict(np.random.random((1, 100))) assert prediction.shape == ( 1, 100), "Unexpected shape " + str(prediction.shape) prediction = vae.predict_reconstruct_from_samples( np.random.random((1, 100))) assert prediction.shape == ( 1, 100), "Unexpected shape " + str(prediction.shape) prediction = vae.predict_embed_samples_into_latent( np.random.random((1, 100))) assert prediction.shape == ( 1, 2), "Unexpected shape " + str(prediction.shape) prediction = vae.predict_reconstruct_from_latent( np.random.random((1, 2))) assert prediction.shape == ( 1, 100), "Unexpected shape " + str(prediction.shape)
def _build_dense(type, input_shape, latent_dim, hidden_units=[], hidden_activation="relu"): # Some useful variables. input_size = np.prod(input_shape) hidden_units_reverse = hidden_units[::-1] # Create the encoder. encoder_input = layers.Input(shape=input_shape) encoder_output = layers.Reshape((input_size,))(encoder_input) for hidden in hidden_units: encoder_output = layers.Dense(hidden, activation=hidden_activation)(encoder_output) encoder_output = layers.Dense(latent_dim, activation=hidden_activation)(encoder_output) encoder = models.Model(encoder_input, encoder_output) # Create the decoder. decoder_input = layers.Input(shape=(latent_dim,)) decoder_output = decoder_input for hidden in hidden_units_reverse: decoder_output = layers.Dense(hidden, activation=hidden_activation)(decoder_output) decoder_output = layers.Dense(input_size, activation="sigmoid")(decoder_output) decoder_output = layers.Reshape(input_shape)(decoder_output) decoder = models.Model(decoder_input, decoder_output) # Create the autoencoder. if type == "ae": ae = ngdlmodels.AE(encoder, decoder) return ae elif type == "vae": vae = ngdlmodels.VAE(encoder, decoder, latent_dim=latent_dim) return vae
def test_issue_1(self): input_shape = (28, 28) latent_dim = 128 encoder_input = layers.Input(shape=input_shape) encoder_output = encoder_input encoder_output = layers.Reshape(input_shape + (1, ))(encoder_input) encoder_output = layers.Conv2D(16, (3, 3), activation="relu", padding="same")(encoder_output) encoder_output = layers.MaxPooling2D((2, 2), padding="same")(encoder_output) encoder_output = layers.Conv2D(8, (3, 3), activation="relu", padding="same")(encoder_output) encoder_output = layers.MaxPooling2D((2, 2), padding="same")(encoder_output) encoder_output = layers.Conv2D(8, (3, 3), activation="relu", padding="same")(encoder_output) encoder_output = layers.MaxPooling2D((2, 2), padding="same")(encoder_output) encoder_output = layers.Flatten()(encoder_output) encoder = models.Model(encoder_input, encoder_output) # Create the decoder. decoder_input = layers.Input(shape=(latent_dim, )) decoder_output = decoder_input #decoder_output = layers.Dense(128, activation="relu")(decoder_output) decoder_output = layers.Reshape((4, 4, 8))(decoder_output) decoder_output = layers.Conv2D(8, (3, 3), activation="relu", padding="same")(decoder_output) decoder_output = layers.UpSampling2D((2, 2))(decoder_output) decoder_output = layers.Conv2D(8, (3, 3), activation="relu", padding="same")(decoder_output) decoder_output = layers.UpSampling2D((2, 2))(decoder_output) decoder_output = layers.Conv2D(16, (3, 3), activation="relu")(decoder_output) decoder_output = layers.UpSampling2D((2, 2))(decoder_output) decoder_output = layers.Conv2D(1, (3, 3), activation="sigmoid", padding="same")(decoder_output) decoder_output = layers.Reshape((28, 28))(decoder_output) decoder = models.Model(decoder_input, decoder_output) # Create the VAE. vae = ngdlmodels.VAE(encoder, decoder, latent_dim=latent_dim) vae.compile(optimizer='adadelta', loss="binary_crossentropy") vae.summary() # Train. print("Train...") history = vae.fit(x_input_train, x_input_train, epochs=100, batch_size=32, shuffle=True, validation_data=(x_input_test, x_input_test))
def build_model(self): """ Build the VAE gluing the encoder and decoder using the ngdlmodels. """ encoder = self.encoder decoder = self.decoder latent_dim = self.latent_dim self.model = ngdlmodels.VAE(encoder, decoder, latent_dim=latent_dim)
def test_vae_sequential(self): # Encoder. encoder = models.Sequential() encoder.add(layers.Dense(20, activation="relu", input_shape=(100, ))) # Decoder. decoder = models.Sequential() decoder.add(layers.Dense(100, activation="sigmoid", input_shape=(2, ))) # Variational Autoencoder. vae = ngdlmodels.VAE(encoder=encoder, decoder=decoder, latent_dim=2) self.assert_load_save_fine(vae)
def test_vae_functional(self): # Encoder. encoder_input = layers.Input(shape=(100,)) encoder_output = encoder_input encoder_output = layers.Dense(20, activation="relu")(encoder_output) encoder = models.Model(encoder_input, encoder_output) # Decoder. decoder_input = layers.Input(shape=(2,)) decoder_output = layers.Dense(20, activation="relu")(decoder_input) decoder_output = layers.Dense(100, activation="sigmoid")(decoder_output) decoder = models.Model(decoder_input, decoder_output) # Variational Autoencoder. vae = ngdlmodels.VAE(encoder=encoder, decoder=decoder, latent_dim=2) vae.compile(optimizer="rmsprop", loss="mse") self.assert_load_save_fine(vae)
# Create the encoder. encoder_input = layers.Input(shape=(28, 28)) encoder_output = layers.Reshape((28 * 28, ))(encoder_input) encoder_output = layers.Dense(512, activation="relu")(encoder_output) encoder = models.Model(encoder_input, encoder_output) # Create the decoder. decoder_input = layers.Input(shape=(latent_dim, )) decoder_output = layers.Dense(512, activation="relu")(decoder_input) decoder_output = layers.Dense(28 * 28, activation="sigmoid")(decoder_output) decoder_output = layers.Reshape((28, 28))(decoder_output) decoder = models.Model(decoder_input, decoder_output) # Create the autoencoder. vae = ngdlmodels.VAE(encoder, decoder, latent_dim=latent_dim) vae.compile(optimizer='adadelta', reconstruction_loss="binary_crossentropy") vae.summary() # Train. print("Train...") history = vae.fit(x_input_train, x_input_train, epochs=100, batch_size=32, shuffle=True, validation_data=(x_input_test, x_input_test)) # Evaluate. print("Evaluate...") loss = vae.evaluate(x_input_test, x_input_test)
def define_VAE_architecture(latent_dim=10): ''' Defines a variational autoenconder with a convolutional neural network architecture for our 128 x 128 images. Returns the model. ''' ### Definition of NN architecture latent_dim = latent_dim # Encoder. encoder_input = layers.Input(shape=(128, 128, 1)) encoder_output = layers.Conv2D( 32, (3, 3), kernel_initializer=initializers.lecun_normal(seed=0), activation="relu", padding="same")(encoder_input) encoder_output = layers.MaxPooling2D((2, 2), padding="same")(encoder_output) encoder_output = layers.Conv2D( 32, (3, 3), kernel_initializer=initializers.lecun_normal(seed=0), activation="relu", padding="same")(encoder_output) encoder_output = layers.MaxPooling2D((2, 2), padding="same")(encoder_output) encoder_output = layers.Flatten()(encoder_output) encoder_output = layers.Dense( 1024, activation="relu", kernel_initializer=initializers.lecun_normal(seed=0))(encoder_output) encoder_output = layers.Dense( 64, activation="relu", kernel_initializer=initializers.lecun_normal(seed=0))(encoder_output) encoder = models.Model(encoder_input, encoder_output) # Decoder. decoder_input = layers.Input(shape=(latent_dim, )) decoder_output = layers.Dense( 64, activation="relu", kernel_initializer=initializers.lecun_normal(seed=0))(decoder_input) decoder_output = layers.Dense( 1024, activation="sigmoid", kernel_initializer=initializers.lecun_normal(seed=0))(decoder_output) decoder_output = layers.Dense( 32 * 32 * 32, activation="sigmoid", kernel_initializer=initializers.lecun_normal(seed=0))(decoder_output) decoder_output = layers.Reshape((32, 32, 32))(decoder_output) decoder_output = layers.Conv2D( 32, (3, 3), kernel_initializer=initializers.lecun_normal(seed=0), activation="relu", padding="same")(decoder_output) decoder_output = layers.UpSampling2D((2, 2))(decoder_output) decoder_output = layers.Conv2D( 32, (3, 3), kernel_initializer=initializers.lecun_normal(seed=0), activation="relu", padding="same")(decoder_output) decoder_output = layers.UpSampling2D((2, 2))(decoder_output) decoder_output = layers.Conv2D( 1, (3, 3), kernel_initializer=initializers.lecun_normal(seed=0), activation="sigmoid", padding="same")(decoder_output) decoder = models.Model(decoder_input, decoder_output) #autoencoder vae = ngdlmodels.VAE(encoder, decoder, latent_dim=latent_dim) return vae