def train(model, data_loader, parameters, name, save_best_ckpt): # Train the given model and evaluate it print("Start Train Model") trainer = Trainer(model, data_loader, parameters['criterion'], parameters['lr'], parameters['betas'], parameters['epochs'], parameters['batch_size'], parameters['num_classes'], parameters['epsilon'], name, parameters['path']) trainer.__train__(save_best_ckpt) if save_best_ckpt: # if len(trainer.model_states) > 0: # trainer.model_states = sorted(trainer.model_states, key=lambda x: x['loss']) # torch.save({'model_state_dict': trainer.model_states[0]['state_dict']}, trainer.ckpt) # else: trainer.model.save(trainer.ckpt) plot(trainer.losses, "{} Loss".format(trainer.name), "loss", "epoch", parameters['path_plots_nn']) plot(trainer.accuracies, "{} Accuracy".format(trainer.name), "accuracy", "epoch", parameters['path_plots_nn']) print("End Train Model") print("==============================================================================") return trainer
def playing_with_learning_rate(train_loader, parameters): print("Start part 2") # Question 2 - Playing with learning rate print("Playing with learning rate") models = [SimpleModel() for _ in range(len(parameters['lrs']))] for idx in range(len(parameters['lrs'])): models[idx].load(parameters['pretrained_path']) model_name = "model_{}".format(idx) lr = parameters['lrs'][idx] print("model: {}. lr: {}".format(model_name, lr)) trainer = Trainer(models[idx], train_loader, parameters['criterion'], lr, parameters['betas'], parameters['epochs'], parameters['batch_size'], parameters['num_classes'], parameters['epsilon'], model_name, parameters['path_lrs']) trainer.__train__(False) plot(trainer.losses, "{} Loss".format(trainer.name), "loss", "epoch", parameters['path_lrs']) plot(trainer.accuracies, "{} Accuracy".format(trainer.name), "accuracy", "epoch", parameters['path_lrs']) print("End Playing with learning rate") print("End part 2")