Ejemplo n.º 1
0
 def build_validation_data_loader(self) -> DataLoader:
     if self._should_evaluate_classifier():
         # The BYOL paper performs validation in two steps:
         # - A subset of the training data (CLS_VALIDATION) is used to select an optimal LR for the classifier.
         # - Final results are reported on the test / validation data (TEST).
         # We combine these two datasets, and then use a custom reducer to calculate the final result.
         cls_val_dataset = build_dataset(
             self.data_config,
             DatasetSplit.CLS_VALIDATION,
         )
         test_dataset = build_dataset(self.data_config, DatasetSplit.TEST)
         dataset: Dataset = JointDataset(
             [cls_val_dataset, test_dataset], ["lr_val", "test"]
         )
     else:
         # When only reporting self-supervised loss, we just use CLS_VALIDATION.
         dataset = build_dataset(
             self.data_config,
             DatasetSplit.CLS_VALIDATION,
         )
     return DataLoader(
         dataset,
         batch_size=self.context.get_per_slot_batch_size(),
         pin_memory=True,
         num_workers=self.data_config.num_workers,
     )
Ejemplo n.º 2
0
def train(model_name, model):
    logdir = "logs/" + model_name + "/" + datetime.now().strftime("%Y%m%d-%H%M%S")
    checkpoint_path = "model/" + model_name + "/checkpoint.ckpt"
    cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path, save_weights_only=True, verbose=1)
    tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=logdir)
    train_dataset = build_dataset(TRAIN_CSV_PATH).repeat().prefetch(256).shuffle(256).batch(32)
    valid_dataset = build_dataset(VALID_CSV_PATH).repeat().prefetch(100).shuffle(100).batch(16)
    model.fit(train_dataset, epochs=300, steps_per_epoch=10, validation_steps=3, validation_data=valid_dataset, callbacks= [tensorboard_callback, cp_callback])
Ejemplo n.º 3
0
def get_data(args):
    if args.setup == "ranker":
        train_it, dev_it = {}, {}
        for dataset in ["coco", "multi30k"]:
            train_it_, dev_it_ = build_dataset(args, dataset)
            train_it[dataset] = train_it_
            dev_it[dataset] = dev_it_
    else:
        train_it, dev_it = build_dataset(args, args.dataset)
    return train_it, dev_it
Ejemplo n.º 4
0
def random_search_param():
    estimator = RandomForestClassifier()

    dataset = build_dataset()

    n_estimators = [
        100
    ]  #Pas besoin de l'optimiser, un n_estimator élevé produire toujours de meilleurs résultats
    max_features = ["sqrt", "auto"]
    max_depth = [int(x) for x in np.linspace(start=10, stop=200, num=20)]
    max_depth.append(None)
    min_samples_split = [
        int(x) for x in np.linspace(start=2, stop=200, num=100)
    ]
    bootstrap = ["True", "False"]

    param_grid = {
        'n_estimators': n_estimators,
        'max_features': max_features,
        'max_depth': max_depth,
        'min_samples_split': min_samples_split,
        'bootstrap': bootstrap
    }

    search = cv.RandomizedSearchCV(estimator, param_grid, n_iter=50, cv=3)
    search.fit(dataset, "RandomForestRandomSearch.txt")
Ejemplo n.º 5
0
def main():
    """Build dataset according to args and train model"""
    args = prepare_arg_parser().parse_args()
    device = torch.device(args.device[0])
    restricted = args.restricted
    unsupervised = args.unsupervised
    model_path = args.model[0]
    output_path = args.output[0]

    start = time.time()
    print("Building dataset and adjectives")
    dataset = data.build_dataset(restricted=restricted,
                                 unsupervised=unsupervised)
    data_loader = DataLoader(dataset=dataset,
                             batch_size=BATCH_SIZE,
                             shuffle=True)
    print("Built dataset and adjectives in %ds" % (time.time() - start))
    model, optimizer = initialize_model(model_path, device)

    try:
        print("Training on", device.type.upper())
        training_loop(model, optimizer, data_loader)
    finally:
        # Always save model. This catches SIGINT kill signal.
        # If stopping a model running in the background use:
        # kill -s SIGINT <pid>
        print("Saving model to", model_path)
        torch.save(
            {
                "model_state_dict": model.state_dict(),
                "optimizer_state_dict": optimizer.state_dict(),
            },
            output_path,
        )
        torch.cuda.empty_cache()
Ejemplo n.º 6
0
def evaluate(override_cfg, model_dir, continuous=True):
  """Run training and evaluation."""
  tf.logging.info("model_dir = " + model_dir)
  try:
    cfg = _load_config(model_dir)
  except tf.errors.NotFoundError:
    tf.logging.info("Model directory does not exist yet. Creating new config.")
    cfg = model.build_config(model_dir=model_dir, data_path=FLAGS.data_path)
  tf.logging.info(cfg)
  tf.logging.info(override_cfg)
  cfg = utils.merge(cfg, override_cfg)

  cfg.tpu.enable = False
  cfg.dataset.max_length = None

  # Construct inputs and estimator
  _, eval_input = data.build_dataset(cfg.dataset, is_tpu=cfg.tpu.enable)
  estimator = model.get_estimator(**cfg)
  if continuous:
    checkpoints_iterator = tf.contrib.training.checkpoints_iterator(
        cfg.model_dir)
    eval_metrics = None
    for ckpt_path in checkpoints_iterator:
      eval_metrics = estimator.evaluate(
          input_fn=eval_input, checkpoint_path=ckpt_path)
      tf.logging.info(pprint.pformat(eval_metrics))
    return eval_metrics
  else:
    eval_metrics = estimator.evaluate(input_fn=eval_input)
    return eval_metrics
Ejemplo n.º 7
0
def train_language_model(n):
    """
        generating n-gram language models for n=2,3,4
    
        n: value of n for generating n-grams, values are 2,3,4 (int)
    """

    #Generating N-gram language model
    for i, l in enumerate(lang):

        path = os.path.join(train_path,
                            train_lang_path[i])  #path to train text
        _, word_list = build_dataset(
            path, l)  #generating word list individual language

        ngram = generating_ngrams(word_list, n)  #generating N-gram
        ngram.apply_freq_filter(
            5)  #filtering N-grams with frequency less that 5
        ngram_model = ngram.ngram_fd.items()
        ngram_model = sorted(ngram.ngram_fd.items(),
                             key=lambda item: item[1],
                             reverse=True)

        print("Length of", l, "model:", len(ngram_model))

        np.save(os.path.join(checkpoint_path, l + str(n) + "gram.npy"),
                ngram_model)
Ejemplo n.º 8
0
def feature_importance():
    estimator = RandomForestClassifier(max_depth=10,
                                       min_samples_split=170,
                                       bootstrap=True)

    dataset = build_dataset()

    testDate = date(2018, 1, 1)

    trainSet = dataset[dataset["date"] < testDate.toordinal()]
    testSet = dataset[dataset["date"] >= testDate.toordinal()]

    trainX = trainSet.drop("outcome", axis=1)
    trainY = trainSet["outcome"]

    testX = testSet.drop("outcome", axis=1)
    testY = testSet["outcome"]

    estimator.fit(trainX, trainY)

    scores = [x for x in estimator.feature_importances_]
    featuresNames = trainX.columns

    tmp = []
    for i in range(len(scores)):
        tmp.append((scores[i], featuresNames[i]))

    tmp = sorted(tmp)

    file = open("features_importance", "w")

    for i in range(len(scores)):
        file.write("{} = {}\n".format(tmp[i][1], tmp[i][0]))

    file.close()
Ejemplo n.º 9
0
def grid_search_param():

    estimator = RandomForestClassifier()

    dataset = build_dataset()

    # /!\ modifier en fonction de ce que retournera RandomSearch sinon la on est parti pour 3 ans
    n_estimators = [100]
    max_features = ["sqrt", "auto"]
    max_depth = [int(x) for x in np.linspace(start=10, stop=50, num=5)]
    min_samples_split = [
        int(x) for x in np.linspace(start=120, stop=170, num=6)
    ]
    bootstrap = ["True", "False"]

    param_grid = {
        'n_estimators': n_estimators,
        'max_features': max_features,
        'max_depth': max_depth,
        'min_samples_split': min_samples_split,
        'bootstrap': bootstrap
    }

    search = cv.GridSearchCV(estimator, param_grid, cv=5)
    search.fit(dataset, "RandomForestGridSearch.txt")
Ejemplo n.º 10
0
def compute_score():
    estimator = RandomForestClassifier(max_depth=10,
                                       min_samples_split=170,
                                       bootstrap=True)

    dataset = build_dataset()

    print(cv.cross_val_proba_score(dataset, estimator, 3))
Ejemplo n.º 11
0
 def build_training_data_loader(self) -> DataLoader:
     dataset_train = build_dataset(image_set="train", args=self.hparams)
     return DataLoader(
         dataset_train,
         batch_size=self.context.get_per_slot_batch_size(),
         collate_fn=unwrap_collate_fn,
         num_workers=self.hparams.num_workers,
         shuffle=True,
     )
Ejemplo n.º 12
0
def main(args):
    # Setup experiment
    if not torch.cuda.is_available():
        raise NotImplementedError("Training on CPU is not supported.")

    torch.backends.cudnn.deterministic = True
    torch.backends.cudnn.benchmark = False
    args.experiment = args.experiment or f"{args.model.replace('_', '-')}"
    args.experiment = "-".join([args.experiment])
    args.experiment_dir = os.path.join(
        args.output_dir, args.dataset,
        args.experiment + ("-cumulative" if args.all else ""))
    os.makedirs(args.experiment_dir, exist_ok=True)

    tb_writer = TensorBoardLogger(save_dir=args.experiment_dir)
    seed_everything(42, workers=True)

    train_loaders, valid_loaders = data.build_dataset(
        args.dataset,
        args.data_path,
        blurry=args.blurry,
        batch_size=args.batch_size)

    model = GCL(args, train_loaders)
    trainer = Trainer(gpus=-1,
                      distributed_backend='ddp',
                      max_epochs=len(valid_loaders),
                      reload_dataloaders_every_epoch=True,
                      plugins=DDPPlugin(find_unused_parameters=False),
                      logger=tb_writer)

    # for task_id in range(num_tasks):
    # print(f"task:    {task_id}")
    # train_loader = DataLoader(train_loaders[task_id], batch_size=10)

    metrics = MetricCollection(
        [Accuracy(), F1(args.num_classes, average='macro')])
    model.train_metrics = metrics.clone(prefix=f'train{model.curr_index}_')
    trainer.fit(model)
    trainer.train_loop.reset_train_val_dataloaders(model)
    if model.curr_index:
        temp = trainer.train_dataloader
        labels = []
        for batch in temp:
            labels.append(batch[1])
        print("Check if train loader if reloaded", labels)

    #! TEST
    test_loaders = [
        DataLoader(ds, batch_size=len(ds))
        for ds in valid_loaders[:model.curr_index + 1]
    ]
    model.test_metrics = nn.ModuleList(
        [metrics.clone(prefix=f'valid{i}_') for i in range(len(test_loaders))])

    trainer.test(model, test_dataloaders=test_loaders)
Ejemplo n.º 13
0
def main(args):
    np.random.seed(432)
    torch.random.manual_seed(432)
    try:
        os.makedirs(args.outpath)
    except OSError:
        pass
    experiment_path = utils.get_new_model_path(args.outpath)
    print(experiment_path)
    train_writer = SummaryWriter(os.path.join(experiment_path, 'train_logs'))
    val_writer = SummaryWriter(os.path.join(experiment_path, 'val_logs'))
    scheduler = cyclical_lr(5, 1e-5, 2e-3)
    trainer = train.Trainer(train_writer, val_writer, scheduler=scheduler)

    train_transform = data.build_preprocessing()
    eval_transform = data.build_preprocessing()

    trainds, evalds = data.build_dataset(args.datadir, None)
    trainds.transform = train_transform
    evalds.transform = eval_transform

    model = models.resnet34()
    base_opt = torch.optim.Adam(model.parameters())
    opt = SWA(base_opt, swa_start=30, swa_freq=10)

    trainloader = DataLoader(trainds,
                             batch_size=args.batch_size,
                             shuffle=True,
                             num_workers=8,
                             pin_memory=True)
    evalloader = DataLoader(evalds,
                            batch_size=args.batch_size,
                            shuffle=False,
                            num_workers=16,
                            pin_memory=True)

    export_path = os.path.join(experiment_path, 'last.pth')

    best_lwlrap = 0

    for epoch in range(args.epochs):
        print('Epoch {} - lr {:.6f}'.format(epoch, scheduler(epoch)))
        trainer.train_epoch(model, opt, trainloader, scheduler(epoch))
        metrics = trainer.eval_epoch(model, evalloader)

        print('Epoch: {} - lwlrap: {:.4f}'.format(epoch, metrics['lwlrap']))

        # save best model
        if metrics['lwlrap'] > best_lwlrap:
            best_lwlrap = metrics['lwlrap']
            torch.save(model.state_dict(), export_path)

    print('Best metrics {:.4f}'.format(best_lwlrap))
    opt.swap_swa_sgd()
Ejemplo n.º 14
0
 def build_validation_data_loader(self) -> DataLoader:
     dataset_val = build_dataset(image_set="val", args=self.hparams)
     # Set up evaluator
     self.base_ds = get_coco_api_from_dataset(dataset_val)
     return DataLoader(
         dataset_val,
         batch_size=self.context.get_per_slot_batch_size(),
         collate_fn=unwrap_collate_fn,
         num_workers=self.hparams.num_workers,
         shuffle=False,
     )
Ejemplo n.º 15
0
def main(args):
    np.random.seed(432)
    torch.random.manual_seed(432)
    try:
        os.makedirs(args.outpath)
    except OSError:
        pass
    experiment_path = utils.get_new_model_path(args.outpath)

    train_writer = SummaryWriter(os.path.join(experiment_path, 'train_logs'))
    val_writer = SummaryWriter(os.path.join(experiment_path, 'val_logs'))
    trainer = train.Trainer(train_writer, val_writer)

    # todo: add config
    train_transform = data.build_preprocessing()
    eval_transform = data.build_preprocessing()

    trainds, evalds = data.build_dataset(args.datadir, None)
    trainds.transform = train_transform
    evalds.transform = eval_transform

    model = models.resnet34()
    opt = torch.optim.Adam(model.parameters())

    trainloader = DataLoader(trainds,
                             batch_size=args.batch_size,
                             shuffle=True,
                             num_workers=8,
                             pin_memory=True)
    evalloader = DataLoader(evalds,
                            batch_size=args.batch_size,
                            shuffle=False,
                            num_workers=16,
                            pin_memory=True)

    for epoch in range(args.epochs):
        trainer.train_epoch(model, opt, trainloader, 3e-4)
        metrics = trainer.eval_epoch(model, evalloader)

        state = dict(
            epoch=epoch,
            model_state_dict=model.state_dict(),
            optimizer_state_dict=opt.state_dict(),
            loss=metrics['loss'],
            lwlrap=metrics['lwlrap'],
            global_step=trainer.global_step,
        )
        export_path = os.path.join(experiment_path, 'last.pth')
        torch.save(state, export_path)
Ejemplo n.º 16
0
def load_data(dataset,
              drop,
              emb_dim,
              batch_size,
              max_doc_len,
              max_sen_len,
              repeat,
              split_by_period,
              shuffle_train=True):
    # Load data
    print("Loading data...")
    datasets = [
        str(root / 'data' / dataset / s)
        for s in ['train.ss', 'dev.ss', 'test.ss']
    ]
    tfrecords = [
        str(root / 'data' / dataset / 'tfrecords' / s)
        for s in ['train.tfrecord', 'dev.tfrecord', 'test.tfrecord']
    ]
    stats_filename = str(root / 'data' / dataset / 'stats' /
                         ('stats.txt' + str(drop)))
    embedding_filename = 'data/embedding_imdb_yelp13_elc_cd_clt.txt'
    # if dataset in ['yelp13', 'imdb']:
    #     embedding_filename = 'data/embedding_imdb_yelp13.txt'
    # elif dataset in ['cd', 'elc']:
    #     embedding_filename = 'data/embedding_cd_elc.txt'
    print(embedding_filename)
    text_filename = str(root / 'data' / dataset / 'word2vec_train.ss')
    datasets, lengths, embedding, stats, wrd_dict = data.build_dataset(
        datasets, tfrecords, stats_filename, embedding_filename, max_doc_len,
        max_sen_len, split_by_period, emb_dim, text_filename, drop)
    trainset, devset, testset = datasets
    trainlen, devlen, testlen = lengths
    #  trainlen *=  1 - flags.drop
    if repeat:
        trainset = trainset.repeat()
        devset = devset.repeat()
        testset = testset.repeat()
    if shuffle_train:
        trainset = trainset.shuffle(30000)
    devset = devset
    testset = testset
    if batch_size != 1:
        trainset = trainset.batch(batch_size)
        devset = devset.batch(batch_size)
        testset = testset.batch(batch_size)
    print("Data loaded.")
    return embedding, trainset, devset, testset, trainlen, devlen, testlen, stats
Ejemplo n.º 17
0
 def _build_cls_training_data_loader(self) -> DataLoader:
     """
     Builds data loader for the on_validation_epoch_start classifier training when enabled.
     """
     cls_train_dataset = build_dataset(self.data_config, DatasetSplit.CLS_TRAIN)
     rounded_length = (
         len(cls_train_dataset) // self.context.get_global_batch_size()
     ) * self.context.get_global_batch_size()
     cls_train_dataset = torch.utils.data.Subset(
         cls_train_dataset, range(rounded_length)
     )
     return DataLoader(
         cls_train_dataset,
         batch_size=self.context.get_per_slot_batch_size(),
         pin_memory=True,
         num_workers=self.data_config.num_workers,
         shuffle=True,
         drop_last=True,
     )
Ejemplo n.º 18
0
    def build_validation_data_loader(self) -> DataLoader:
        dataset_val = build_dataset(image_set="val", args=self.hparams)
        if "cat_ids" in self.hparams:
            self.cat_ids = self.hparams.cat_ids
            self.catIdtoCls = dataset_val.catIdtoCls
        # Set up evaluator
        self.base_ds = get_coco_api_from_dataset(dataset_val)
        iou_types = tuple(k for k in ("segm", "bbox")
                          if k in self.postprocessors.keys())
        self.reducer = self.context.wrap_reducer(
            COCOReducer(self.base_ds, iou_types, self.cat_ids),
            for_training=False,
            for_validation=True,
        )

        return DataLoader(
            dataset_val,
            batch_size=self.context.get_per_slot_batch_size(),
            collate_fn=unwrap_collate_fn,
            num_workers=self.hparams.num_workers,
            shuffle=False,
        )
Ejemplo n.º 19
0
 def build_training_data_loader(self) -> DataLoader:
     if self.training_mode == TrainingMode.SELF_SUPERVISED:
         split = DatasetSplit.TRAIN
     elif self.training_mode == TrainingMode.CLASSIFIER_ONLY:
         split = DatasetSplit.CLS_TRAIN
     train_dataset = build_dataset(self.data_config, split=split)
     # In order to ensure distributed training shards correctly, we round the dataset size
     # down to be a multiple of the global batch size.
     # See comment here for more details:
     #   https://github.com/determined-ai/determined/blob/b3a34baa7dcca788a090120a17f9a4f8dc1a4184/harness/determined/pytorch/samplers.py#L77
     rounded_length = (
         len(train_dataset) // self.context.get_global_batch_size()
     ) * self.context.get_global_batch_size()
     train_dataset = torch.utils.data.Subset(train_dataset, range(rounded_length))
     return DataLoader(
         train_dataset,
         batch_size=self.context.get_per_slot_batch_size(),
         pin_memory=True,
         num_workers=self.data_config.num_workers,
         shuffle=True,
         drop_last=True,
     )
Ejemplo n.º 20
0
def train_and_eval(cfg, do_eval=True, report_fn=None):
  """Run training (and evaluation if on a GPU)."""
  tf.logging.info("cfg.model_dir = " + cfg.model_dir)
  # Save out config to model directory
  assert FLAGS.mode == "train"
  tf.gfile.MakeDirs(cfg.model_dir)
  with tf.gfile.GFile(os.path.join(cfg.model_dir, "config.json"), "w") as f:
    json.dump(cfg, f)

  if not cfg.dataset.num_repeats and not cfg.steps_per_epoch:
    raise ValueError("Must have a fixed num repeats or epoch step size.")

  # Construct inputs and estimator
  train_input, eval_input = data.build_dataset(
      cfg.dataset, is_tpu=cfg.tpu.enable)
  estimator = model.get_estimator(**cfg)

  if do_eval:
    eval_metrics = None
    for i in range(cfg.num_epochs):
      tf.logging.info("Starting epoch %s/%s" % (i + 1, cfg.num_epochs))
      train_metrics = estimator.train(
          input_fn=train_input, steps=cfg.steps_per_epoch or None)
      tf.logging.info(pprint.pformat(train_metrics))
      eval_metrics = estimator.evaluate(input_fn=eval_input)
      tf.logging.info(pprint.pformat(eval_metrics))
      if report_fn:
        report_fn(eval_metrics)
    return eval_metrics
  else:
    for i in range(cfg.num_epochs):
      tf.logging.info("Starting epoch %s/%s" % (i + 1, cfg.num_epochs))
      train_metrics = estimator.train(
          input_fn=train_input, steps=cfg.steps_per_epoch)
      tf.logging.info(pprint.pformat(train_metrics))
    return dict()
Ejemplo n.º 21
0
def main():
    parser = argparse.ArgumentParser(
        description="Deep Neural Networks for 3D Anaglyph Image Generation")
    parser.add_argument(
        "--config-file",
        default="",
        metavar="file",
        help="path to config file",
        type=str,
    )
    parser.add_argument(
        "--mode",
        default="test",
        metavar="mode",
        help="'train' or 'test'",
        type=str,
    )
    parser.add_argument(
        "opts",
        help="Modify config options using the command-line",
        default=None,
        nargs=argparse.REMAINDER,
    )

    args = parser.parse_args()

    # build the config
    cfg = get_cfg_defaults()
    cfg.merge_from_file(args.config_file)
    cfg.merge_from_list(args.opts)
    cfg.freeze()

    dataset = build_dataset(cfg)
    model, optimizer = build_model(cfg)

    train(cfg, optimizer, dataset)
Ejemplo n.º 22
0
# print params
print("\nParameters:")
for attr, value in sorted(flags.__flags.items()):
    print("{}={}".format(attr.upper(), value.value))
print("")


graph = tf.Graph()
with graph.as_default():
    # Load data
    print("Loading data...")
    datasets = ['data/' + flags.dataset + s for s in ['/train.ss', '/dev.ss', '/test.ss']]
    embeddingpath = 'data/' + flags.dataset + '/embedding.txt'
    hierarchy = flags.model in ['dnsc']
    datasets, lengths, embedding, usr_cnt, prd_cnt, wrd_dict = \
        data.build_dataset(datasets, embeddingpath, flags.max_doc_len,
                           flags.max_sen_len, hierarchy)
    trainset, devset, testset = datasets
    trainlen, devlen, testlen = lengths
    trainset = trainset.batch(flags.batch_size)
    devset = devset.batch(flags.batch_size)
    testset = testset.batch(flags.batch_size)
    print("Loading data finished...")

    # create the session
    session_config = tf.ConfigProto(
        allow_soft_placement=flags.allow_soft_placement,
        log_device_placement=flags.log_device_placement
    )
    session_config.gpu_options.allow_growth = True
    sess = tf.Session(config=session_config)
    if flags.tfdbg == 'cli':
Ejemplo n.º 23
0
def main(args):
    np.random.seed(432)
    torch.random.manual_seed(432)
    try:
        os.makedirs(args.outpath)
    except OSError:
        pass
    experiment_path = utils.get_new_model_path(args.outpath)
    print(experiment_path)

    train_writer = SummaryWriter(os.path.join(experiment_path, 'train_logs'))
    val_writer = SummaryWriter(os.path.join(experiment_path, 'val_logs'))
    trainer = train.Trainer(train_writer, val_writer)

    # todo: add config
    train_transform = data.build_preprocessing()
    eval_transform = data.build_preprocessing()

    trainds, evalds = data.build_dataset(args.datadir, None)
    trainds.transform = train_transform
    evalds.transform = eval_transform

    model = models.resnet34()
    opt = torch.optim.Adam(model.parameters(), lr=1e-8)

    trainloader = DataLoader(trainds,
                             batch_size=args.batch_size,
                             shuffle=True,
                             num_workers=8,
                             pin_memory=True)
    evalloader = DataLoader(evalds,
                            batch_size=args.batch_size,
                            shuffle=False,
                            num_workers=16,
                            pin_memory=True)

    #find lr fast ai
    criterion = torch.nn.BCEWithLogitsLoss()
    lr_finder = LRFinder(model, opt, criterion, device="cuda")
    #     lr_finder.range_test(trainloader, val_loader=evalloader, end_lr=1, num_iter=10, step_mode="exp")
    lr_finder.range_test(trainloader,
                         end_lr=100,
                         num_iter=100,
                         step_mode="exp")

    #plot graph fast ai
    skip_start = 6
    skip_end = 3
    lrs = lr_finder.history["lr"]
    losses = lr_finder.history["loss"]
    grad_norm = lr_finder.history["grad_norm"]

    #     ind = grad_norm.index(min(grad_norm))
    #     opt_lr = lrs[ind]
    #     print('LR with min grad_norm =', opt_lr)

    lrs = lrs[skip_start:-skip_end]
    losses = losses[skip_start:-skip_end]

    fig = plt.figure(figsize=(12, 9))
    plt.plot(lrs, losses)
    plt.xscale("log")
    plt.xlabel("Learning rate")
    plt.ylabel("Loss")
    train_writer.add_figure('loss_vs_lr', fig)

    lr_finder.reset()

    #     fixed_lr = 1e-3
    fixed_lr = 3e-4
    opt = torch.optim.Adam(model.parameters(), lr=fixed_lr)

    #     #new
    #     lr = 1e-3
    #     eta_min = 1e-5
    #     t_max = 10
    #     opt = torch.optim.Adam(model.parameters(), lr=lr)
    #     scheduler = CosineAnnealingLR(opt, T_max=t_max, eta_min=eta_min)
    #     #new

    #     one cycle for 5 ehoches
    #     scheduler = CosineAnnealingLR(opt, 519*4, eta_min=1e-4)
    scheduler = CosineAnnealingLR(opt, args.epochs)

    #     scheduler = CosineAnnealingLR(opt, 519, eta_min=1e-5)
    #     scheduler = StepLR(opt, step_size=3, gamma=0.1)

    state_list = []
    for epoch in range(args.epochs):
        #         t = epoch / args.epochs
        #         lr = np.exp((1 - t) * np.log(lr_begin) + t * np.log(lr_end))
        # выставляем lr для всех параметров
        trainer.train_epoch(model, opt, trainloader, fixed_lr, scheduler)
        #         trainer.train_epoch(model, opt, trainloader, 3e-4, scheduler)
        #         trainer.train_epoch(model, opt, trainloader, 9.0451e-4, scheduler)
        metrics = trainer.eval_epoch(model, evalloader)

        state = dict(
            epoch=epoch,
            model_state_dict=model.state_dict(),
            optimizer_state_dict=opt.state_dict(),
            loss=metrics['loss'],
            lwlrap=metrics['lwlrap'],
            global_step=trainer.global_step,
        )
        state_copy = copy.deepcopy(state)
        state_list.append(state_copy)
        export_path = os.path.join(experiment_path, 'last.pth')
        torch.save(state, export_path)

    # save the best path
    best_export_path = os.path.join(experiment_path, 'best.pth')

    max_lwlrap = 0
    max_lwlrap_ind = 0
    for i in range(args.epochs):
        if state_list[i]['lwlrap'] > max_lwlrap:
            max_lwlrap = state_list[i]['lwlrap']
            max_lwlrap_ind = i

    best_state = state_list[max_lwlrap_ind]
    torch.save(best_state, best_export_path)
Ejemplo n.º 24
0
    print("{}={}".format(attr.upper(), value.value), file=output_file)
print("")
output_file.close()


with tf.Graph().as_default():
    # Load data
    print("Loading data...")
    datasets = ['data/' + flags.dataset + s for s in ['/train.ss', '/dev.ss', '/test.ss']]
    tfrecords = ['data/' + flags.dataset + s for s in ['/train.tfrecord', '/dev.tfrecord', '/test.tfrecord']]
    stats_filename = 'data/' + flags.dataset + '/stats.txt'
    embeddingpath = 'data/' + flags.dataset + '/embedding' + str(flags.emb_dim) + '.txt'
    text_filename = 'data/' + flags.dataset + '/text'
    hierarchy = flags.split_by_sentence
    datasets, lengths, embedding, usr_cnt, prd_cnt, wrd_dict = \
        data.build_dataset(datasets, tfrecords, stats_filename, embeddingpath, flags.max_doc_len,
                           flags.max_sen_len, hierarchy, flags.emb_dim, text_filename)
    trainset, devset, testset = datasets
    trainlen, devlen, testlen = lengths
    trainset = trainset.shuffle(300000).batch(flags.batch_size)
    devset = devset.batch(flags.batch_size)
    testset = testset.batch(flags.batch_size)
    print("Loading data finished...")

    # create the session
    session_config = tf.ConfigProto(
        allow_soft_placement=flags.allow_soft_placement,
        log_device_placement=flags.log_device_placement
    )
    session_config.gpu_options.allow_growth = True
    sess = tf.Session(config=session_config)
Ejemplo n.º 25
0
Archivo: main.py Proyecto: cvvsu/RMEP
from model import build_model

if __name__ == '__main__':

    tic = time.time()
    opt, message = get_args()
    print(message)
    if not opt.isTest:
        #random.seed(opt.seed)
        #np.random.seed(opt.seed)
        #torch.manual_seed(opt.seed)
        #torch.cuda.manual_seed_all(opt.seed)
        #torch.backends.cudnn.benchmark = True

        # build the dataset according to the options
        tr_loader, val_loader = build_dataset(opt)
        model = build_model(opt)
        model.setup()

        metric = []
        best_val_loss = 1000.0
        for epoch in range(opt.start_epoch,
                           opt.epochs + opt.epochs_decay + opt.start_epoch):
            epoch_start_time = time.time()
            iter_data_time = time.time()

            old_lr, lr = model.update_learning_rate()

            tr_loss, tr_time, tr_data_time = model.train_one_epoch(tr_loader)
            val_loss, val_time, val_data_time = model.test_one_epoch(
                val_loader)
Ejemplo n.º 26
0
from model import build_model
from data import build_dataset
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"

# Parameters
version = 4
words = 10000
review_len = 128
vec_len = 300
patience = 5
batch_size = 15
epochs = 20

# Load data
X, y = build_dataset(review_len)

# Build model
model = build_model(words, vec_len, review_len)

# Early stopping
early_stopping_monitor = EarlyStopping(patience=patience,
                                       monitor="loss",
                                       mode="auto")

# Fit model
model.fit(X,
          y,
          epochs=epochs,
          callbacks=[early_stopping_monitor],
          batch_size=batch_size,
Ejemplo n.º 27
0
                  optimizer='adam',
                  metrics=['accuracy'])
    model.summary()

    return model


###
# Model estimation and evaluation
###

nb_values_total, nb_values_part = 4 * 60 * 90, 4 * 60 * 20
nb_samples = 10000

# Build dataset
dataset = build_dataset(nb_values_total, nb_values_part)
d_train_0, d_train_1, d_test_0, d_test_1 = sample(dataset, nb_samples,
                                                  nb_values_part)

X_train = np.concatenate((d_train_0[0], d_train_1[0]))
X_test = np.concatenate((d_test_0[0], d_test_1[0]))
Y_train = np.concatenate((d_train_0[1], d_train_1[1]))
Y_test = np.concatenate((d_test_0[1], d_test_1[1]))

# Model estimation
model = build_model_2(nb_values_part)
model.fit(X_train,
          Y_train,
          batch_size=16,
          epochs=50,
          validation_data=(X_test, Y_test),
Ejemplo n.º 28
0
import tensorflow as tf
from tensorflow.contrib import rnn
import numpy as np

import data

# Text file containing words for training
training_file = 'belling_the_cat.txt'

training_data = data.read_data(training_file)
dictionary, reverse_dictionary = data.build_dataset(training_data)
vocab_size = len(dictionary)

# Parameters
learning_rate = 0.001
training_iters = 50000
#training_iters = 5000
display_iters = 1000
n_input = 3

# number of units in RNN cell
n_hidden = 512

def model(x):

    # reshape to [1, n_input]
    #x = tf.reshape(x, [-1, n_input])

    # Generate a n_input-element sequence of inputs
    # (eg. [had] [a] [general] -> [20] [6] [33])
    x2 = tf.split(x,n_input,1)
Ejemplo n.º 29
0
import tensorflow as tf
import pickle
from main import Summodel
from data import build_dict, build_dataset, batch_iter

with open("args.pickle", "rb") as f:
    args = pickle.load(f)

print("Loading dictionary...")
word_dict, reversed_dict, article_max_len, summary_max_len = build_dict(
    "valid")
print("Loading validation dataset...")
valid_x, valid_y = build_dataset("valid", word_dict, article_max_len,
                                 summary_max_len)
valid_x_len = list(map(lambda x: len([y for y in x if y != 0]), valid_x))

with tf.Session() as sess:
    print("Loading saved model...")
    model = Summodel(reversed_dict,
                     article_max_len,
                     summary_max_len,
                     args,
                     Forward_only=True)
    saver = tf.train.Saver(tf.global_variables())
    ckpt = tf.train.get_checkpoint_state("./saved_model/")
    saver.restore(sess, ckpt.model_checkpoint_path)

    batches = batch_iter(valid_x, valid_y, args.batch_size, 1)

    print("Writing summaries to 'train/result.txt'...")
    for batch_x, batch_y in batches:
Ejemplo n.º 30
0
    def __init__(self, cfg):
        use_mixed_precision = cfg.dtype == "float16"
        if use_mixed_precision:
            policy = tf.keras.mixed_precision.experimental.Policy("mixed_float16")
            tf.keras.mixed_precision.experimental.set_policy(policy)

        self.train_dataset = build_dataset(**cfg.train.dataset.as_dict())
        self.val_dataset = build_dataset(**cfg.val.dataset.as_dict())

        self.model = build_model(**cfg.model.as_dict())

        optimizer = build_optimizer(**cfg.optimizer.as_dict())
    
        if cfg.lookahead:
            optimizer = LookaheadOptimizer(optimizer, cfg.lookahead.steps, cfg.lookahead.alpha) 

        if use_mixed_precision:
            optimizer = tf.keras.mixed_precision.experimental.LossScaleOptimizer(
                optimizer=optimizer, loss_scale= "dynamic") 
        
        self.loss_fn = build_loss(**cfg.loss.as_dict())

        self.optimizer = optimizer
        self.use_mixed_precision = use_mixed_precision
        self.cfg = cfg

        self.total_train_steps = cfg.learning_rate_scheduler.train_steps
        self.learning_rate_scheduler = build_learning_rate_scheduler(
            **cfg.learning_rate_scheduler.as_dict())

        self.global_step = tf.Variable(initial_value=0,
                                       trainable=False,
                                       name="global_step",
                                       dtype=tf.int64)

        self.learning_rate = tf.Variable(initial_value=0,
                                         trainable=False,
                                         name="learning_rate",
                                         dtype=tf.float32)
       
        self.checkpoint = tf.train.Checkpoint(optimizer=self.optimizer, model=self.model)
        self.manager = tf.train.CheckpointManager(checkpoint=self.checkpoint,
                                                  directory=cfg.checkpoint_dir,
                                                  max_to_keep=10)
        if os.path.exists(cfg.pretrained_weights_path):
            self.model.load_weights(cfg.pretrained_weights_path, by_name=True, skip_mismatch=True)

        latest_checkpoint = self.manager.latest_checkpoint
        if latest_checkpoint is not None:
            try:
                steps = int(latest_checkpoint.split("-")[-1])
                self.global_step.assign(steps)
            except:
                self.global_step.assign(0)
            self.checkpoint.restore(latest_checkpoint)
            tf.print(_time_to_string(), "Restored weights from %s." % latest_checkpoint)
        else:
            self.global_step.assign(0)

        self.summary_writer = tf.summary.create_file_writer(logdir=cfg.summary_dir)
        self.log_every_n_steps = cfg.log_every_n_steps
        self.save_ckpt_steps = cfg.save_ckpt_steps
        self.use_jit = tf.config.optimizer.get_jit() is not None

        self.training_loss_metrics = {}
        self.val_loss_metrics = {}

        self.train_acc_metric = tf.keras.metrics.Accuracy() 
        self.train_auc_metric = tf.keras.metrics.AUC()
        self.val_acc_metric = tf.keras.metrics.Accuracy() 
        self.val_auc_metric = tf.keras.metrics.AUC()
        self._add_graph = True