Пример #1
0
    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)
Пример #2
0
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
Пример #3
0
    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))
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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)
Пример #7
0
# 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)
Пример #8
0
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