Splitting the data and train the ANN#

We can start by loading data and split into training set and evaluating set:

def split_data():
    inputs, targets, timestamps = utils.read_input()

    return preprocessing.split(
        inputs,
        targets,
        timestamps,
        TRAINING_SIZE,
        EVALUATION_SIZE,
    )

Then we only need to create tensorflow.Dataset from the splitted data and create an ANN:

def run():
    (train_inputs, train_targets, train_timestamps), (test_inputs, test_targets, test_timestamps) = split_data()

    # creating Tensorflow's Dataset
    train_dataset = tf.data.Dataset.from_tensor_slices(
        (
            train_inputs.reshape(1, *train_inputs.shape),
            train_targets.reshape(1, *train_targets.shape),
        )
     )

    test_dataset = tf.data.Dataset.from_tensor_slices(
        (
            test_inputs.reshape(1, *test_inputs.shape),
            test_targets.reshape(1, *test_targets.shape),
        )
    )

Once the datasets are created, you can initialize the ModelSet and train it:

# initialize a list of 25 multi-layers perceptron
model_set = nn.ModelSet(
    nb_models=25,
    input_shape=(len(INPUTS_VAR),),
    output_shape=len(TARGETS_VAR),
)

# train the MLP
model_set.fit(train_dataset, epochs=500, steps_per_epoch=5)

# evaluate the MLP
model_set.evaluate(test_dataset)

# get the prediction
prediction = np.median(model_set(test_inputs)[:, 0], axis=0)

# save the result
utils.write_output(pd.DataFrame(prediction, columns=TARGETS_VAR))

During the evaluation, the models that fail to estimates fluxes are deleted. The output is saved in my_output_dir/output/output.csv.