str(_D + 1))(tmp_in)
                    else:
                        x = tf.keras.layers.Dense(N,
                                                  activation='relu',
                                                  name='dense_' +
                                                  str(_D + 1))(tmp_in)
                    xn = tf.keras.layers.BatchNormalization()(x)
                    xd = tf.keras.layers.Dropout(0.5)(xn)
                    tmp_in = xd
                outputs = tf.keras.layers.Dense(1, name='predictions')(xd)

                model = tf.keras.Model(inputs=inputs, outputs=outputs)
                if fold_n == 0:
                    model.summary()
                model.compile(optimizer=tf.keras.optimizers.Adam(),
                              loss=tf.keras.losses.MeanAbsoluteError(),
                              metrics=[tf.keras.metrics.MeanAbsoluteError()])

                overfitCallback = tf.keras.callbacks.EarlyStopping(
                    monitor='val_loss',
                    min_delta=0,
                    patience=20,
                    restore_best_weights=True)
                history = model.fit(X_train,
                                    Y_train,
                                    batch_size=64,
                                    epochs=999,
                                    verbose=0,
                                    validation_data=(X_valid, Y_valid),
                                    callbacks=[overfitCallback])
                Y_pred_valid = model.predict(X_valid).reshape(-1, )