Beispiel #1
0
def run_train(args):
    """
    Function to train a model.
    :param args: command line arguments
    """
    # Create directories for font, models and plots if they do not exist
    if not os.path.exists(args.font_dir):
        os.mkdir(args.font_dir)
    if not os.path.exists(args.models_dir):
        os.mkdir(args.models_dir)
    if not os.path.exists(args.plots_dir):
        os.mkdir(args.plots_dir)

    # Create objects for training and visualization
    visualizer = Visualizer(args.font_dir, args.plots_dir)
    trainer = Trainer(args)

    for epoch in range(trainer.num_epochs):

        # Train and validate a model to predict values for both valence and arousal
        if trainer.dimension == 'both':
            trainer.train_2d()
            trainer.validate_2d()

        # Train and validate a model to predict values for valence or arousal, according to `dimension`
        else:
            trainer.train_1d()
            trainer.validate_1d()

        # Display epoch every `log_interval`
        if (epoch + 1) % trainer.log_interval == 0 or (epoch + 1) == trainer.num_epochs:
            print_epoch(epoch + 1, trainer.train_dict, trainer.test_dict, trainer.dimension)

        # Update the learing rate every `decay_interval`
        if (epoch + 1) % args.decay_interval == 0:
            trainer.update_learning_rate()

    # Visualize train and validation losses
    visualizer.plot_losses(trainer.train_dict, trainer.test_dict, trainer.dimension)
    # Save the trained model
    trainer.save_model()