Exemple #1
0
    def start_session(self):
        """ Launch the tensorflow session and start the GuessWhat loop """
        with tf.Session(config=self.tf_config) as sess:
            guesser_network = GuesserNetwork(self.guesser_config['model'],
                                             num_words=self.tokenizer.no_words)
            guesser_var = [
                v for v in tf.global_variables() if 'guesser' in v.name
            ]
            guesser_saver = tf.train.Saver(var_list=guesser_var)
            guesser_saver.restore(sess, GUESS_NTW_PATH)
            guesser_wrapper = GuesserROSWrapper(guesser_network)

            qgen_network = QGenNetworkLSTM(self.qgen_config['model'],
                                           num_words=self.tokenizer.no_words,
                                           policy_gradient=False)
            qgen_var = [v for v in tf.global_variables() if 'qgen' in v.name]
            qgen_saver = tf.train.Saver(var_list=qgen_var)
            qgen_saver.restore(sess, QGEN_NTW_PATH)
            qgen_network.build_sampling_graph(
                self.qgen_config['model'],
                tokenizer=self.tokenizer,
                max_length=self.eval_config['loop']['max_depth'])
            qgen_wrapper = QGenWrapper(
                qgen_network,
                self.tokenizer,
                max_length=self.eval_config['loop']['max_depth'],
                k_best=self.eval_config['loop']['beam_k_best'])

            oracle_wrapper = OracleROSWrapper(self.tokenizer)

            self.loop(sess, guesser_wrapper, qgen_wrapper, oracle_wrapper)
Exemple #2
0
    def __init__(self, config, oracle, qgen, guesser, tokenizer):
        self.storage = []

        self.tokenizer = tokenizer

        self.batch_size = config["optimizer"]["batch_size"]

        self.max_no_question = config['loop']['max_question']
        self.max_depth = config['loop']['max_depth']
        self.k_best = config['loop']['beam_k_best']

        self.oracle = OracleWrapper(oracle, tokenizer)
        self.guesser = GuesserWrapper(guesser)
        self.qgen = QGenWrapper(qgen, tokenizer, max_length=self.max_depth, k_best=self.k_best)
        oracle_saver.restore(sess, os.path.join(args.networks_dir, 'oracle', loop_config["oracle_identifier"], 'best', 'params.ckpt'))
        guesser_saver.restore(sess, os.path.join(args.networks_dir, 'guesser', loop_config["guesser_identifier"], 'best', 'params.ckpt'))

        # create training tools
        loop_sources = qgen_network.get_sources(sess)
        logger.info("Sources: " + ', '.join(loop_sources))

        train_batchifier = LooperBatchifier(tokenizer, generate_new_games=True)
        eval_batchifier = LooperBatchifier(tokenizer, generate_new_games=False)

        # Initialize the looper to eval/train the game-simulation

        qgen_batchifier = qgen_batchifier_cstor(tokenizer, sources=qgen_network.get_sources(sess), generate=True)
        qgen_wrapper = QGenWrapper(qgen_network, qgen_batchifier, tokenizer,
                                   max_length=loop_config['loop']['max_depth'],
                                   k_best=loop_config['loop']['beam_k_best'])

        oracle_split_mode = 1
        # oracle_split_mode = BatchifierSplitMode.from_string(oracle_config["model"]["question"]["input_type"])
        oracle_batchifier = oracle_batchifier_cstor(tokenizer, sources=oracle_network.get_sources(sess), split_mode=oracle_split_mode)
        oracle_wrapper = OracleWrapper(oracle_network, oracle_batchifier, tokenizer)

        guesser_batchifier = guesser_batchifier_cstor(tokenizer, sources=guesser_network.get_sources(sess))
        guesser_wrapper = GuesserWrapper(guesser_network, guesser_batchifier, tokenizer, guesser_listener)

        xp_manager.configure_score_tracking("valid_accuracy", max_is_best=True)
        game_engine = BasicLooper(loop_config,
                                  oracle_wrapper=oracle_wrapper,
                                  guesser_wrapper=guesser_wrapper,
                                  qgen_wrapper=qgen_wrapper,
Exemple #4
0
            split_mode=oracle_split_mode)
        oracle_wrapper = OracleWrapper(oracle_network, oracle_batchifier,
                                       tokenizer)

        guesser_batchifier = guesser_batchifier_cstor(
            tokenizer, sources=guesser_network.get_sources(sess_loop))
        guesser_wrapper = GuesserWrapper(guesser_network, guesser_batchifier,
                                         tokenizer, guesser_listener)

        qgen_batchifier = qgen_batchifier_cstor(
            tokenizer,
            sources=qgen_network.get_sources(sess_loop),
            generate=True)
        qgen_wrapper = QGenWrapper(qgen_network,
                                   qgen_batchifier,
                                   tokenizer,
                                   max_length=12,
                                   k_best=20)

        xp_manager.configure_score_tracking("valid_accuracy", max_is_best=True)

        loop_config = {}  # fake config
        loop_config['loop'] = {}
        loop_config['loop']['max_question'] = 5
        game_engine = BasicLooper(loop_config,
                                  oracle_wrapper=oracle_wrapper,
                                  guesser_wrapper=guesser_wrapper,
                                  qgen_wrapper=qgen_wrapper,
                                  tokenizer=tokenizer,
                                  batch_size=64)
Exemple #5
0
            qgen_var = [v for v in tf.global_variables()
                        if "qgen" in v.name]  # and 'rl_baseline' not in v.name
            qgen_saver = tf.train.Saver(var_list=qgen_var)

            qgen_saver.restore(
                sess,
                os.path.join(args.networks_dir, 'qgen', args.qgen_identifier,
                             'params.ckpt'))

            qgen_network.build_sampling_graph(
                qgen_config["model"],
                tokenizer=tokenizer,
                max_length=eval_config['loop']['max_depth'])
            qgen_wrapper = QGenWrapper(
                qgen_network,
                tokenizer,
                max_length=eval_config['loop']['max_depth'],
                k_best=eval_config['loop']['beam_k_best'])

        else:
            qgen_wrapper = QGenUserWrapper(tokenizer)
            logger.info("No QGen was registered >>> use user input")

        looper_evaluator = BasicLooper(eval_config,
                                       oracle_wrapper=oracle_wrapper,
                                       guesser_wrapper=guesser_wrapper,
                                       qgen_wrapper=qgen_wrapper,
                                       tokenizer=tokenizer,
                                       batch_size=1)

        logs = []