def build(self, classifier_type='convnet', classifier_args=dict(dropout=0.2)): '''Builds a simple image classifier. Args: classifier_type (str): Network type for the classifier. classifier_args: Classifier arguments. Can include dropout, batch_norm, layer_norm, etc. ''' classifier_args = classifier_args or {} shape = self.get_dims('x', 'y', 'c') dim_l = self.get_dims('labels') Encoder, args = update_encoder_args(shape, model_type=classifier_type, encoder_args=classifier_args) args.update(**classifier_args) classifier = Encoder(shape, dim_out=dim_l, **args) self.nets.classifier = classifier
def build(self, classifier_type='convnet', classifier_args=dict(dropout=0.2)): classifier_args = classifier_args or {} shape = self.get_dims('x', 'y', 'c') dim_l = self.get_dims('labels') Encoder, args = update_encoder_args( shape, model_type=classifier_type, encoder_args=classifier_args) args.update(**classifier_args) classifier = Encoder(shape, dim_out=dim_l, **args) self.nets.classifier = classifier
def build(self, dim_out=None, encoder_type: str = 'convnet', encoder_args=dict(fully_connected_layers=1028), Encoder=None): x_shape = self.get_dims('x', 'y', 'c') Encoder_, encoder_args = update_encoder_args(x_shape, model_type=encoder_type, encoder_args=encoder_args) Encoder = Encoder or Encoder_ encoder = Encoder(x_shape, dim_out=dim_out, **encoder_args) self.nets.encoder = encoder
def build(self, classifier_type='convnet', classifier_args=dict(dropout=0.2)): classifier_args = classifier_args or {} shape = self.get_dims('x', 'y', 'c') dim_l = self.get_dims('labels') Encoder, args = update_encoder_args(shape, model_type=classifier_type, encoder_args=classifier_args) args.update(**classifier_args) classifier = Encoder(shape, dim_out=dim_l, **args) self.nets.classifier = classifier
def build(self, encoder_type: str = 'convnet', dim_out: int = None, encoder_args=dict(fully_connected_layers=1024)): ''' Args: encoder_type: Encoder model type. dim_out: Output size. encoder_args: Arguments for encoder build. ''' x_shape = self.get_dims('x', 'y', 'c') Encoder, encoder_args = update_encoder_args(x_shape, model_type=encoder_type, encoder_args=encoder_args) encoder = Encoder(x_shape, dim_out=dim_out, **encoder_args) self.nets.encoder = encoder
def build(self, classifier_type='convnet', classifier_args=dict(dropout=0.2)): '''Builds a simple image classifier. Args: classifier_type (str): Network type for the classifier. classifier_args: Classifier arguments. Can include dropout, batch_norm, layer_norm, etc. ''' classifier_args = classifier_args or {} shape = self.get_dims('x', 'y', 'c') dim_l = self.get_dims('labels') Encoder, args = update_encoder_args( shape, model_type=classifier_type, encoder_args=classifier_args) args.update(**classifier_args) classifier = Encoder(shape, dim_out=dim_l, **args) self.nets.classifier = classifier
def build(self, encoder_type: str='convnet', dim_out: int=None, encoder_args=dict(), semi_supervised=None): ''' Args: encoder_type: Encoder model type. dim_out: Output size. encoder_args: Arguments for encoder build. ''' x_shape = self.get_dims('x', 'y', 'c') if 'encoder' not in self.nets: if encoder_type == 'alexnet': Encoder = AlexNetEncoder encoder_args.pop('min_dim') encoder = Encoder(x_shape, dim_out=dim_out, **encoder_args) else: Encoder, _ = update_encoder_args( x_shape, model_type=encoder_type) encoder = Encoder(x_shape, dim_out=dim_out, **encoder_args) self.nets.encoder = encoder self.data.reset(mode='test', make_pbar=False) self.data.next() X = self.inputs('inputs').cpu() Z = self.nets.encoder(X) dim_z = Z.size(1) self.linear_indices = [] self.conv_indices = [] self.c_idx = None index = -2 try: while True: layer = self.nets.encoder.models[index] if isinstance(layer, torch.nn.modules.linear.Linear): # Is a linear layer. self.linear_indices.append(index) elif isinstance(layer, cortex.built_ins.networks.modules.View): # Is a flattened version of a convolutional layer. self.c_idx = self.c_idx or index elif isinstance(layer, torch.nn.modules.conv.Conv2d): # Is a convolutional layer. self.conv_indices.append(index) index -= 1 except IndexError: pass if not semi_supervised: # Build the classifier on top of Y. self.classifier.build(dim_in=dim_z) # Build the classifier on top of the layer below Y. self.h_idx = self.linear_indices[0] dim_h = self.nets.encoder.states[self.h_idx].size(1) self.classifier_h.build(dim_in=dim_h) # Build the classifier on top of the last conv layer. dim_c = self.nets.encoder.states[self.c_idx].size(1) self.classifier_c.build(dim_in=dim_c)