def parse_option():
    parser = argparse.ArgumentParser('argument for training')
    # exp name
    parser.add_argument('--exp-name', type=str, default='exp',
                        help='experiment name, used to determine checkpoint/tensorboard dir')

    # optimization
    parser.add_argument('--learning-rate', '--lr', type=float, default=0.003, help='learning rate')
    parser.add_argument('--weight-decay', type=float, default=5e-4, help='weight decay')
    parser.add_argument('--momentum', type=float, default=0.9, help='momentum for SGD')

    # root folders
    parser.add_argument('--output-root', type=str, default='./output', help='root directory for output')

    # dataset
    parser.add_argument('--dataset', type=str, default='cifar10')

    # resume
    parser.add_argument('--resume', default='', type=str, metavar='PATH',
                        help='path to latest checkpoint (default: none)')

    # model definition
    parser.add_argument('--model-width', type=int, default=1, help='width of resnet, eg, 1, 2, 4')
    parser.add_argument('--alpha', type=float, default=0.999, help='exponential moving average weight')

    # loss function
    parser.add_argument('--nce-k', type=int, default=4096)
    parser.add_argument('--nce-t', type=float, default=0.3)

    # misc
    parser.add_argument('--print-freq', type=int, default=100, help='print frequency')
    parser.add_argument('--tb-freq', type=int, default=500, help='tb frequency')
    parser.add_argument('--save-freq', type=int, default=10, help='save frequency')
    parser.add_argument('--batch-size', type=int, default=32, help='batch_size')
    parser.add_argument('--num-workers', type=int, default=8, help='num of workers to use')
    parser.add_argument('--epochs', type=int, default=200, help='number of training epochs')
    parser.add_argument('--start-epoch', type=int, default=1, help='used for resume')
    parser.add_argument("--local_rank", type=int)

    args = parser.parse_args()

    # set the path according to the environment
    output_dir = check_dir(os.path.join(args.output_root, args.dataset, args.exp_name))
    args.model_folder = check_dir(os.path.join(output_dir, 'models'))
    args.tb_folder = check_dir(os.path.join(output_dir, 'tensorboard'))

    return args
def parse_option():
    parser = argparse.ArgumentParser('argument for training')

    parser.add_argument('--print-freq',
                        type=int,
                        default=10,
                        help='print frequency')
    parser.add_argument('--tb-freq',
                        type=int,
                        default=500,
                        help='tb frequency')
    parser.add_argument('--save-freq',
                        type=int,
                        default=5,
                        help='save frequency')
    parser.add_argument('--batch-size',
                        type=int,
                        default=256,
                        help='train batch size')
    parser.add_argument('--val-batch-size',
                        type=int,
                        default=256,
                        help='valiate batch size')
    parser.add_argument('--num-workers',
                        type=int,
                        default=8,
                        help='num of workers to use')
    parser.add_argument('--epochs',
                        type=int,
                        default=100,
                        help='number of training epochs')

    # optimization
    parser.add_argument('--learning-rate',
                        type=float,
                        default=3,
                        help='learning rate')
    parser.add_argument('--lr-decay-epochs',
                        type=int,
                        default=[30, 60, 90],
                        nargs='+',
                        help='where to decay lr, can be a list')
    parser.add_argument('--lr-decay-rate',
                        type=float,
                        default=0.1,
                        help='decay rate for learning rate')
    parser.add_argument('--momentum', type=float, default=0.9, help='momentum')
    parser.add_argument('--weight-decay',
                        type=float,
                        default=0,
                        help='weight decay')
    parser.add_argument('--adam',
                        action='store_true',
                        help='use adam optimizer')
    parser.add_argument('--beta1',
                        type=float,
                        default=0.5,
                        help='beta1 for Adam')
    parser.add_argument('--beta2',
                        type=float,
                        default=0.999,
                        help='beta2 for Adam')

    # model definition
    parser.add_argument('--model-width',
                        type=int,
                        default=1,
                        help='width of resnet, eg, 1, 2, 4')
    parser.add_argument('--layer',
                        type=int,
                        default=6,
                        help='which layer to evaluate')

    # crop
    parser.add_argument('--crop',
                        type=float,
                        default=0.08,
                        help='minimum crop')

    # dataset
    parser.add_argument('--dataset',
                        type=str,
                        default='cifar10',
                        choices=['imagenet100', 'imagenet', 'cifar10'])

    # specify folder
    parser.add_argument('--model-path', type=str, help="model path")
    parser.add_argument('--output-root',
                        type=str,
                        default='./output',
                        help='root directory for output')
    parser.add_argument('--data-root',
                        type=str,
                        default='./data',
                        help='root directory of dataset')

    # experiment name
    parser.add_argument('--exp-name',
                        type=str,
                        default='exp',
                        help='experiment name')

    # resume
    parser.add_argument('--resume',
                        default='',
                        type=str,
                        metavar='PATH',
                        help='path to latest checkpoint (default: none)')

    # others
    parser.add_argument('--aug',
                        type=str,
                        default='CJ',
                        choices=['NULL', 'CJ'])
    parser.add_argument('--bn',
                        action='store_true',
                        help='use parameter-free BN')
    parser.add_argument('--cosine',
                        action='store_true',
                        help='use cosine annealing')
    parser.add_argument('-e',
                        '--eval',
                        action='store_true',
                        help='only evaluate')

    # for DistributedDataParallel
    parser.add_argument("--local_rank", type=int)

    args = parser.parse_args()

    output_dir = check_dir(
        os.path.join(args.output_root, args.dataset, args.exp_name))
    args.model_folder = check_dir(os.path.join(output_dir, 'linear_models'))
    args.tb_folder = check_dir(os.path.join(output_dir, 'linear_tensorboard'))

    if args.dataset == 'imagenet100':
        args.n_label = 100
    if args.dataset == 'imagenet':
        args.n_label = 1000
    if args.dataset == 'cifar10':
        args.n_label = 10

    return args
def parse_option():
    parser = argparse.ArgumentParser('argument for training')
    # exp name
    parser.add_argument(
        '--exp-name',
        type=str,
        default='exp',
        help='experiment name, used to determine checkpoint/tensorboard dir')

    # optimization
    parser.add_argument('--learning-rate',
                        '--lr',
                        type=float,
                        default=0.03,
                        help='learning rate')
    parser.add_argument('--lr-decay-epochs',
                        type=int,
                        default=[120, 160, 200],
                        nargs='+',
                        help='where to decay lr, can be a list')
    parser.add_argument('--lr-decay-rate',
                        type=float,
                        default=0.1,
                        help='decay rate for learning rate')
    parser.add_argument('--weight-decay',
                        type=float,
                        default=1e-4,
                        help='weight decay')
    parser.add_argument('--momentum',
                        type=float,
                        default=0.9,
                        help='momentum for SGD')

    # root folders
    parser.add_argument(
        '--data-root',
        type=str,
        default='/misc/lmbssd/marrakch/ILSVRC2015/Data/CLS-LOC/',
        help='root directory of dataset')
    parser.add_argument('--output-root',
                        type=str,
                        default='./output',
                        help='root directory for output')

    # dataset
    parser.add_argument('--dataset',
                        type=str,
                        default='imagenet',
                        choices=['imagenet100', 'imagenet'])
    parser.add_argument('--crop', type=float, default=0.2, help='minimum crop')
    parser.add_argument('--aug',
                        type=str,
                        default='CJ',
                        choices=['NULL', 'CJ'])

    # resume
    parser.add_argument('--resume',
                        default='',
                        type=str,
                        metavar='PATH',
                        help='path to latest checkpoint (default: none)')

    # model definition
    parser.add_argument('--model',
                        type=str,
                        default='resnet50',
                        choices=['resnet50'])
    parser.add_argument('--model-width',
                        type=int,
                        default=1,
                        help='width of resnet, eg, 1, 2, 4')
    parser.add_argument('--alpha',
                        type=float,
                        default=0.999,
                        help='exponential moving average weight')

    # loss function
    parser.add_argument('--nce-k', type=int, default=16384)
    parser.add_argument('--nce-t', type=float, default=0.07)

    # misc
    parser.add_argument('--print-freq',
                        type=int,
                        default=10,
                        help='print frequency')
    parser.add_argument('--tb-freq',
                        type=int,
                        default=500,
                        help='tb frequency')
    parser.add_argument('--save-freq',
                        type=int,
                        default=10,
                        help='save frequency')
    parser.add_argument('--batch-size',
                        type=int,
                        default=32,
                        help='batch_size')
    parser.add_argument('--num-workers',
                        type=int,
                        default=4,
                        help='num of workers to use')
    parser.add_argument('--epochs',
                        type=int,
                        default=200,
                        help='number of training epochs')
    parser.add_argument('--start-epoch',
                        type=int,
                        default=1,
                        help='used for resume')
    parser.add_argument("--local_rank", type=int)

    args = parser.parse_args()

    # set the path according to the environment
    output_dir = check_dir(
        os.path.join(args.output_root, args.dataset, args.exp_name))
    args.model_folder = check_dir(os.path.join(output_dir, 'models'))
    args.tb_folder = check_dir(os.path.join(output_dir, 'tensorboard'))

    return args