예제 #1
0
파일: deepSVDD.py 프로젝트: Csraf/dldm
    def load_model(self, model_path, load_ae=False):
        """Load Deep SVDD model from model_path."""

        model_dict = torch.load(model_path)

        self.R = model_dict['R']
        self.c = model_dict['c']
        self.net.load_state_dict(model_dict['net_dict'])
        if load_ae:
            if self.ae_net is None:
                self.ae_net = build_autoencoder(self.net_name)
            self.ae_net.load_state_dict(model_dict['ae_net_dict'])
예제 #2
0
    def load_model(self, model_path, load_ae=False, map_location='cpu'):
        """Load Deep SAD model from model_path."""

        model_dict = torch.load(model_path, map_location=map_location)

        self.c = model_dict['c']
        self.net.load_state_dict(model_dict['net_dict'])

        # load autoencoder parameters if specified
        if load_ae:
            if self.ae_net is None:
                self.ae_net = build_autoencoder(self.net_name)
            self.ae_net.load_state_dict(model_dict['ae_net_dict'])
    def pretrain(self, dataset: BaseADDataset, optimizer_name: str = 'adam', lr: float = 0.001, n_epochs: int = 100,
                 lr_milestones: tuple = (), batch_size: int = 128, weight_decay: float = 1e-6, device: str = 'cuda',
                 n_jobs_dataloader: int = 0):
        """Pretrains the weights for the Deep SVDD network \phi via autoencoder."""

        self.ae_net = build_autoencoder(self.net_name)
        self.ae_optimizer_name = optimizer_name
        self.ae_trainer = AETrainer(optimizer_name, lr=lr, n_epochs=n_epochs, lr_milestones=lr_milestones,
                                    batch_size=batch_size, weight_decay=weight_decay, device=device,
                                    n_jobs_dataloader=n_jobs_dataloader)
        self.ae_net = self.ae_trainer.train(dataset, self.ae_net)
        self.ae_trainer.test(dataset, self.ae_net)
        self.init_network_weights_from_pretraining()
예제 #4
0
    def pretrain(self,
                 dataset: BaseADDataset,
                 optimizer_name: str = 'adam',
                 lr: float = 0.001,
                 n_epochs: int = 100,
                 lr_milestones: tuple = (),
                 batch_size: int = 128,
                 weight_decay: float = 1e-6,
                 device: str = 'cuda',
                 n_jobs_dataloader: int = 0):
        """Pretrains the weights for the Deep SAD network phi via autoencoder."""

        # Set autoencoder network
        self.ae_net = build_autoencoder(self.net_name)

        # Train
        self.ae_optimizer_name = optimizer_name
        self.ae_trainer = AETrainer(optimizer_name,
                                    lr=lr,
                                    n_epochs=n_epochs,
                                    lr_milestones=lr_milestones,
                                    batch_size=batch_size,
                                    weight_decay=weight_decay,
                                    device=device,
                                    n_jobs_dataloader=n_jobs_dataloader)
        self.ae_net = self.ae_trainer.train(dataset, self.ae_net)

        # Get train results
        self.ae_results['train_time'] = self.ae_trainer.train_time

        # Test
        self.ae_trainer.test(dataset, self.ae_net)

        # Get test results
        self.ae_results['test_auc'] = self.ae_trainer.test_auc
        self.ae_results['test_time'] = self.ae_trainer.test_time

        # Initialize Deep SAD network weights from pre-trained encoder
        self.init_network_weights_from_pretraining()
예제 #5
0
파일: ssad.py 프로젝트: MasaKat0/D3RE
    def load_ae(self, dataset_name, model_path):
        """Load pretrained autoencoder from model_path for feature extraction in a hybrid SSAD model."""

        model_dict = torch.load(model_path, map_location='cpu')
        ae_net_dict = model_dict['ae_net_dict']
        if dataset_name in ['mnist', 'fmnist', 'cifar10']:
            net_name = dataset_name + '_LeNet'
        else:
            net_name = dataset_name + '_mlp'

        if self.ae_net is None:
            self.ae_net = build_autoencoder(net_name)

        # update keys (since there was a change in network definition)
        ae_keys = list(self.ae_net.state_dict().keys())
        for i in range(len(ae_net_dict)):
            k, v = ae_net_dict.popitem(False)
            new_key = ae_keys[i]
            ae_net_dict[new_key] = v
            i += 1

        self.ae_net.load_state_dict(ae_net_dict)
        self.ae_net.eval()
예제 #6
0
파일: aek.py 프로젝트: Csraf/dldm
 def train(self,
           dataset: BaseADDataset,
           optimizer_name: str = 'adam',
           lr: float = 0.001,
           n_epochs: int = 100,
           lr_milestones: tuple = (),
           batch_size: int = 128,
           weight_decay: float = 1e-6,
           device: str = 'cuda',
           n_jobs_dataloader: int = 0):
     self.ae_net = build_autoencoder(self.net_name)
     self.ae_optimizer_name = optimizer_name
     self.ae_trainer = AEKTrainer(optimizer_name,
                                  lr=lr,
                                  n_epochs=n_epochs,
                                  lr_milestones=lr_milestones,
                                  batch_size=batch_size,
                                  weight_decay=weight_decay,
                                  device=device,
                                  n_jobs_dataloader=n_jobs_dataloader)
     self.ae_net = self.ae_trainer.train(dataset, self.ae_net)
     self.ae_trainer.test(dataset=dataset, ae_net=self.ae_net,
                          flg=1)  # 测试训练集
예제 #7
0
파일: deepSVDD.py 프로젝트: tianzhaotju/HAE
 def pretrain(self,
              dataset: BaseADDataset,
              optimizer_name: str = 'adam',
              lr: float = 0.001,
              n_epochs: int = 100,
              lr_milestones: tuple = (),
              batch_size: int = 128,
              weight_decay: float = 1e-6,
              device: str = 'cuda',
              n_jobs_dataloader: int = 0,
              dataset_name: str = 'mnist',
              ae_loss_type: str = 'l2',
              ae_only: bool = False,
              model_save_path: str = ''):
     """Pretrains the weights for the Deep SVDD network \phi via autoencoder."""
     self.ae_net = build_autoencoder(self.net_name)
     self.ae_optimizer_name = optimizer_name
     self.ae_trainer = AETrainer(optimizer_name,
                                 lr=lr,
                                 n_epochs=n_epochs,
                                 lr_milestones=lr_milestones,
                                 batch_size=batch_size,
                                 weight_decay=weight_decay,
                                 device=device,
                                 n_jobs_dataloader=n_jobs_dataloader,
                                 dataset_name=dataset_name,
                                 ae_loss_type=ae_loss_type,
                                 ae_only=ae_only)
     self.ae_net = self.ae_trainer.train(dataset, self.ae_net)
     if model_save_path != '':
         torch.save(self.ae_net, model_save_path)
     self.init_network_weights_from_pretraining()
     self.ae_trainer.test(dataset, self.ae_net, self.net)
     # Get results
     # self.results['ae_test_auc'] = self.ae_trainer.test_auc
     # self.results['ae_test_time'] = self.ae_trainer.test_time
     self.results['ae_test_scores'] = self.ae_trainer.test_scores
예제 #8
0
파일: SemiDGM.py 프로젝트: MasaKat0/D3RE
 def set_vae(self, net_name):
     """Builds the variational autoencoder network for pretraining."""
     self.net_name = net_name
     self.vae_net = build_autoencoder(self.net_name)  # VAE for pretraining