You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
After a pretraining task, it is not possible to access and change the last layer of the InceptionTimePlus model via model.head[-1]. This is probably due to a double call of nn.Sequential in the model class (?).
The model:
class InceptionTimePlus(nn.Sequential):
def __init__(self, c_in, c_out, seq_len=None, nf=32, nb_filters=None,
flatten=False, concat_pool=False, fc_dropout=0., bn=False, y_range=None, custom_head=None, **kwargs):
if nb_filters is not None: nf = nb_filters
else: nf = ifnone(nf, nb_filters) # for compatibility
backbone = InceptionBlockPlus(c_in, nf, **kwargs)
#head
self.head_nf = nf * 4
self.c_out = c_out
self.seq_len = seq_len
if custom_head is not None:
if isinstance(custom_head, nn.Module): head = custom_head
else: head = custom_head(self.head_nf, c_out, seq_len)
else: head = self.create_head(self.head_nf, c_out, seq_len, flatten=flatten, concat_pool=concat_pool,
fc_dropout=fc_dropout, bn=bn, y_range=y_range)
layers = OrderedDict([('backbone', nn.Sequential(backbone)), ('head', nn.Sequential(head))])
super().__init__(layers)
def create_head(self, nf, c_out, seq_len, flatten=False, concat_pool=False, fc_dropout=0., bn=False, y_range=None):
if flatten:
nf *= seq_len
layers = [Flatten()]
else:
if concat_pool: nf *= 2
layers = [GACP1d(1) if concat_pool else GAP1d(1)]
layers += [LinBnDrop(nf, c_out, bn=bn, p=fc_dropout)]
if y_range: layers += [SigmoidRange(*y_range)]
return nn.Sequential(*layers)
Only if i change the return of the create_head function to "return layers" and subsequently "layers = OrderedDict([('backbone', nn.Sequential(backbone)), ('head', nn.Sequential(*head))])", it is possible to e.g. load a pretrained InceptionTimePlus model and
e.g. change the last Linear in the LinBnDrop Layer like: self.model.head[-1][1] = torch.nn.Linear(last_layer.in_features, my_out_channels)
The text was updated successfully, but these errors were encountered:
After a pretraining task, it is not possible to access and change the last layer of the InceptionTimePlus model via model.head[-1]. This is probably due to a double call of nn.Sequential in the model class (?).
The model:
Only if i change the return of the create_head function to "return layers" and subsequently "layers = OrderedDict([('backbone', nn.Sequential(backbone)), ('head', nn.Sequential(*head))])", it is possible to e.g. load a pretrained InceptionTimePlus model and
e.g. change the last Linear in the LinBnDrop Layer like:
self.model.head[-1][1] = torch.nn.Linear(last_layer.in_features, my_out_channels)
The text was updated successfully, but these errors were encountered: