예제 #1
0
    train_files = [str(x) for x in train_files]
    valid_files = [str(x) for x in valid_files]

    valid_data = Dataset(valid_files, args.node_weights)
    valid_data = torch.utils.data.DataLoader(valid_data,
                                             batch_size=valid_batch_size,
                                             shuffle=False,
                                             num_workers=num_workers,
                                             collate_fn=load_batch)

    ### MODEL LOADING ###
    sys.path.insert(0, os.path.abspath(f'models/mlp'))
    import model
    importlib.reload(model)
    model = model.Policy()
    del sys.path[0]
    model.to(device)

    ### TRAINING LOOP ###
    optimizer = torch.optim.Adam(model.parameters(), lr=lr)
    scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer,
                                                           mode='min',
                                                           factor=0.2,
                                                           patience=patience,
                                                           verbose=True)

    best_loss, best_acc = np.inf, -1
    for epoch in range(max_epochs + 1):
        log(f"EPOCH {epoch}...", logfile)
예제 #2
0
                                             num_workers=num_workers,
                                             collate_fn=load_batch)

    pretrain_files = [f for i, f in enumerate(train_files) if i % 10 == 0]
    pretrain_data = Dataset(pretrain_files, args.data_path)
    pretrain_data = torch.utils.data.DataLoader(pretrain_data,
                                                batch_size=pretrain_batch_size,
                                                shuffle=False,
                                                num_workers=num_workers,
                                                collate_fn=load_batch)

    ### MODEL LOADING ###
    sys.path.insert(0, os.path.abspath(f'models/{args.model}'))
    import model
    importlib.reload(model)
    distilled_model = model.Policy()
    del sys.path[0]
    distilled_model.to(device)

    ### TEACHER MODEL LOADING ###
    teacher = None
    if (args.distilled or args.no_e2e):
        sys.path.insert(0, os.path.abspath(f'models/{teacher_model}'))
        import model
        importlib.reload(model)
        teacher = model.GCNPolicy()
        del sys.path[0]
        teacher.restore_state(
            f"trained_models/{args.problem}/{teacher_model}/{args.seed}/best_params.pkl"
        )
        teacher.to(device)
예제 #3
0
        for model_type, model_path in evaluated_policies:
            print(f"{model_type}:{model_path.name}...")
            for seed in seeds:
                rng = np.random.RandomState(seed)

                policy = {}
                policy['name'] = model_path.name
                policy['type'] = model_type

                # load model
                best_params = str(model_path / f"{seed}/best_params.pkl")
                sys.path.insert(0, os.path.abspath(f"models/mlp"))
                import model
                importlib.reload(model)
                del sys.path[0]
                policy['model'] = model.Policy()
                policy['model'].restore_state(best_params)
                policy['model'].to(device)

                test_kacc = process(policy['model'], test_data, top_k)
                print(f"  {seed} " + " ".join([
                    f"acc@{k}: {100*acc:4.1f}"
                    for k, acc in zip(top_k, test_kacc)
                ]))

                writer.writerow({
                    **{
                        'problem': args.problem,
                        'policy': f"{policy['type']}:{policy['name']}",
                        'seed': seed,
                    },
예제 #4
0
# Load vocabulary
input_w2i = json.load(open('data/input_lang.word2index.json'))
output_w2i = json.load(open('data/output_lang.word2index.json'))
input_i2w = json.load(open('data/input_lang.index2word.json'))
output_i2w = json.load(open('data/output_lang.index2word.json'))


dial_act_dict, dial_acts_data = get_dial_acts('data/dialogue_act_feats.json')

# Create models
encoder = model.Encoder(vocab_size=len(input_w2i), 
                                    emb_size=args.emb_size, 
                                    hid_size=args.hid_size)

policy = model.Policy(hidden_size=args.hid_size,
                      db_size=args.db_size,
                      bs_size=args.bs_size,
                      da_size=args.da_size)

decoder = model.Decoder(emb_size=args.emb_size,
                        hid_size=args.hid_size,
                        vocab_size=len(output_w2i),
                        use_attn=args.use_attn)

if args.shallow_fusion or args.deep_fusion:
  s2s = model.Model(encoder=encoder,
                    policy=policy,
                    decoder=decoder,
                    input_w2i=input_w2i,
                    output_w2i=output_w2i,
                    args=args)
  lm_decoder = model.Decoder(emb_size=args.emb_size,
예제 #5
0
    ### NUMPY / TORCH SETUP ###
    if args.gpu == -1:
        os.environ['CUDA_VISIBLE_DEVICES'] = ''
        device = torch.device("cpu")
    else:
        os.environ['CUDA_VISIBLE_DEVICES'] = f'{args.gpu}'
        device = torch.device(f"cuda" if torch.cuda.is_available() else "cpu")

    # load and assign tensorflow models to policies (share models and update parameters)
    loaded_models = {}
    for policy in branching_policies:
        if policy['type'] not in loaded_models:
            sys.path.insert(0, os.path.abspath(f"models/{policy['type']}"))
            import model
            importlib.reload(model)
            loaded_models[policy['type']] = model.Policy()
            del sys.path[0]
            loaded_models[policy['type']].to(device)
            loaded_models[policy['type']].eval()
        policy['model'] = loaded_models[policy['type']]

    print("running SCIP...")

    fieldnames = [
        'problem',
        'device',
        'policy',
        'seed',
        'type',
        'instance',
        'nnodes',