Custom encoder/decoder — DIRESA documentation

# Custom encoder/decoder

9. Build DIRESA with custom encoder and decoder

We can also build DIRESA models with custom encoder and decoder models. We define those two here.

    from keras import layers, Input
    from keras.models import Model
    def encoder_model(input_shape=(3,), output_shape=2, units=40):
        x = Input(shape=input_shape)
        y = layers.Dense(units=units, activation="relu")(x)
        y = layers.Dense(units=units // 2, activation="relu")(y)
        y = layers.Dense(output_shape, activation="linear")(y)
        model = Model(x, y, name="Encoder")
        return model
    def decoder_model(input_shape=2, output_shape=3, units=40):
        x = Input(shape=input_shape)
        y = layers.Dense(units=units // 2, activation="relu")(x)
        y = layers.Dense(units=units, activation="relu")(y)
        y = layers.Dense(output_shape, activation="linear")(y)
        model = Model(x, y, name="Decoder")
        return model

Based on the custom encoder and decoder model, we now build the DIRESA model with the diresa_model function.

    from diresa.models import diresa_model
    from diresa.loss import mse_dist_loss, LatentCovLoss

    diresa = diresa_model(x=Input(shape=3), x_twin=Input(shape=3), encoder=encoder_model(), decoder=decoder_model())

    diresa.compile(loss=['MSE', LatentCovLoss(1.), mse_dist_loss], loss_weights=[1., 3., 1.])
    diresa.summary(expand_nested=True)