Exemple #1
0
def exp_train():
    exp_name = 'EXP_NAME'
    out_base_dir = os.path.join(os.getcwd(), 'symlinks/exp/EXP_GROUP')
    exp_const = ExpConstants(exp_name, out_base_dir)
    exp_const.model_dir = os.path.join(exp_const.exp_dir, 'models')
    exp_const.log_dir = os.path.join(exp_const.exp_dir, 'log')
    exp_const.vis_dir = os.path.join(exp_const.exp_dir, 'vis')
    exp_const.log_step = 10
    exp_const.model_save_step = 1000
    exp_const.val_step = 1000
    exp_const.num_val_samples = 1000
    exp_const.batch_size = 32
    exp_const.num_epochs = 1000
    exp_const.lr = 0.01
    exp_const.momentum = 0.9
    exp_const.num_workers = 5
    exp_const.optimizer = 'SGD'
    exp_const.subset = {'training': 'train', 'validation': 'val'}

    data_const = DATASET_CONSTANTS()

    model_const = Constants()
    model_const.model_num = None
    model_const.net = NET_CONSTANTS()
    model_const.net_path = os.path.join(exp_const.model_dir,
                                        f'net_{model_const.model_num}')

    train.main(exp_const, data_const, model_const)
Exemple #2
0
def main(**kwargs):
    exp_base_dir = coco_paths['exp_dir']
    if kwargs['dataset'] == 'flickr':
        exp_base_dir = flickr_paths['exp_dir']
    exp_const = ExpConstants(kwargs['exp_name'], exp_base_dir)
    exp_const.log_dir = os.path.join(exp_const.exp_dir, 'logs')
    exp_const.model_dir = os.path.join(exp_const.exp_dir, 'models')
    exp_const.vis_dir = os.path.join(exp_const.exp_dir, 'vis')
    exp_const.dataset = kwargs['dataset']
    exp_const.optimizer = 'Adam'
    exp_const.lr = kwargs['lr']
    exp_const.momentum = None
    exp_const.num_epochs = 10
    exp_const.log_step = 20
    # Save models approx. twice every epoch
    exp_const.model_save_step = 400000 // (2 * kwargs['train_batch_size']
                                           )  # 4000=400000/(2*50)
    if exp_const.dataset == 'flickr':
        exp_const.model_save_step = 150000 // (2 * kwargs['train_batch_size'])
    val_freq_factor = 2
    if kwargs['val_frequently'] is True:
        val_freq_factor = 1
    exp_const.val_step = val_freq_factor * exp_const.model_save_step  # set to 1*model_save_step for plotting mi vs perf
    exp_const.num_val_samples = None
    exp_const.train_batch_size = kwargs['train_batch_size']
    exp_const.val_batch_size = 20
    exp_const.num_workers = 10
    exp_const.seed = 0
    exp_const.neg_noun_loss_wt = kwargs['neg_noun_loss_wt']
    exp_const.self_sup_loss_wt = kwargs['self_sup_loss_wt']
    exp_const.lang_sup_loss_wt = kwargs['lang_sup_loss_wt']
    exp_const.contextualize = not kwargs['no_context']
    exp_const.random_lang = kwargs['random_lang']

    DatasetConstants = CocoDatasetConstants
    if exp_const.dataset == 'flickr':
        DatasetConstants = FlickrDatasetConstants

    data_const = {
        'train': DatasetConstants('train'),
        'val': DatasetConstants('val'),
    }

    model_const = Constants()
    model_const.model_num = kwargs['model_num']
    model_const.object_encoder = ObjectEncoderConstants()
    model_const.object_encoder.context_layer.output_attentions = True
    model_const.object_encoder.object_feature_dim = 2048
    model_const.cap_encoder = CapEncoderConstants()
    model_const.cap_encoder.output_attentions = True
    model_const.cap_info_nce_layers = kwargs['cap_info_nce_layers']
    model_const.object_encoder_path = os.path.join(
        exp_const.model_dir, f'object_encoder_{model_const.model_num}')
    model_const.self_sup_criterion_path = os.path.join(
        exp_const.model_dir, f'self_sup_criterion_{model_const.model_num}')
    model_const.lang_sup_criterion_path = os.path.join(
        exp_const.model_dir, f'lang_sup_criterion_{model_const.model_num}')

    train(exp_const, data_const, model_const)
Exemple #3
0
def main(**kwargs):
    exp_const = ExpConstants(kwargs['exp_name'], kwargs['exp_base_dir'])
    exp_const.log_dir = os.path.join(exp_const.exp_dir, 'logs')
    exp_const.model_dir = os.path.join(exp_const.exp_dir, 'models')
    exp_const.vis_dir = os.path.join(exp_const.exp_dir, 'vis')
    exp_const.optimizer = 'Adam'
    exp_const.lr = 1e-3
    exp_const.momentum = None
    exp_const.num_epochs = 100
    exp_const.log_step = 100
    exp_const.model_save_step = 1000
    exp_const.val_step = 1000
    exp_const.num_val_samples = None

    data_const = {'train': Constants(), 'val': Constants()}

    model_const = Constants()
    model_const.model_num = kwargs['model_num']
    model_const.net = Constants()
    model_const.net_path = os.path.join(exp_const.model_dir,
                                        f'net_{model_const.model_num}')
Exemple #4
0
def exp_train():
    args = parser.parse_args()
    not_specified_args = manage_required_args(args,
                                              parser,
                                              required_args=[
                                                  'held_classes', 'embed_type',
                                                  'glove_dim', 'vico_dim',
                                                  'run'
                                              ],
                                              optional_args=[])
    exp_name = \
        args.embed_type + '_' + \
        str(args.glove_dim) + '_' + \
        str(args.vico_dim) + '_' + \
        'held_classes_' + str(args.held_classes)
    out_base_dir = os.path.join(os.getcwd(),
                                f'symlinks/exp/cifar100/zero_shot_{args.run}')
    exp_const = ExpConstants(exp_name, out_base_dir)
    exp_const.model_dir = os.path.join(exp_const.exp_dir, 'models')
    exp_const.log_dir = os.path.join(exp_const.exp_dir, 'log')
    exp_const.vis_dir = os.path.join(exp_const.exp_dir, 'vis')
    exp_const.log_step = 200
    exp_const.model_save_step = 1000
    exp_const.val_step = 1000
    exp_const.batch_size = 128
    exp_const.num_epochs = 50  #100
    exp_const.lr = 0.01
    exp_const.momentum = 0.9
    exp_const.num_workers = 5
    exp_const.optimizer = 'Adam'
    exp_const.feedforward = False
    exp_const.subset = {'training': 'train', 'test': 'test'}

    data_const = Cifar100DatasetConstants()
    data_const.num_held_out_classes = args.held_classes

    model_const = Constants()
    model_const.model_num = None
    model_const.net = ResnetConstants()
    model_const.net.num_layers = 32
    model_const.net.num_classes = 100
    model_const.net.pretrained = False
    model_const.net_path = os.path.join(exp_const.model_dir,
                                        f'net_{model_const.model_num}')
    model_const.embed2class = Embed2ClassConstants()
    model_const.embed2class.linear = True
    model_const.embed2class_path = os.path.join(
        exp_const.model_dir, f'embed2class_{model_const.model_num}')
    model_const.embed2class.glove_dim = args.glove_dim

    # Dimensions
    if args.embed_type == 'glove':
        model_const.embed2class.embed_dims = args.glove_dim
        model_const.embed2class.embed_h5py = os.path.join(
            os.getcwd(),
            f'symlinks/data/glove/proc/glove_6B_{args.glove_dim}d.h5py')
        model_const.embed2class.embed_word_to_idx_json = os.path.join(
            os.getcwd(),
            f'symlinks/data/glove/proc/glove_6B_{args.glove_dim}d_word_to_idx.json'
        )
    elif args.embed_type == 'glove_vico_linear':
        model_const.embed2class.embed_dims = args.glove_dim + args.vico_dim
        embed_dir = os.path.join(
            os.getcwd(),
            'symlinks/exp/multi_sense_cooccur/' + \
            f'linear_100/concat_with_glove_{args.glove_dim}')
        model_const.embed2class.embed_h5py = os.path.join(
            embed_dir, 'visual_word_vecs.h5py')
        model_const.embed2class.embed_word_to_idx_json = os.path.join(
            embed_dir, 'visual_word_vecs_idx.json')
    elif args.embed_type == 'vico_linear':
        model_const.embed2class.no_glove = True  # Zero out the glove component
        model_const.embed2class.embed_dims = args.glove_dim + args.vico_dim
        embed_dir = os.path.join(
            os.getcwd(),
            'symlinks/exp/multi_sense_cooccur/' + \
            f'linear_100/concat_with_glove_{args.glove_dim}')
        model_const.embed2class.embed_h5py = os.path.join(
            embed_dir, 'visual_word_vecs.h5py')
        model_const.embed2class.embed_word_to_idx_json = os.path.join(
            embed_dir, 'visual_word_vecs_idx.json')
    elif args.embed_type == 'glove_vico_select':
        model_const.embed2class.embed_dims = args.glove_dim + args.vico_dim
        embed_dir = os.path.join(
            os.getcwd(),
            'symlinks/exp/multi_sense_cooccur/' + \
            f'select_200/concat_with_glove_{args.glove_dim}')
        model_const.embed2class.embed_h5py = os.path.join(
            embed_dir, 'visual_word_vecs.h5py')
        model_const.embed2class.embed_word_to_idx_json = os.path.join(
            embed_dir, 'visual_word_vecs_idx.json')
    else:
        err_str = f'{args.embed_type} is currently not implemented in the runner'
        assert (False), err_str

    train.main(exp_const, data_const, model_const)