print("Test model", config.model) model = Transformer(p.vocab, model_file_path=config.save_path, is_eval=False) # get persona map filename = 'data/ConvAI2/test_persona_map' with open(filename, 'rb') as f: persona_map = pickle.load(f) #generate iterations = 11 weights_original = deepcopy(model.state_dict()) tasks = p.get_personas('test') for per in tqdm(tasks): num_of_dialog = p.get_num_of_dialog(persona=per, split='test') for val_dial_index in range(num_of_dialog): train_iter, val_iter = p.get_data_loader(persona=per, batch_size=config.batch_size, split='test', fold=val_dial_index) persona = [] for ppp in persona_map[per]: persona += ppp persona = list(set(persona)) do_learning(model, train_iter, val_iter, iterations=iterations, persona=persona) model.load_state_dict( {name: weights_original[name] for name in weights_original})
elif meta_iteration == 10: m = "select" else: m = "selective_training" print(m) shuffle(tasks) for k in range(steps): st = k * meta_batch_size ed = st + meta_batch_size if ed > len(tasks): ed = len(tasks) batch_loss = 0 weights_original = deepcopy(meta_net.state_dict()) for i in range(st, ed): per = tasks[i] train_iter, val_iter = p.get_data_loader( persona=per, batch_size=config.batch_size, split='train') v_loss, v_ppl = do_evaluation(meta_net, val_iter) train_loss_before.append(math.exp(v_loss)) # Update fast nets if m != "select": val_loss, v_ppl = do_learning_fix_step( meta_net, train_iter, val_iter, iterations=config.meta_iteration, mode=m, task=per) else: val_loss, v_ppl = do_learning_fix_step(meta_net, train_iter, val_iter,