示例#1
0
    def __init__(self,
                 arch,
                 num_classes,
                 dims,
                 resnet_variant='alpha',
                 optimizer='adam',
                 lr=0.001,
                 beta1=0.9,
                 beta2=0.999,
                 weight_decay=0.0001,
                 momentum=0.9,
                 schedule='none',
                 steps=[100, 150],
                 step_factor=0.1,
                 k=5):
        super(ComplexModel, self).__init__()
        self.save_hyperparameters()

        self.encoder, self.processor, self.decoder = load_complex_network(
            arch,
            num_classes,
            resnet_variant,
        )

        self.real_to_complex = RealToComplex()
        self.complex_to_real = ComplexToReal()
        size = get_encoder_output_size(self.encoder, dims)
        self.discriminator = Discriminator(size=size)

        self.train_acc = Accuracy()
        self.val_acc = Accuracy()

        print(self.hparams)
示例#2
0
    def __init__(self,
                 input_size: int = 784,
                 lin1_size: int = 256,
                 lin2_size: int = 256,
                 lin3_size: int = 256,
                 output_size: int = 10,
                 lr: float = 0.001,
                 weight_decay: float = 0.0005,
                 **kwargs):
        super().__init__()

        # this line ensures params passed to LightningModule will be saved to ckpt
        # it also allows to access params with 'self.hparams' attribute
        self.save_hyperparameters()

        self.model = SimpleDenseNet(hparams=self.hparams)

        # loss function
        self.criterion = torch.nn.CrossEntropyLoss()

        # use separate metric instance for train, val and test step
        # to ensure a proper reduction over the epoch
        self.train_accuracy = Accuracy()
        self.val_accuracy = Accuracy()
        self.test_accuracy = Accuracy()

        self.metric_hist = {
            "train/acc": [],
            "val/acc": [],
            "train/loss": [],
            "val/loss": [],
        }
示例#3
0
    def __init__(
        self,
        arch,
        num_classes,
        additional_layers=False,
        resnet_variant='alpha',
        noisy=False,
        gamma=1.0,
        optimizer='sgd',
        lr=0.1,
        beta1=0.9,
        beta2=0.999,
        weight_decay=0.0001,
        momentum=0.9,
        schedule='none',
        steps=[100, 150],
        step_factor=0.1,
    ):
        super(BaselineModel, self).__init__()
        self.save_hyperparameters()

        self.encoder, self.processor, self.decoder = load_baseline_network(
            arch, num_classes, resnet_variant, additional_layers)
        self.train_acc = Accuracy()
        self.val_acc = Accuracy()

        print(self.hparams)
 def __init__(self, hparams):
     super(Model, self).__init__()
     self.hparams = hparams
     self.model = load_network(hparams)
     self.train_acc = Accuracy()
     self.val_acc = Accuracy()
     self.criterion = nn.BCEWithLogitsLoss()
示例#5
0
 def prepare(self):
     (self.train_transforms,
      self.infer_transforms) = self._build_transforms(
          **self.config.transforms)
     (
         self._train_dataloader,
         self._val_dataloader,
         self._test_dataloader,
     ) = self._build_dataloaders(**self.config.data)
     num_slots = len(
         self.train_transforms["utterance&slots"][0].vocab.idx.keys())
     num_intents = len(self.train_transforms["intent"][0].vocab.idx.keys())
     add_feat_len = 0
     if self.config.model.use_intent:
         add_feat_len += num_intents
     self.joint_model = build_intent_joint_model(
         **self.config.model,
         num_slots=num_slots,
         num_intents=num_intents,
         vocab=self.train_transforms["utterance"][1].vocab,
         add_feat_len=add_feat_len,
     )
     self.slot_accuracy_metric = Accuracy(num_classes=num_slots)
     self.doc_accuracy_metric = Accuracy(num_classes=num_intents)
     self.precision_metric = AveragePrecision()
     self.slot_f1_metric = F1(num_classes=num_slots)
     self.doc_f1_metric = F1(num_classes=num_intents)
     self.optimizer = FairSeqAdam(self.joint_model.parameters(),
                                  **self.config.optimizer)
示例#6
0
    def __init__(
        self,
        encoder_weights,
        inversion_net_weights,
        dims,
        num_classes,
        arch='resnet56',
        resnet_variant='alpha',
        additional_layers=False,
        optimizer='sgd',
        lr=0.1,
        beta1=0.9,
        beta2=0.999,
        weight_decay=0.0001,
        momentum=0.9,
        schedule='none',
        steps=[100, 150],
        step_factor=0.1,
        complex=False,
        angle_dis_weights=None,
    ):
        super(InferenceAttack3Model, self).__init__()
        self.save_hyperparameters()

        # Load pretrained models
        if complex:
            # Load complex encoder
            self.protype_encoder = ComplexEncoder(encoder_weights)
        else:
            self.protype_encoder = BaselineEncoder(encoder_weights)

        self.protype_encoder.freeze()

        # Feature inversion network
        in_size = get_encoder_output_size(self.protype_encoder, dims)

        self.inversion_network = InversionNetwork(inversion_net_weights,
                                                  in_size[-3])
        self.inversion_network.freeze()

        if complex:
            # Angle discriminator
            self.angle_discriminator = AngleDiscriminator(
                angle_dis_weights, in_size)
            self.angle_discriminator.freeze()

            self.complex_to_real = ComplexToReal()

        # Load attack classification model
        self.encoder, self.processor, self.decoder = load_baseline_network(
            arch, num_classes, resnet_variant, additional_layers=False)
        self.train_acc = Accuracy()
        self.val_acc = Accuracy()

        print(self.hparams)
示例#7
0
    def __init__(self, hidden_dim=128, learning_rate=1e-3):
        super().__init__()
        self.save_hyperparameters()

        # mnist images are (1, 28, 28) (channels, width, height)
        self.layer_1 = nn.Linear(28 * 28, self.hparams.hidden_dim)
        self.layer_2 = nn.Linear(self.hparams.hidden_dim,
                                 self.hparams.hidden_dim * 2)
        self.layer_3 = nn.Linear(self.hparams.hidden_dim * 2, 10)

        self.train_accuracy = Accuracy()
        self.val_accuracy = Accuracy()
        self.test_accuracy = Accuracy()
    def __init__(
        self,
        architecture: str = "GraphSAGE",
        aggregation_method: str = "concat",
        num_node_features: int = 1,
        add_pos_to_features: bool = False,
        num_conv_layers: int = 3,
        conv_size: int = 128,
        lin_size: int = 128,
        output_size: int = 10,
        lr: float = 0.001,
        weight_decay: float = 0,
        **kwargs
    ):
        super().__init__()

        self.save_hyperparameters()
        self.add_pos_to_features = add_pos_to_features

        # init network architecture
        if self.hparams.architecture == "GraphSAGE":
            self.model = graph_sage.GraphSage(hparams=self.hparams)
        elif self.hparams.architecture == "GAT":
            self.model = gat.GAT(hparams=self.hparams)
        elif self.hparams.architecture == "JumpingKnowledge":
            self.model = jumping_knowledge.JK(hparams=self.hparams)
        elif self.hparams.architecture == "GCN":
            self.model = gcn.GCN(hparams=self.hparams)
        elif self.hparams.architecture == "VectorSAGE":
            self.model = vector_sage_module.VectorSAGEModule(hparams=self.hparams)
        else:
            raise Exception("Incorrect architecture name!")

        # loss function
        self.criterion = torch.nn.CrossEntropyLoss()

        # use separate metric instance for train, val and test step
        # to ensure a proper reduction over the epoch
        self.train_accuracy = Accuracy()
        self.val_accuracy = Accuracy()
        self.test_accuracy = Accuracy()

        self.metric_hist = {
            "train/acc": [],
            "val/acc": [],
            "train/loss": [],
            "val/loss": [],
        }
示例#9
0
 def __init__(self):
     super().__init__()
     self.metrics_singleclass = nn.ModuleDict({
         'loss':
         BCEWithLogitsLoss(),
         'acc':
         SoftMaxWrapper(Accuracy(), multiclass=False),
         'auc':
         AUROC(),
     })
     self.metrics_multiclass = nn.ModuleDict({
         'loss':
         CrossEntropyLoss(),
         'acc':
         SoftMaxWrapper(Accuracy(), multiclass=True),
     })
    def __init__(self, HPARAMS):
        super().__init__()
        # HPARAMS
        self.save_hyperparameters()
        self.models = {
            'wav2vecLSTMAttn': Wav2VecLSTM,
            'spectralCNNLSTM': SpectralCNNLSTM,
            'MultiScale': SpectralMultiScale,
        }
        self.model = self.models[HPARAMS['model_type']](HPARAMS['hidden_size'])

        self.classification_criterion = MSE()
        self.regression_criterion = MSE()
        self.mae_criterion = MAE()
        self.rmse_criterion = RMSELoss()
        self.accuracy = Accuracy()

        self.alpha = HPARAMS['alpha']
        self.beta = HPARAMS['beta']
        self.gamma = HPARAMS['gamma']

        self.lr = HPARAMS['lr']

        self.csv_path = HPARAMS['speaker_csv_path']
        self.df = pd.read_csv(self.csv_path)
        self.h_mean = self.df['height'].mean()
        self.h_std = self.df['height'].std()
        self.a_mean = self.df['age'].mean()
        self.a_std = self.df['age'].std()

        print(
            f"Model Details: #Params = {self.count_total_parameters()}\t#Trainable Params = {self.count_trainable_parameters()}"
        )
示例#11
0
 def __init__(self, model, criterion, config: dict, loaders: dict):
     super().__init__()
     self.model = model
     self.criterion = criterion
     self.config = config
     self.loaders = loaders
     self.metrics = {'acc': Accuracy(), 'f1': F1()}
    def __init__(self, HPARAMS):
        super().__init__()
        # HPARAMS
        self.save_hyperparameters()
        self.model = Wav2VecLSTM(HPARAMS['model_hidden_size'])

        self.classification_criterion = MSE()
        self.regression_criterion = MSE()
        self.mae_criterion = MAE()
        self.rmse_criterion = RMSELoss()
        self.accuracy = Accuracy()

        self.alpha = HPARAMS['model_alpha']
        self.beta = HPARAMS['model_beta']
        self.gamma = HPARAMS['model_gamma']

        self.lr = HPARAMS['training_lr']

        self.csv_path = HPARAMS['speaker_csv_path']
        self.df = pd.read_csv(self.csv_path, sep=' ')
        self.h_mean = self.df['Height'].mean()
        self.h_std = self.df['Height'].std()
        self.a_mean = self.df['Age'].mean()
        self.a_std = self.df['Age'].std()

        print(f"Model Details: #Params = {self.count_total_parameters()}\t#Trainable Params = {self.count_trainable_parameters()}")
示例#13
0
def test_accuracy(num_classes):
    acc = Accuracy(num_classes=num_classes)
    assert acc.name == 'accuracy'

    result = acc(pred=torch.tensor([[0, 1, 1], [1, 0, 1]]),
                 target=torch.tensor([[0, 0, 1], [1, 0, 1]]))
    assert isinstance(result, torch.Tensor)
示例#14
0
    def __init__(self,
                 model: torch.nn.Module,
                 train_data: str,
                 val_data: str,
                 test_data: str,
                 batch_size: int,
                 num_classes: int = 2,
                 num_workers: int = 1):
        super().__init__()
        self.num_workers = num_workers
        self.train_data = train_data
        self.val_data = val_data
        self.test_data = test_data
        self.batch_size = batch_size

        self.model = model

        self.criterion = torch.nn.BCELoss()

        self.collate_fn = PaddingCollateFn(150)

        self.train_metrics = []
        self.val_metrics = [
            Accuracy(num_classes=num_classes),
            F1(num_classes=num_classes),
            Precision(num_classes=num_classes),
            Recall(num_classes=num_classes)
        ]
示例#15
0
 def __init__(self, out_classes: int = 3, lr_bert: float = 1e-5, lr_class: float = 1e-4,
              weight_decay: float = 1e-2, freeze_base: bool = False, train_steps: int = 100):
     super(SentBert, self).__init__()
     self.lr_bert = lr_bert
     self.lr_class = lr_class
     self.weight_decay = weight_decay
     self.train_steps = train_steps
     self.save_hyperparameters()
     self.bert = BertForSequenceClassification.from_pretrained(
         'bert-base-uncased', num_labels=out_classes, return_dict=True)
     if freeze_base:
         for param in self.bert.base_model.parameters():
             param.requires_grad = False
     self.f1 = F1(num_classes=out_classes, average='macro')
     self.train_acc = Accuracy()
     self.val_acc = Accuracy()
示例#16
0
    def __init__(
        self,
        num_classes: int,
        backbone: str = "prajjwal1/bert-tiny",
        optimizer: Type[torch.optim.Optimizer] = torch.optim.Adam,
        metrics: Union[Callable, Mapping, Sequence, None] = [Accuracy()],
        learning_rate: float = 1e-3,
    ):
        self.save_hyperparameters()

        os.environ["TOKENIZERS_PARALLELISM"] = "TRUE"
        # disable HF thousand warnings
        warnings.simplefilter("ignore")
        # set os environ variable for multiprocesses
        os.environ["PYTHONWARNINGS"] = "ignore"

        super().__init__(
            model=None,
            loss_fn=None,
            optimizer=optimizer,
            metrics=metrics,
            learning_rate=learning_rate,
        )
        self.model = BertForSequenceClassification.from_pretrained(
            backbone, num_labels=num_classes)
示例#17
0
    def __init__(self, *args, **kwargs):
        super().__init__()
        self.save_hyperparameters()
        self.loss = BCELoss(reduction='mean')
        self.accuracy = Accuracy()

        # Initialize model architecture
        self.architecture = XLMREncoder(hparams=self.hparams)
    def __init__(self, config):
        super().__init__()
        self.train_config = config

        self.roberta = RobertaForMaskedLM.from_pretrained('roberta-base')
        _ = self.roberta.eval()
        for param in self.roberta.parameters():
            param.requires_grad = False

        self.pred_model = self.roberta.roberta
        self.enc_model = self.pred_model.embeddings.word_embeddings
        self.proj_head = DVProjectionHead_EmbActi()

        self.lossfunc = nn.BCEWithLogitsLoss()

        self.acc = Accuracy(threshold=0.0)
        self.f1 = F1(threshold=0.0)
示例#19
0
 def __init__(self, config, trial=None):
     super(LitPSD, self).__init__()
     if trial:
         self.trial = trial
     else:
         self.trial = None
     self.pylog = logging.getLogger(__name__)
     logging.getLogger("lightning").setLevel(self.pylog.level)
     self.config = config
     if hasattr(config.system_config, "half_precision"):
         self.needs_float = not config.system_config.half_precision
     else:
         self.needs_float = True
     self.hparams = DictionaryUtility.to_dict(config)
     self.n_type = config.system_config.n_type
     self.lr = config.optimize_config.lr
     self.modules = ModuleUtility(config.net_config.imports +
                                  config.dataset_config.imports +
                                  config.optimize_config.imports)
     self.model_class = self.modules.retrieve_class(
         config.net_config.net_class)
     # self.data_module = PSDDataModule(config,self.device)
     self.model = self.model_class(config)
     self.criterion_class = self.modules.retrieve_class(
         config.net_config.criterion_class)
     self.criterion = self.criterion_class(
         *config.net_config.criterion_params)
     self.softmax = LogSoftmax(dim=1)
     self.accuracy = Accuracy()
     self.confusion = ConfusionMatrix(num_classes=self.n_type)
     if hasattr(self.config.dataset_config, "calgroup"):
         calgroup = self.config.dataset_config.calgroup
     else:
         calgroup = None
     if self.config.dataset_config.dataset_class == "PulseDatasetDet":
         self.evaluator = PhysEvaluator(
             self.config.system_config.type_names,
             self.logger,
             device=self.device)
     elif self.config.dataset_config.dataset_class == "PulseDatasetWaveformNorm":
         self.evaluator = TensorEvaluator(self.logger,
                                          calgroup=calgroup,
                                          target_has_phys=False,
                                          target_index=None,
                                          metric_name="accuracy",
                                          metric_unit="")
     else:
         if hasattr(self.config.dataset_config, "calgroup"):
             self.evaluator = PSDEvaluator(
                 self.config.system_config.type_names,
                 self.logger,
                 device=self.device,
                 calgroup=self.config.dataset_config.calgroup)
         else:
             self.evaluator = PSDEvaluator(
                 self.config.system_config.type_names,
                 self.logger,
                 device=self.device)
示例#20
0
 def __init__(self, hparams):
     super(YourModel, self).__init__()
     """ 
     Initialise custom objects here
     """
     self.hparams = hparams
     self.model = ImageNet_Pretrained_Model()
     self.accuracy = pl.metrics.Accuracy()
     self.acc = Accuracy()
    def __init__(self, hparams):
        super().__init__()
        self.hparams = hparams
        self.train_batch_size = hparams.train_batch_size
        self.test_batch_size = hparams.test_batch_size
        self.input_size = ((3, ) if hparams.pseudo3d else
                           (1, )) + tuple(hparams.resize)
        self.classifier = Encoder(num_convolutions=hparams.num_convolutions,
                                  filters=hparams.filters,
                                  input_size=self.input_size,
                                  latent_dim=1,
                                  use_weight_norm=hparams.use_weight_norm,
                                  dropout_rate=hparams.dropout_rate)
        self.classifier.fc = nn.Linear(np.prod(
            self.classifier.intermediate_shape),
                                       1,
                                       bias=True)
        self.train_acc = Accuracy()
        self.val_acc = Accuracy()
        self.test_acc = Accuracy()

        if hparams.validate:
            torch.backends.cudnn.deterministic = True
            torch.backends.cudnn.benchmark = False
            torch.autograd.set_detect_anomaly(self.hparams.validate)

        resize = None if self.hparams.resize == (0, 0) else self.hparams.resize
        train_crop_type = self.hparams.train_crop_type if hasattr(
            self.hparams, 'train_crop_type') else 'random'
        crop_size = self.hparams.crop_size if hasattr(
            self.hparams, 'crop_size') else (224, 224)
        self.calabresi_train = CalabresiDataset(self.hparams.train_csv,
                                                crop_size=crop_size,
                                                crop_type=train_crop_type,
                                                resize=resize)  # noqa: E501
        self.calabresi_val = CalabresiDataset(self.hparams.valid_csv,
                                              crop_size=crop_size,
                                              crop_type='center',
                                              resize=resize)
        self.calabresi_test = CalabresiDataset(self.hparams.test_csv,
                                               crop_size=crop_size,
                                               crop_type='center',
                                               resize=resize)
示例#22
0
    def __init__(self, HPARAMS):
        super().__init__()
        # HPARAMS
        self.save_hyperparameters()
        lstm_inp=512
        lstm_h = HPARAMS['model_hidden_size']
        alpha = HPARAMS['model_alpha']
        beta = HPARAMS['model_beta']
        gamma = HPARAMS['model_gamma']
        csv_path = HPARAMS['speaker_csv_path']

        self.encoder = Wav2Vec(pretrained=True)
        for param in self.encoder.parameters():
            param.requires_grad = False

        for param in self.encoder.feature_extractor.conv_layers[5:].parameters():
            param.requires_grad = True

        self.lstm = nn.LSTM(lstm_inp, lstm_h, batch_first=True)
        self.attention = Attention(lstm_h)
    
        self.height_regressor = nn.Linear(lstm_h, 1)
        self.age_regressor = nn.Linear(lstm_h, 1)
        self.gender_classifier = nn.Linear(lstm_h, 1)

        self.classification_criterion = MSE()
        self.regression_criterion = MSE()
        self.mae_criterion = MAE()
        self.rmse_criterion = RMSELoss()
        self.accuracy = Accuracy()

        self.alpha = alpha
        self.beta = beta
        self.gamma = gamma

        self.lr = HPARAMS['training_lr']

        self.csv_path = csv_path
        self.df = pd.read_csv(self.csv_path, sep=' ')
        self.h_mean = self.df['Height'].mean()
        self.h_std = self.df['Height'].std()
        self.a_mean = self.df['Age'].mean()
        self.a_std = self.df['Age'].std()

        print(f"Model Details: #Params = {self.count_total_parameters()}\t#Trainable Params = {self.count_trainable_parameters()}")
示例#23
0
    def __init__(self,
                 classifier_weights,
                 encoder_weights,
                 inversion_net_weights,
                 dims,
                 complex=False,
                 angle_dis_weights=None,
                 verbose=False):
        super(InferenceAttack1Model, self).__init__()
        self.save_hyperparameters()

        # Load classification network
        self.classifier = BaselineNetwork(classifier_weights)
        self.classifier.freeze()

        if complex:
            # Load complex encoder
            self.encoder = ComplexEncoder(encoder_weights)
        else:
            self.encoder = BaselineEncoder(encoder_weights)

        self.encoder.freeze()

        # Load feature inversion network
        in_size = get_encoder_output_size(self.encoder, dims)
        self.inversion_network = InversionNetwork(inversion_net_weights,
                                                  in_size[-3])
        self.inversion_network.freeze()

        if complex:
            # Load angle discriminator
            self.angle_discriminator = AngleDiscriminator(
                angle_dis_weights, in_size)
            self.angle_discriminator.freeze()

            self.complex_to_real = ComplexToReal()

        self.acc = Accuracy()

        if verbose:
            print(self.hparams)
示例#24
0
download_data("https://pl-flash-data.s3.amazonaws.com/titanic.zip", 'data/')

# 2. Load the data
datamodule = TabularData.from_csv(
    "./data/titanic/titanic.csv",
    test_csv="./data/titanic/test.csv",
    categorical_input=[
        "Sex", "Age", "SibSp", "Parch", "Ticket", "Cabin", "Embarked"
    ],
    numerical_input=["Fare"],
    target="Survived",
    val_size=0.25,
)

# 3. Build the model
model = TabularClassifier.from_data(
    datamodule, metrics=[Accuracy(), Precision(),
                         Recall()])

# 4. Create the trainer. Run 10 times on data
trainer = flash.Trainer(max_epochs=10)

# 5. Train the model
trainer.fit(model, datamodule=datamodule)

# 6. Test model
trainer.test()

# 7. Save it!
trainer.save_checkpoint("tabular_classification_model.pt")
示例#25
0
def accuracy_score(labels, predictions):
    predictions = torch.Tensor(predictions)
    labels = torch.Tensor(labels)
    accuracy = Accuracy(threshold=cfg['training']['threshold'])
    return accuracy(predictions, labels).item()
class LightningLongformerCLS(pl.LightningModule):
    def __init__(self, config):
        super().__init__()
        self.train_config = config

        self.roberta = RobertaForMaskedLM.from_pretrained('roberta-base')
        _ = self.roberta.eval()
        for param in self.roberta.parameters():
            param.requires_grad = False

        self.pred_model = self.roberta.roberta
        self.enc_model = self.pred_model.embeddings.word_embeddings

        # self.proj_head = DVProjectionHead()
        # self.proj_head = DVProjectionHead_ActiFirst()
        self.proj_head = DVProjectionHead_EmbActi()

        self.tkz = RobertaTokenizer.from_pretrained("roberta-base")
        self.collator = TokenizerCollate(self.tkz)

        self.lossfunc = nn.BCEWithLogitsLoss()

        self.acc = Accuracy(threshold=0.0)
        self.f1 = F1(threshold=0.0)

    def configure_optimizers(self):
        optimizer = torch.optim.AdamW(self.parameters(),
                                      lr=self.train_config["learning_rate"])
        scheduler = transformers.get_cosine_with_hard_restarts_schedule_with_warmup(
            optimizer,
            num_warmup_steps=10,
            num_training_steps=5000,
            num_cycles=10)
        schedulers = [{
            'scheduler': scheduler,
            'interval': 'step',
            'frequency': 1
        }]
        return [optimizer], schedulers

    def train_dataloader(self):
        # self.dataset_train = PANDataset('./data_pickle_cutcombo/pan_all_cls/train_kucombo_only.pickle')
        # self.dataset_train = PANDataset('./data_pickle_cutcombo/pan_14e_cls/train_essays.pickle')
        self.dataset_train = PANDataset(
            './data_pickle_cutcombo/pan_14n_cls/train_novels_kucombo_only.pickle'
        )
        self.loader_train = DataLoader(
            self.dataset_train,
            batch_size=self.train_config["batch_size"],
            collate_fn=self.collator,
            num_workers=4,
            pin_memory=True,
            drop_last=False,
            shuffle=False)
        return self.loader_train

    def val_dataloader(self):
        # self.dataset_val = PANDataset('./data_pickle_cutcombo/pan_14e_cls/test02_essays_onecut.pickle')
        self.dataset_val = PANDataset(
            './data_pickle_cutcombo/pan_14n_cls/test02_novels_onecut.pickle')
        self.loader_val = DataLoader(
            self.dataset_val,
            batch_size=self.train_config["batch_size"],
            collate_fn=self.collator,
            num_workers=4,
            pin_memory=True,
            drop_last=False,
            shuffle=False)
        return self.loader_val

    def test_dataloader(self):
        # self.dataset_test = PANDataset('./data_pickle_cutcombo/pan_14e_cls/test02_essays_onecut.pickle')
        self.dataset_test = PANDataset(
            './data_pickle_cutcombo/pan_14n_cls/test02_novels_onecut.pickle')
        self.loader_test = DataLoader(
            self.dataset_test,
            batch_size=self.train_config["batch_size"],
            collate_fn=self.collator,
            num_workers=4,
            pin_memory=True,
            drop_last=False,
            shuffle=False)
        return self.loader_test

    @autocast()
    def forward(self, inputs, onedoc_enc=False):
        def one_doc_embed(input_ids, input_mask, mask_n=1):
            uniq_mask = []
            uniq_input, inverse_indices = torch.unique(input_ids,
                                                       return_inverse=True,
                                                       dim=0)
            invi = inverse_indices.detach().cpu().numpy()
            for i in range(uniq_input.shape[0]):
                first_index = np.where(invi == i)[0][0]
                uniq_mask.append(input_mask[first_index, :])

            input_ids = uniq_input
            input_mask = torch.stack(uniq_mask, dim=0)

            embed = self.enc_model(input_ids)

            result_embed = []
            result_pred = []
            # skip start and end symbol
            masked_ids = input_ids.clone()
            for i in range(1, input_ids.shape[1] - mask_n):
                masked_ids[:, i:(i + mask_n)] = self.tkz.mask_token_id

                output = self.pred_model(input_ids=masked_ids,
                                         attention_mask=input_mask,
                                         return_dict=False)[0]
                result_embed.append(embed[:, i:(i + mask_n), :])
                result_pred.append(output[:, i:(i + mask_n), :])

                masked_ids[:, i:(i + mask_n)] = input_ids[:, i:(i + mask_n)]

            # stack along doc_len
            result_embed = torch.cat(result_embed, dim=1)
            result_pred = torch.cat(result_pred, dim=1)

            rec_embed = []
            rec_pred = []
            for i in invi:
                rec_embed.append(result_embed[i, :, :])
                rec_pred.append(result_pred[i, :, :])

            rec_embed = torch.stack(rec_embed, dim=0)
            rec_pred = torch.stack(rec_pred, dim=0)
            return rec_embed, rec_pred

        if onedoc_enc:
            doc_ids, doc_mask = inputs
            doc_embed, doc_pred = one_doc_embed(input_ids=doc_ids,
                                                input_mask=doc_mask)
            doc_dv = doc_pred - doc_embed
            return doc_pred, doc_embed, doc_dv
        else:
            labels, kno_ids, kno_mask, unk_ids, unk_mask = inputs

            kno_embed, kno_pred = one_doc_embed(input_ids=kno_ids,
                                                input_mask=kno_mask)
            unk_embed, unk_pred = one_doc_embed(input_ids=unk_ids,
                                                input_mask=unk_mask)

            kno_dv = kno_pred - kno_embed
            unk_dv = unk_pred - unk_embed

            # logits = self.proj_head(kno_dv, kno_mask[:,1:-1], unk_dv, unk_mask[:,1:-1])
            logits = self.proj_head(kno_embed, kno_dv, kno_mask[:, 1:-1],
                                    unk_embed, unk_dv, unk_mask[:, 1:-1])

            logits = torch.squeeze(logits)
            labels = labels.float()
            loss = self.lossfunc(logits, labels)

            return (loss, logits, (kno_embed, kno_pred, unk_embed, unk_pred))

    def training_step(self, batch, batch_idx):
        labels, kno_ids, kno_mask, unk_ids, unk_mask = batch

        loss, logits, outputs = self(
            (labels, kno_ids, kno_mask, unk_ids, unk_mask))

        self.log("train_loss", loss)
        self.log("logits mean", logits.mean())
        self.log("LR", self.trainer.optimizers[0].param_groups[0]['lr'])

        return loss

    def validation_step(self, batch, batch_idx):
        labels, kno_ids, kno_mask, unk_ids, unk_mask = batch

        loss, logits, outputs = self(
            (labels, kno_ids, kno_mask, unk_ids, unk_mask))

        self.acc(logits, labels.float())
        self.f1(logits, labels.float())

        return {"val_loss": loss}

    def validation_epoch_end(self, validation_step_outputs):
        avg_loss = torch.stack(
            [x['val_loss'] for x in validation_step_outputs]).mean()
        self.log("val_loss", avg_loss)
        self.log('eval accuracy', self.acc.compute())
        self.log('eval F1', self.f1.compute())
示例#27
0
                                  str(commit)[2:-3],
                                  shell=True)
    return tag


if __name__ == '__main__':

    with open("params.yaml", 'r') as fd:
        params = yaml.safe_load(fd)

    MODEL_PATH = params['test']['model_path']

    module = TrainingModule.load_from_checkpoint(MODEL_PATH).to('cuda')
    module.eval()

    acc = Accuracy()
    f1 = F1()
    precision = Precision()
    recall = Recall()

    mlflow.set_tracking_uri('file-plugin:/content/NLP_Emotions/mlruns')
    if get_closest_gittag() == 'v2.0':
        mlflow.set_experiment('SGD')
        mlflow.set_tag('Version', 'SGD')
        mlflow.set_tag('Stage', 'test')
        mlflow.set_tag('Commit', get_commit())
        mlflow.set_tag('Time', get_commit_time())
        mlflow.set_tag('Model', module.model_name)
        mlflow.log_params({
            'batch_size': module.hparams.batch_size,
            'epochs': module.hparams.epochs,
示例#28
0
 def __init__(self, *args, **kwargs):
     super(LanguageModel, self).__init__(*args, **kwargs)
     self.lossf = nn.CrossEntropyLoss()
     self.metric = Accuracy(self.outclasses)
示例#29
0
 def get_acc(self, batch, infer):
     pred = self.get_pred(infer)
     targ = infer[1]
     flat_pred = pred.reshape(-1)
     flat_targ = targ.reshape(-1)
     return Accuracy()(flat_pred, flat_targ)
if __name__ == "__main__":

    # 1. Download the data
    download_data("https://pl-flash-data.s3.amazonaws.com/titanic.zip", 'data/')

    # 2. Load the data
    datamodule = TabularData.from_csv(
        "./data/titanic/titanic.csv",
        test_csv="./data/titanic/test.csv",
        categorical_input=["Sex", "Age", "SibSp", "Parch", "Ticket", "Cabin", "Embarked"],
        numerical_input=["Fare"],
        target="Survived",
        val_size=0.25,
    )

    # 3. Build the model
    model = TabularClassifier.from_data(datamodule, metrics=[Accuracy(), Precision(), Recall()])

    # 4. Create the trainer. Run 10 times on data
    trainer = flash.Trainer(max_epochs=10)

    # 5. Train the model
    trainer.fit(model, datamodule=datamodule)

    # 6. Test model
    trainer.test()

    # 7. Save it!
    trainer.save_checkpoint("tabular_classification_model.pt")