Source code for avalanche.benchmarks.scenarios.exmodel_scenario

################################################################################
# Copyright (c) 2022 ContinualAI.                                              #
# Copyrights licensed under the MIT License.                                   #
# See the accompanying LICENSE file for terms.                                 #
#                                                                              #
# Date: 11-04-2022                                                             #
# Author(s): Antonio Carta                                                     #
# E-mail: contact@continualai.org                                              #
# Website: avalanche.continualai.org                                           #
################################################################################
from typing import List

from torch.nn import Module

from . import CLScenario, CLExperience, CLStream


[docs]class ExModelExperience(CLExperience): """Ex-Model CL Experience. The experience only provides the expert model. The original data is not available. """
[docs] def __init__( self, expert_model, current_experience: int = None, origin_stream=None, classes_in_this_experience=None, ): super().__init__( current_experience=current_experience, origin_stream=origin_stream ) self.expert_model = expert_model self.classes_in_this_experience = classes_in_this_experience
[docs]class ExModelCLScenario(CLScenario): """Ex-Model CL Scenario. Ex-Model Continual Learning (ExML) is a continual learning scenario where the CL agent learns from a stream of pretrained models instead of raw data. These approach allows to integrate knowledge from different CL agents or pretrained models. Reference: Carta, A., Cossu, A., Lomonaco, V., & Bacciu, D. (2021). Ex-Model: Continual Learning from a Stream of Trained Models. arXiv preprint arXiv:2112.06511. https://arxiv.org/abs/2112.06511 """
[docs] def __init__( self, original_benchmark: CLScenario, expert_models: List[Module] ): """Init. :param original_benchmark: a reference to the original benchmark containing the stream of experiences used to train the experts. :param expert_models: pretrained models. The model in position i must be trained on the i-th experience of the train stream of `original_benchmark`. """ expert_models_l = [] for m, e in zip(expert_models, original_benchmark.train_stream): cine = e.classes_in_this_experience expert_models_l.append( ExModelExperience(m, classes_in_this_experience=cine) ) expert_stream = CLStream( "expert_models", expert_models_l, benchmark=self ) streams = [expert_stream] self.original_benchmark = original_benchmark # for s in original_benchmark.streams.values(): # s = copy(s) # s.name = 'original_' + s.name # streams.append(s) super().__init__(streams)