Пример #1
0
    def test_loss_is_equal_when_no_jumps(self):
        connections = ((-1, 2), (-2, 2), (2, 0), (2, 1))
        genome = generate_genome_given_graph(graph=connections,
                                             connection_weights=(1.0, 2.0, 3.0, 0.5))
        dataset = get_dataset(dataset=self.config.dataset, train_percentage=0.1, testing=False, noise=0.0,
                              random_state=self.config.dataset_random_state)
        n_samples = 100
        stg_trainer = StandardTrainer(dataset=dataset, n_samples=self.config.n_samples,
                                      n_output=genome.n_output,
                                      problem_type=self.config.problem_type,
                                      beta=self.config.beta,
                                      n_epochs=100, is_cuda=False)
        stg_trainer.train(genome)
        best_network = stg_trainer.get_best_network()
        new_genome = convert_stochastic_network_to_genome(network=best_network,
                                                          original_genome=genome,
                                                          fitness=-stg_trainer.best_loss_val,
                                                          fix_std=genome.genome_config.fix_std)

        # evaluate genome
        loss = get_loss(problem_type=self.config.problem_type)

        loss_value = evaluate_genome(genome=new_genome,
                                     dataset=dataset,
                                     loss=loss,
                                     problem_type=self.config.problem_type,
                                     beta_type=self.config.beta_type,
                                     batch_size=self.config.batch_size,
                                     n_samples=n_samples,
                                     is_gpu=False,
                                     is_testing=False,
                                     return_all=False,
                                     is_pass=True)
        self.assertAlmostEqual(loss_value, -new_genome.fitness, places=0)
Пример #2
0
 def mutate(self, genome: Genome):
     network, final_loss = self._mutate(genome)
     return convert_stochastic_network_to_genome(
         network=network,
         original_genome=genome,
         fitness=-final_loss,
         fix_std=genome.genome_config.fix_std)
Пример #3
0
    def test_genome_conversion_without_jumps(self):
        original_genome = generate_genome_given_graph(graph=((-1, 2), (-2, 2), (2, 0), (2, 1)),
                                                      connection_weights=(1.0, 2.0, 3.0, 0.5))

        network = ComplexStochasticNetwork(genome=original_genome)
        new_genome = convert_stochastic_network_to_genome(network=network, original_genome=original_genome)

        self.assertEqual(original_genome, new_genome)
Пример #4
0
    def test_genome_conversion_with_jumps_2(self):
        original_genome = generate_genome_given_graph(graph=((-1, 3), (-2, 3), (3, 2), (-1, 2), (2, 0),
                                                             (2, 1), (-1, 1), (-2, 3)),
                                                      connection_weights=(1.0, 2.0, 3.0, 0.5, 0.75,
                                                                          0.8, 0.6, 0.9))

        network = ComplexStochasticNetwork(genome=original_genome)
        new_genome = convert_stochastic_network_to_genome(network=network, original_genome=original_genome)

        new_network = ComplexStochasticNetwork(genome=new_genome)
        self.assertEqual(original_genome, new_genome)
        compare_networks(network, new_network)
        self.assertTrue(equal(network, new_network))
Пример #5
0
    def _finetune_genome(self, genome: Genome):

        stg_trainer = StandardTrainer(dataset=self._get_dataset(),
                                      n_samples=self.config.n_samples,
                                      n_output=self.config.n_output,
                                      problem_type=self.config.problem_type,
                                      beta=self.config.beta,
                                      n_epochs=self.n_epochs,
                                      is_cuda=self.is_cuda,
                                      weight_decay=self.weight_decay,
                                      lr=self.lr)
        stg_trainer.train(genome)
        network = stg_trainer.get_best_network()

        return convert_stochastic_network_to_genome(
            network=network,
            original_genome=genome,
            fitness=-stg_trainer.best_loss_val,
            fix_std=genome.genome_config.fix_std)
Пример #6
0
    def test_non_existing_connections_are_updated_2(self):
        connections = ((-1, 1), (-2, 1))
        genome = generate_genome_given_graph(graph=connections,
                                             connection_weights=(1.0, 2.0))
        dataset = get_dataset(dataset=self.config.dataset, train_percentage=0.1, testing=False, noise=0.0)
        stg_trainer = StandardTrainer(dataset=dataset, n_samples=self.config.n_samples,
                                      n_output=genome.n_output,
                                      problem_type=self.config.problem_type,
                                      beta=self.config.beta,
                                      n_epochs=self.n_epochs, is_cuda=False)
        stg_trainer.train(genome)
        best_network = stg_trainer.get_best_network()
        new_genome = convert_stochastic_network_to_genome(network=best_network,
                                                          original_genome=genome,
                                                          fitness=-stg_trainer.best_loss_val,
                                                          fix_std=genome.genome_config.fix_std)
        network_mutated = ComplexStochasticNetwork(genome=new_genome)

        self.assertEqual(type(new_genome), Genome)
        self.assertTrue(equal(best_network, network_mutated))