train_metrics = test(model, train_loader, device, metrics) train_metrics_history['times'].append(epoch + 1) train_metrics_history['acc'].append(train_metrics['accuracy']) train_metrics_history['loss'].append(train_metrics['CE']) ##### At the end of an epoch, we compute the metrics on the validation set val_metrics = test(model, valid_loader, device, metrics) print( "[%d/%d] Validation: Loss : %.3f | Acc : %.3f%%" % (epoch, max_epochs, val_metrics['CE'], 100. * val_metrics['accuracy'])) val_metrics_history['times'].append(epoch + 1) val_metrics_history['acc'].append(val_metrics['accuracy']) val_metrics_history['loss'].append(val_metrics['CE']) model_checkpoint.update(val_metrics['CE']) print('Finished Training') # Reload the best model model.load_state_dict(torch.load(model_checkpoint.best, map_location=device)) # And test it test_metrics = test(model, test_loader, device, metrics) suptitle = "Test : Loss:%.3f | Acc : %.2f%%;" % ( test_metrics['CE'], test_metrics['accuracy'] * 100) plt.figure() plt.subplot(121) plt.plot(train_metrics_history['times'], train_metrics_history['acc']) plt.plot(val_metrics_history['times'], val_metrics_history['acc']) plt.title('Model accuracy')
"Val Accuracy: {:.3f}".format(val_accuracy_epoch)) tensorboard_writer.add_scalar('metrics/train_loss', train_loss_epoch, e) tensorboard_writer.add_scalar('metrics/val_loss', val_loss_epoch, e) tensorboard_writer.add_scalar('metrics/val_acc', val_accuracy_epoch, e) # saving best model state = { 'epoch': e + 1, 'state_dict': model.state_dict(), 'optimizer': optimizer.state_dict() } filepath = os.path.join(config.logdir, "best_model.pt") model_checkpoint = ModelCheckpoint(filepath, state) model_checkpoint.update(val_loss_epoch) end_epoch = time.time() print('time for epoch: ', (end_epoch - start_epoch)) print('\n') # saving model after every 5 iterations if (e % 5 == 0): file_name = "model_" + str(e+1) + '-' + "{:.3f}".format(val_loss_epoch) \ + '-' + "{:.3f}".format(val_accuracy_epoch) + '.pt' filepath = os.path.join(config.logdir, file_name) torch.save(state, filepath) plt.plot(train_losses, label="Training loss") plt.plot(val_losses, label="Validation loss") plt.legend(frameon=False)