def test_multihead_head_selection(self): # Check if the optimizer is updated correctly # when heads are created and updated. model = MultiHeadClassifier(in_features=6) optimizer = SGD(model.parameters(), lr=1e-3) criterion = CrossEntropyLoss() benchmark = get_fast_benchmark(use_task_labels=True, shuffle=False) strategy = Naive(model, optimizer, criterion, train_mb_size=100, train_epochs=1, eval_mb_size=100, device='cpu') strategy.evaluator.loggers = [TextLogger(sys.stdout)] # initialize head strategy.train(benchmark.train_stream[0]) strategy.train(benchmark.train_stream[4]) # create models with fixed head model_t0 = model.classifiers['0'] model_t4 = model.classifiers['4'] # check head task0 for x, y, t in DataLoader(benchmark.train_stream[0].dataset): y_mh = model(x, t) y_t = model_t0(x) assert ((y_mh - y_t) ** 2).sum() < 1.e-7 break # check head task4 for x, y, t in DataLoader(benchmark.train_stream[4].dataset): y_mh = model(x, t) y_t = model_t4(x) assert ((y_mh - y_t) ** 2).sum() < 1.e-7 break
def __init__( self, num_layers=1, in_features=784, hidden_features_per_column=100, adapter="mlp", ): """ :param num_layers: number of layers (default=1) :param in_features: size of each input sample :param hidden_features_per_column: number of hidden units for each column :param adapter: adapter type. One of {'linear', 'mlp'} (default='mlp') """ super().__init__() assert num_layers >= 1 self.num_layers = num_layers self.in_features = in_features self.out_features_per_columns = hidden_features_per_column self.layers = nn.ModuleList() self.layers.append(PNNLayer(in_features, hidden_features_per_column)) for _ in range(num_layers - 1): lay = PNNLayer( hidden_features_per_column, hidden_features_per_column, adapter=adapter, ) self.layers.append(lay) self.classifier = MultiHeadClassifier(hidden_features_per_column)
def __init__(self, num_layers=1, in_features=784, hidden_features_per_column=100, adapter='mlp'): """ Progressive Neural Network. The model assumes that each experience is a separate task. Multiple experiences with the same task label or multiple task labels within the same experience will result in a runtime error. :param num_layers: number of layers (default=1) :param in_features: size of each input sample :param hidden_features_per_column: number of hidden units for each column :param adapter: adapter type. One of {'linear', 'mlp'} (default='mlp') """ super().__init__() assert num_layers >= 1 self.num_layers = num_layers self.in_features = in_features self.out_features_per_columns = hidden_features_per_column self.layers = nn.ModuleList() self.layers.append(PNNLayer(in_features, hidden_features_per_column)) for _ in range(num_layers - 1): lay = PNNLayer(hidden_features_per_column, hidden_features_per_column, adapter=adapter) self.layers.append(lay) self.classifier = MultiHeadClassifier(hidden_features_per_column)
def __init__(self, num_classes=10, input_size=6, hidden_size=50): super().__init__() self.classifier = MultiHeadClassifier(self._hidden_size, num_classes)