def write_training_runs(args): filer = ExperimentFiler(args.experiment_dir) csv_file = filer.experiment_file("training_runs.csv") with open(csv_file, 'wb') as my_file: my_file.write('Generation, %s, Fitness\n' % resolve_alt_objective(args)) results_files = get_results_files(args) generation_filer = GenerationFiler(args.experiment_dir) for results_file in results_files: generation = generation_filer.get_generation_from_path(results_file) persistence = ResultsDictPersistence(args.experiment_dir, generation, logger=None) results_dict = persistence.restore() if len(results_dict) == 0: # File not found continue for key in results_dict.keys(): result = results_dict[key] try: # XXX Use FitnessObjectives prepared from config? alt_objective = result['metrics'][args.alt_objective] fitness = result['metrics']['fitness'] # XXX not kosher except Exception: try: alt_objective = result['metrics'][args.alt_objective] fitness = result['fitness'] # XXX not kosher except Exception as exception: if args.alt_objective == "num_params": fitness = result['fitness'] # XXX not kosher # XXX What generates this params file? cache_file = generation_filer.get_generation_file( "candidate_{0}.params".format(key)) if os.path.exists(cache_file): with open(cache_file, 'rb') as my_file: alt_objective = my_file.read() else: undefined = 0 k = undefined # XXX print("Extracting num params from network {}".format(k)) model = get_model(args.experiment_dir, key, generation) alt_objective = str(model.count_params()) with open(cache_file, 'wb') as my_file: my_file.write(alt_objective) else: raise exception if args.alt_objective == 'training_time': alt_objective = str(float(alt_objective) / 3600.0) with open(csv_file, 'ab') as my_file: line = '%s %s %s\n' % (generation, alt_objective, fitness) my_file.write(line) return csv_file
def draw_best_candidate_results(self, best_candidate, generation=None, suffix=''): """ :param best_candidate: A candidate object comprising the best of a generation. :param generation: Default value is None :param suffix: Default value is an empty string """ experiment_config = self.master_config.get('experiment_config') if not experiment_config.get('visualize'): return best_id = self.candidate_util.get_candidate_id(best_candidate) best_fitness = self.candidate_util.get_candidate_fitness( best_candidate) fitness = best_fitness if best_fitness is None else \ round(best_fitness, 4) # Determine the output file name basis # XXX Use fitness for now. # Later on can address multi-objective goals. metric_name = "fitness" if generation is not None: # Put the file in the gen_NN directory. # Call it best_candidate to match the best_candidate.json # that gets put there base_name = "best_{0}_candidate".format(metric_name) filer = GenerationFiler(self.experiment_dir, generation) base_path = filer.get_generation_file(base_name) else: # We do not have a generation that we know about so write out # the old-school file name. # XXX Not entirely sure when this path would be taken base_name = "F{0}_ID-{1}_{2}best_{3}".format( fitness, best_id, suffix, metric_name) filer = ExperimentFiler(self.experiment_dir) base_path = filer.experiment_file(base_name) # NetworkVisualizers use the build_training_model() which requires # a data_dict of file keys -> file paths to exist. Domains that # wish to visualize their networks that use the data_dict will # need to deal with a None value for data dict in the visualization # case. data_dict = None visualizer = NetworkMultiVisualizer(self.master_config, data_dict, base_path, logger=self.logger) visualizer.visualize(best_candidate)