def fit(self, steps_list, epoch=3000): """ :param int epoch: :param typing.List[typing.Dict[q=dict, steps=typing.List[StepInOut]]] steps_list: :return: """ def filter_question(condition_func): sub_steps_list = [] for steps_dict in steps_list: question = steps_dict['q'] if condition_func(question['in1'], question['in2']): sub_steps_list.append(steps_dict) return sub_steps_list # self.print_weights() if not self.weight_loaded: self.train_f_enc(filter_question(lambda a, b: 10 <= a < 100 and 10 <= b < 100), epoch=100) self.f_enc.trainable = False q_type = "training questions of a+b < 10" print(q_type) pr = 0.8 all_ok = self.fit_to_subset(filter_question(lambda a, b: a+b < 10), epoch=epoch, pass_rate=pr) print("%s is pass_rate >= %s: %s" % (q_type, pr, all_ok)) q_type = "training questions of a<10 and b< 10 and 10 <= a+b" print(q_type) pr = 0.8 all_ok = self.fit_to_subset(filter_question(lambda a, b: a<10 and b<10 and a + b >= 10), epoch=epoch, pass_rate=pr) print("%s is pass_rate >= %s: %s" % (q_type, pr, all_ok)) q_type = "training questions of a<10 and b<10" print(q_type) pr = 0.8 all_ok = self.fit_to_subset(filter_question(lambda a, b: a < 10 and b < 10), epoch=epoch, pass_rate=pr) print("%s is pass_rate >= %s: %s" % (q_type, pr, all_ok)) q_type = "training questions of a<100 and b<100" print(q_type) pr = 0.8 all_ok = self.fit_to_subset(filter_question(lambda a, b: a < 100 and b < 100), epoch=epoch, pass_rate=pr) print("%s is pass_rate >= %s: %s" % (q_type, pr, all_ok)) while True: print("test all type of questions") cc, wc = self.test_to_subset(create_questions(1000)) print("Accuracy %s(OK=%d, NG=%d)" % (cc/(cc+wc), cc, wc)) if wc == 0: break q_type = "training questions of ALL" print(q_type) pr = 1.0 self.fit_to_subset(filter_question(lambda a, b: True), epoch=epoch, pass_rate=pr) all_ok = self.fit_to_subset(filter_question(lambda a, b: True), epoch=epoch, pass_rate=pr, skip_correct=True) print("%s is pass_rate >= %s: %s" % (q_type, pr, all_ok))
def main(stdscr, filename: str, num: int, result_logger: ResultLogger): terminal = Terminal(stdscr, create_char_map()) terminal.init_window(FIELD_WIDTH, FIELD_ROW) program_set = AdditionProgramSet() addition_env = AdditionEnv(FIELD_ROW, FIELD_WIDTH, FIELD_DEPTH) questions = create_questions(num) teacher = AdditionTeacher(program_set) npi_runner = TerminalNPIRunner(terminal, teacher) npi_runner.verbose = DEBUG_MODE steps_list = [] for data in questions: addition_env.reset() q = copy(data) run_npi(addition_env, npi_runner, program_set.ADD, data) steps_list.append({"q": q, "steps": npi_runner.step_list}) result_logger.write(data) terminal.add_log(data) if filename: with open(filename, 'wb') as f: pickle.dump(steps_list, f, protocol=pickle.HIGHEST_PROTOCOL)
def main(stdscr, model_path: str, num: int, result_logger: ResultLogger): terminal = Terminal(stdscr, create_char_map()) terminal.init_window(FIELD_WIDTH, FIELD_ROW) program_set = AdditionProgramSet() addition_env = AdditionEnv(FIELD_ROW, FIELD_WIDTH, FIELD_DEPTH) questions = create_questions(num) if DEBUG_MODE: questions = questions[-num:] system = RuntimeSystem(terminal=terminal) npi_model = AdditionNPIModel(system, model_path, program_set) npi_runner = TerminalNPIRunner(terminal, npi_model, recording=False) npi_runner.verbose = DEBUG_MODE correct_count = wrong_count = 0 for data in questions: addition_env.reset() run_npi(addition_env, npi_runner, program_set.ADD, data) result_logger.write(data) terminal.add_log(data) if data["correct"]: correct_count += 1 else: wrong_count += 1 return correct_count, wrong_count
def main(stdscr, model_path: str, num: int, result_logger: ResultLogger): terminal = Terminal(stdscr, create_char_map()) terminal.init_window(FIELD_WIDTH, FIELD_ROW) program_set = AdditionProgramSet() addition_env = AdditionEnv(FIELD_ROW, FIELD_WIDTH, FIELD_DEPTH) questions = create_questions(num) if DEBUG_MODE: questions = questions[-num:] system = RuntimeSystem(terminal=terminal) npi_model = AdditionNPIModel(system, model_path, program_set) npi_runner = TerminalNPIRunner(terminal, npi_model, recording=False) npi_runner.verbose = DEBUG_MODE correct_count = wrong_count = 0 for data in questions: addition_env.reset() run_npi(addition_env, npi_runner, program_set.ADD, data) result_logger.write(data) terminal.add_log(data) if data['correct']: correct_count += 1 else: wrong_count += 1 return correct_count, wrong_count