Ejemplo n.º 1
0
    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)