Esempio n. 1
0
    def train_and_score(self, genome):
        """
        Train and score a single individual.
        Score (fitness) is equal to a model's accuracy on test data predictions.
        """
        trainer = Trainer(CNNModel.buildForEvolution(genome), self.config,
                          self.data)
        trainer.train()  # train individual using training data
        score = trainer.model.evaluate(
            self.data['testX'], self.data['testY'],
            verbose=0)  # score individual using test data
        logging.info("Score : " + str(score[1]))  # 1=accuracy, 0=loss.
        genome.fitness = score[1]  # set the individual's fitness variable

        return score
if config['evolvingMode']:
    resultsDir = ''
    if config['intelligentSurvival']:
        resultsDir = 'results/evolution-intelligent-survival/'
    else:
        resultsDir = 'results/evolution-plain/'

    evolution = Evolution(config, data)
    evolution.initialise_population()
    for gen in range(numGenerations):
        evolution.evolvePopulation(gen)

    best_evolved_genome = evolution.hall_of_fame.getSolution(0)

    trainer = Trainer(CNNModel.buildForEvolution(best_evolved_genome), config,
                      data)
    generate_model_summary(trainer.model)
    training_history = trainer.train()
    generate_classification_report(trainer.model, data)
    generate_training_stats_plot(config, training_history, resultsDir)
    save_model(trainer.model, resultsDir)
    score = trainer.model.evaluate(data['trainX'], data['trainY'], verbose=0)
    print("Score: " + str(score[1]))
else:
    resultsDir = 'results/no-evolution/'
    trainer = Trainer(
        CNNModel.buildNoEvolution(), config,
        data)  # initialise trainer with a newly initialised model
    generate_model_summary(trainer.model)  # summary of the model structure
    training_history = trainer.train(