tensorboard_logger.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. ################################################################################
  2. # Copyright (c) 2021 ContinualAI. #
  3. # Copyrights licensed under the MIT License. #
  4. # See the accompanying LICENSE file for terms. #
  5. # #
  6. # Date: 24-05-2020 #
  7. # Author(s): Andrea Cossu #
  8. # E-mail: contact@continualai.org #
  9. # Website: avalanche.continualai.org #
  10. ################################################################################
  11. """
  12. This is a simple example that shows how to use the
  13. Tensorboard Logger
  14. """
  15. from __future__ import absolute_import
  16. from __future__ import division
  17. from __future__ import print_function
  18. from os.path import expanduser
  19. import argparse
  20. import torch
  21. from torch.nn import CrossEntropyLoss
  22. from torch.optim import SGD
  23. from torchvision import transforms
  24. from torchvision.datasets import MNIST
  25. from torchvision.transforms import ToTensor, RandomCrop
  26. from avalanche.benchmarks import nc_benchmark
  27. from avalanche.logging import InteractiveLogger, TensorboardLogger
  28. from avalanche.training.plugins import EvaluationPlugin
  29. from avalanche.evaluation.metrics import forgetting_metrics, \
  30. confusion_matrix_metrics, accuracy_metrics, loss_metrics, \
  31. cpu_usage_metrics, \
  32. timing_metrics, gpu_usage_metrics, ram_usage_metrics, disk_usage_metrics, \
  33. MAC_metrics
  34. from avalanche.models import SimpleMLP
  35. from avalanche.training.strategies import Naive
  36. def main(args):
  37. # --- CONFIG
  38. device = torch.device(f"cuda:{args.cuda}"
  39. if torch.cuda.is_available() and
  40. args.cuda >= 0 else "cpu")
  41. # ---------
  42. # --- TRANSFORMATIONS
  43. train_transform = transforms.Compose([
  44. RandomCrop(28, padding=4),
  45. ToTensor(),
  46. transforms.Normalize((0.1307,), (0.3081,))
  47. ])
  48. test_transform = transforms.Compose([
  49. ToTensor(),
  50. transforms.Normalize((0.1307,), (0.3081,))
  51. ])
  52. # ---------
  53. # --- SCENARIO CREATION
  54. mnist_train = MNIST(root=expanduser("~") + "/.avalanche/data/mnist/",
  55. train=True, download=True, transform=train_transform)
  56. mnist_test = MNIST(root=expanduser("~") + "/.avalanche/data/mnist/",
  57. train=False, download=True, transform=test_transform)
  58. scenario = nc_benchmark(
  59. mnist_train, mnist_test, 5, task_labels=False, seed=1234)
  60. # ---------
  61. # MODEL CREATION
  62. model = SimpleMLP(num_classes=scenario.n_classes)
  63. interactive_logger = InteractiveLogger()
  64. tensorboard_logger = TensorboardLogger()
  65. eval_plugin = EvaluationPlugin(
  66. accuracy_metrics(
  67. minibatch=True, epoch=True, epoch_running=True,
  68. experience=True, stream=True),
  69. loss_metrics(
  70. minibatch=True, epoch=True, epoch_running=True,
  71. experience=True, stream=True),
  72. forgetting_metrics(experience=True, stream=True),
  73. confusion_matrix_metrics(stream=True),
  74. cpu_usage_metrics(
  75. minibatch=True, epoch=True, experience=True, stream=True),
  76. timing_metrics(
  77. minibatch=True, epoch=True, experience=True, stream=True),
  78. ram_usage_metrics(
  79. every=0.5, minibatch=True, epoch=True, experience=True,
  80. stream=True),
  81. gpu_usage_metrics(
  82. args.cuda, every=0.5, minibatch=True, epoch=True,
  83. experience=True, stream=True),
  84. disk_usage_metrics(
  85. minibatch=True, epoch=True, experience=True, stream=True),
  86. MAC_metrics(
  87. minibatch=True, epoch=True, experience=True),
  88. loggers=[interactive_logger, tensorboard_logger]
  89. )
  90. # CREATE THE STRATEGY INSTANCE (NAIVE)
  91. cl_strategy = Naive(
  92. model, SGD(model.parameters(), lr=0.001, momentum=0.9),
  93. CrossEntropyLoss(), train_mb_size=100, train_epochs=4, eval_mb_size=100,
  94. device=device, evaluator=eval_plugin)
  95. # TRAINING LOOP
  96. print('Starting experiment...')
  97. results = []
  98. for experience in scenario.train_stream:
  99. print("Start of experience: ", experience.current_experience)
  100. print("Current Classes: ", experience.classes_in_this_experience)
  101. cl_strategy.train(experience)
  102. print('Training completed')
  103. print('Computing accuracy on the whole test set')
  104. results.append(cl_strategy.eval(scenario.test_stream))
  105. if __name__ == '__main__':
  106. parser = argparse.ArgumentParser()
  107. parser.add_argument('--cuda', type=int, default=0,
  108. help='Select zero-indexed cuda device. -1 to use CPU.')
  109. args = parser.parse_args()
  110. main(args)