class_docstr: AR1 with Latent Replay.
  
  This implementations allows for the use of both Synaptic Intelligence and
  Latent Replay to protect the lower level of the model from forgetting.
  
  While the original papers show how to use those two techniques in a mutual
  exclusive way, this implementation allows for the use of both of them
  concurrently. This behaviour is controlled by passing proper constructor
  arguments).
class_docstr_tok: ["AR1","with","Latent","Replay",".","This","implementations","allows","for","the","use","of","both","Synaptic","Intelligence","and","Latent","Replay","to","protect","the","lower","level","of","the","model","from","forgetting",".","While","the","original","papers","show","how","to","use","those","two","techniques","in","a","mutual","exclusive","way",",","this","implementation","allows","for","the","use","of","both","of","them","concurrently",".","This","behaviour","is","controlled","by","passing","proper","constructor","arguments",")","."]
docstr: Creates an instance of the AR1 strategy.
  
  :param criterion: The loss criterion to use. Defaults to None, in which
      case the cross entropy loss is used.
  :param lr: The initial learning rate (SGD optimizer).
  :param inc_lr: The incremental learning rate (SGD optimizer).
  :param momentum: The momentum (SGD optimizer).
  :param l2: The L2 penalty used for weight decay.
  :param train_epochs: The number of training epochs. Defaults to 4.
  :param init_update_rate: The initial update rate of BatchReNorm layers.
  :param inc_update_rate: The incremental update rate of BatchReNorm
      layers.
  :param max_r_max: The maximum r value of BatchReNorm layers.
  :param max_d_max: The maximum d value of BatchReNorm layers.
  :param inc_step: The incremental step of r and d values of BatchReNorm
      layers.
  :param rm_sz: The size of the replay buffer. The replay buffer is shared
      across classes. Defaults to 1500.
  :param freeze_below_layer: A string describing the name of the layer
      to use while freezing the lower (nearest to the input) part of the
      model. The given layer is not frozen (exclusive).
  :param latent_layer_num: The number of the layer to use as the Latent
      Replay Layer. Usually this is the same of `freeze_below_layer`.
  :param ewc_lambda: The Synaptic Intelligence lambda term. Defaults to
      0, which means that the Synaptic Intelligence regularization
      will not be applied.
  :param train_mb_size: The train minibatch size. Defaults to 128.
  :param eval_mb_size: The eval minibatch size. Defaults to 128.
  :param device: The device to use. Defaults to None (cpu).
  :param plugins: (optional) list of StrategyPlugins.
  :param evaluator: (optional) instance of EvaluationPlugin for logging
      and metric computations.
  :param eval_every: the frequency of the calls to `eval` inside the
      training loop. -1 disables the evaluation. 0 means `eval` is called
      only at the end of the learning experience. Values >0 mean that
      `eval` is called every `eval_every` epochs and at the end of the
      learning experience.
docstr_tok: ["Creates","an","instance","of","the","AR1","strategy",".",":","param","criterion",":","The","loss","criterion","to","use",".","Defaults","to","None",",","in","which","case","the","cross","entropy","loss","is","used",".",":","param","lr",":","The","initial","learning","rate","(","SGD","optimizer",")",".",":","param","inc_lr",":","The","incremental","learning","rate","(","SGD","optimizer",")",".",":","param","momentum",":","The","momentum","(","SGD","optimizer",")",".",":","param","l2",":","The","L2","penalty","used","for","weight","decay",".",":","param","train_epochs",":","The","number","of","training","epochs",".","Defaults","to","4.",":","param","init_update_rate",":","The","initial","update","rate","of","BatchReNorm","layers",".",":","param","inc_update_rate",":","The","incremental","update","rate","of","BatchReNorm","layers",".",":","param","max_r_max",":","The","maximum","r","value","of","BatchReNorm","layers",".",":","param","max_d_max",":","The","maximum","d","value","of","BatchReNorm","layers",".",":","param","inc_step",":","The","incremental","step","of","r","and","d","values","of","BatchReNorm","layers",".",":","param","rm_sz",":","The","size","of","the","replay","buffer",".","The","replay","buffer","is","shared","across","classes",".","Defaults","to","1500.",":","param","freeze_below_layer",":","A","string","describing","the","name","of","the","layer","to","use","while","freezing","the","lower","(","nearest","to","the","input",")","part","of","the","model",".","The","given","layer","is","not","frozen","(","exclusive",")",".",":","param","latent_layer_num",":","The","number","of","the","layer","to","use","as","the","Latent","Replay","Layer",".","Usually","this","is","the","same","of","`","freeze_below_layer","`",".",":","param","ewc_lambda",":","The","Synaptic","Intelligence","lambda","term",".","Defaults","to","0",",","which","means","that","the","Synaptic","Intelligence","regularization","will","not","be","applied",".",":","param","train_mb_size",":","The","train","minibatch","size",".","Defaults","to","128.",":","param","eval_mb_size",":","The","eval","minibatch","size",".","Defaults","to","128.",":","param","device",":","The","device","to","use",".","Defaults","to","None","(","cpu",")",".",":","param","plugins",":","(","optional",")","list","of","StrategyPlugins",".",":","param","evaluator",":","(","optional",")","instance","of","EvaluationPlugin","for","logging","and","metric","computations",".",":","param","eval_every",":","the","frequency","of","the","calls","to","`","eval","`","inside","the","training","loop",".","-1","disables","the","evaluation",".","0","means","`","eval","`","is","called","only","at","the","end","of","the","learning","experience",".","Values",">","0","mean","that","`","eval","`","is","called","every","`","eval_every","`","epochs","and","at","the","end","of","the","learning","experience","."]
code: def __init__(
      self,
      criterion=None,
      lr: float = 0.001,
      inc_lr: float = 5e-5,
      momentum=0.9,
      l2=0.0005,
      train_epochs: int = 4,
      init_update_rate: float = 0.01,
      inc_update_rate=0.00005,
      max_r_max=1.25,
      max_d_max=0.5,
      inc_step=4.1e-05,
      rm_sz: int = 1500,
      freeze_below_layer: str = "lat_features.19.bn",
      latent_layer_num: int = 19,
      ewc_lambda: float = 0,
      train_mb_size: int = 128,
      eval_mb_size: int = 128,
      device: Union[str, torch.device] = "cpu",
      plugins: Optional[List[SupervisedPlugin]] = None,
      evaluator: Union[
          EvaluationPlugin, Callable[[], EvaluationPlugin]
      ] = default_evaluator,
      eval_every=-1,
  ):
      """
      Creates an instance of the AR1 strategy.
  
      :param criterion: The loss criterion to use. Defaults to None, in which
          case the cross entropy loss is used.
      :param lr: The initial learning rate (SGD optimizer).
      :param inc_lr: The incremental learning rate (SGD optimizer).
      :param momentum: The momentum (SGD optimizer).
      :param l2: The L2 penalty used for weight decay.
      :param train_epochs: The number of training epochs. Defaults to 4.
      :param init_update_rate: The initial update rate of BatchReNorm layers.
      :param inc_update_rate: The incremental update rate of BatchReNorm
          layers.
      :param max_r_max: The maximum r value of BatchReNorm layers.
      :param max_d_max: The maximum d value of BatchReNorm layers.
      :param inc_step: The incremental step of r and d values of BatchReNorm
          layers.
      :param rm_sz: The size of the replay buffer. The replay buffer is shared
          across classes. Defaults to 1500.
      :param freeze_below_layer: A string describing the name of the layer
          to use while freezing the lower (nearest to the input) part of the
          model. The given layer is not frozen (exclusive).
      :param latent_layer_num: The number of the layer to use as the Latent
          Replay Layer. Usually this is the same of `freeze_below_layer`.
      :param ewc_lambda: The Synaptic Intelligence lambda term. Defaults to
          0, which means that the Synaptic Intelligence regularization
          will not be applied.
      :param train_mb_size: The train minibatch size. Defaults to 128.
      :param eval_mb_size: The eval minibatch size. Defaults to 128.
      :param device: The device to use. Defaults to None (cpu).
      :param plugins: (optional) list of StrategyPlugins.
      :param evaluator: (optional) instance of EvaluationPlugin for logging
          and metric computations.
      :param eval_every: the frequency of the calls to `eval` inside the
          training loop. -1 disables the evaluation. 0 means `eval` is called
          only at the end of the learning experience. Values >0 mean that
          `eval` is called every `eval_every` epochs and at the end of the
          learning experience.
      """
  
      assert train_epochs > 0, (
          "train_epochs must be greater than zero so that latent "
          + "activations can be stored in the replay buffer"
      )
  
      warnings.warn(
          "The AR1 strategy implementation is in an alpha stage "
          "and is not perfectly aligned with the paper "
          "implementation. Please use at your own risk!"
      )
  
      if plugins is None:
          plugins = []
  
      # Model setup
      model = MobilenetV1(
          pretrained=True, latent_layer_num=latent_layer_num
      )
      replace_bn_with_brn(
          model,
          momentum=init_update_rate,
          r_d_max_inc_step=inc_step,
          max_r_max=max_r_max,
          max_d_max=max_d_max,
      )
  
      fc_name, fc_layer = get_last_fc_layer(model)
  
      if ewc_lambda != 0:
          # Synaptic Intelligence is not applied to the last fully
          # connected layer (and implicitly to "freeze below" ones.
          plugins.append(
              SynapticIntelligencePlugin(
                  ewc_lambda, excluded_parameters=[fc_name]
              )
          )
  
      self.cwr_plugin = CWRStarPlugin(
          model, cwr_layer_name=fc_name, freeze_remaining_model=False
      )
      plugins.append(self.cwr_plugin)
  
      optimizer = SGD(
          model.parameters(), lr=lr, momentum=momentum, weight_decay=l2
      )
  
      if criterion is None:
          criterion = CrossEntropyLoss()
  
      self.ewc_lambda = ewc_lambda
      self.freeze_below_layer = freeze_below_layer
      self.rm_sz = rm_sz
      self.inc_update_rate = inc_update_rate
      self.max_r_max = max_r_max
      self.max_d_max = max_d_max
      self.lr = lr
      self.inc_lr = inc_lr
      self.momentum = momentum
      self.l2 = l2
      # replay memory (x, y)
      self.rm: Tuple[Tensor, Tensor] = (torch.empty(0), torch.empty(0))
      # Placeholder Tensor to avoid typing issues
      self.cur_acts: Tensor = torch.empty(0)
      self.replay_mb_size = 0
  
      super().__init__(
          model,
          optimizer,
          criterion,
          train_mb_size=train_mb_size,
          train_epochs=train_epochs,
          eval_mb_size=eval_mb_size,
          device=device,
          plugins=plugins,
          evaluator=evaluator,
          eval_every=eval_every,
      )
  
imports: import warnings
  from typing import Callable, Optional, List, Tuple, Union
  import torch
  from torch import Tensor
  from torch.nn import CrossEntropyLoss
  from torch.nn.modules.batchnorm import _NormBase
  from torch.optim import SGD
  from torch.utils.data import DataLoader
  from avalanche.models import MobilenetV1
  from avalanche.models.batch_renorm import BatchRenorm2D
  from avalanche.training.plugins import SupervisedPlugin, EvaluationPlugin, SynapticIntelligencePlugin, CWRStarPlugin
  from avalanche.training.templates import SupervisedTemplate
  from avalanche.training.utils import replace_bn_with_brn, get_last_fc_layer, freeze_up_to, change_brn_pars, examples_per_class, LayerAndParameter
  from avalanche.training.plugins.evaluation import default_evaluator
label_desc: Use image node_id 1 to create a new AR1 object from inherited base classes: SupervisedTemplate with example: obj = AR1(criterion, lr, inc_lr, momentum, l2, train_epochs, init_update_rate, inc_update_rate, max_r_max, max_d_max, inc_step, rm_sz, freeze_below_layer, latent_layer_num, ewc_lambda, train_mb_size, eval_mb_size, device, plugins, evaluator, eval_every)