예제 #1
0
    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
예제 #2
0
파일: conftest.py 프로젝트: rdevon/cortex
 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
예제 #3
0
 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
예제 #4
0
 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
예제 #5
0
    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
예제 #6
0
    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
예제 #7
0
    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)