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()