val_range = json.loads(config['model-parameters']['val_range'])
train_data = train_data[int(data_len * val_range) + 1:]
val_data = train_data[:int(data_len * val_range)]

train_datagen = DataGenerator(train_data_dir,
                              train_data,
                              classes,
                              n_channels=n_channels,
                              dim=data_shape,
                              batch_size=batch_size,
                              rescale=255)

val_datagen = DataGenerator(train_data_dir,
                            val_data,
                            classes,
                            n_channels=n_channels,
                            dim=data_shape,
                            batch_size=batch_size,
                            rescale=255)

model.compile_model(optimizer=optimizer,
                    loss=loss,
                    metrics=metrics,
                    learning_rate=lr)

history = model.fit_model(train_gen=train_datagen,
                          val_gen=val_datagen,
                          steps_per_epoch=steps,
                          val_steps_per_epoch=steps,
                          epochs=epochs,
                          callbacks=callbacks)