def main():
    opt = parse_args()
    if not os.path.exists(opt.dataset):
        os.mkdir(opt.dataset)

    local_path = '.'
    output_directory = os.path.join(opt.dataset, 'checkpoint/')
    filehandler = logging.FileHandler(os.path.join(opt.dataset, 'summary.log'))
    streamhandler = logging.StreamHandler()
    logger = logging.getLogger('')
    logger.setLevel(logging.INFO)
    logger.addHandler(filehandler)
    logger.addHandler(streamhandler)
    logging.info(opt)

    target_hyperparams = config_choice(opt.data_dir, opt.dataset)
    dataset_dir = target_hyperparams.pop('dataset')
    train_dataset, val_dataset, test_dataset = ImagePredictor.Dataset.from_folders(
        dataset_dir)
    if isinstance(val_dataset, pd.DataFrame) and len(val_dataset) < 1:
        val_dataset = None
    predictor = ImagePredictor(log_dir=output_directory)
    num_classes = target_hyperparams.pop('classes')
    assert num_classes == len(
        train_dataset.classes
    ), f'num_class mismatch, {num_classes} vs {len(train_dataset.classes)}'
    # overwriting default by command line:
    if opt.batch_size > 0:
        target_hyperparams['batch_size'] = opt.batch_size
    num_trials = target_hyperparams.pop('num_trials')
    ngpus_per_trial = target_hyperparams.pop('ngpus_per_trial')
    if opt.num_epochs > 0:
        target_hyperparams['epochs'] = opt.num_epochs
    num_trials = opt.num_trials if opt.num_trials > 0 else num_trials
    if opt.ngpus_per_trial >= 0:
        ngpus_per_trial = opt.ngpus_per_trial
    predictor.fit(train_data=train_dataset,
                  val_data=val_dataset,
                  hyperparameters=target_hyperparams,
                  ngpus_per_trial=ngpus_per_trial,
                  num_trials=num_trials,
                  verbosity=2)

    summary = predictor.fit_summary()
    logging.info('Top-1 val acc: %.3f' % summary['train_acc'])
    logger.info(summary)
Ejemplo n.º 2
0
def main():
    opt = parse_args()
    if not os.path.exists(opt.dataset):
        os.mkdir(opt.dataset)
    dataset_path = os.path.join(opt.data_dir, opt.dataset)

    local_path = os.path.dirname(__file__)
    output_directory = os.path.join(opt.dataset, 'checkpoint/')
    filehandler = logging.FileHandler(os.path.join(opt.dataset, 'summary.log'))
    streamhandler = logging.StreamHandler()
    logger = logging.getLogger('')
    logger.setLevel(logging.INFO)
    logger.addHandler(filehandler)
    logger.addHandler(streamhandler)
    logging.info(opt)

    target = config_choice(opt.data_dir, opt.dataset)
    load_dataset = task.Dataset(target['dataset'])
    classifier = task.fit(dataset=load_dataset,
                          output_directory=output_directory,
                          net=target['net'],
                          optimizer=target['optimizer'],
                          tricks=target['tricks'],
                          lr_config=target['lr_config'],
                          resume=opt.resume,
                          epochs=opt.num_epochs,
                          ngpus_per_trial=opt.ngpus_per_trial,
                          num_trials=opt.num_trials,
                          batch_size=opt.batch_size,
                          verbose=True,
                          plot_results=True)

    summary = classifier.fit_summary(output_directory=opt.dataset, verbosity=4)
    logging.info('Top-1 val acc: %.3f' % classifier.results['best_reward'])
    logger.info(summary)

    if opt.submission:
        test_dataset = task.Dataset(os.path.join(opt.data_dir, opt.dataset,
                                                 'test'),
                                    train=False)
        inds, probs, probs_all, value = predict_details(
            test_dataset, classifier, load_dataset)
        ag.utils.generate_csv_submission(dataset_path, opt.dataset, local_path,
                                         inds, probs_all, value, opt.custom)