Ejemplo n.º 1
0
    def test_get_ordered_experiments_by_metric(self):
        experiment_group = ExperimentGroupFactory()

        assert len(  # pylint:disable=len-as-condition
            experiment_group.get_ordered_experiments_by_metric(
                experiment_ids=[],
                metric='precision',
                optimization='maximize'
            )) == 0

        experiments = []
        experiment_ids = []
        for _ in range(5):
            experiment = ExperimentFactory(experiment_group=experiment_group)
            experiments.append(experiment)
            experiment_ids.append(experiment.id)
            ExperimentMetric.objects.create(experiment=experiment,
                                            values={'precision': random.random()})

        for experiment in experiments[:3]:
            ExperimentMetric.objects.create(experiment=experiment,
                                            values={'loss': random.random()})

        experiment_metrics = experiment_group.get_ordered_experiments_by_metric(
            experiment_ids=experiment_ids,
            metric='precision',
            optimization='maximize'
        )

        assert len(experiment_metrics) == 5
        metrics = [m.precision for m in experiment_metrics if m.precision is not None]
        assert len(metrics) == 2
        assert sorted(metrics, reverse=True) == metrics

        experiment_metrics = experiment_group.get_ordered_experiments_by_metric(
            experiment_ids=experiment_ids,
            metric='loss',
            optimization='minimize'
        )
        assert len(experiment_metrics) == 5
        metrics = [m.loss for m in experiment_metrics if m.loss is not None]
        assert len(metrics) == 3
        assert sorted(metrics) == metrics

        experiment_metrics = experiment_group.get_ordered_experiments_by_metric(
            experiment_ids=experiment_ids,
            metric='accuracy',
            optimization='maximize'
        )

        assert len(experiment_metrics) == 5  # pylint:disable=len-as-condition
        assert len(  # pylint:disable=len-as-condition
            [m for m in experiment_metrics if m.accuracy is not None]) == 0
Ejemplo n.º 2
0
    def test_get_ordered_experiments_by_metric(self, _):
        experiment_group = ExperimentGroupFactory()

        assert len(  # pylint:disable=len-as-condition
            experiment_group.get_ordered_experiments_by_metric(
                experiment_ids=[],
                metric='precision',
                optimization='maximize'
            )) == 0

        experiments = []
        experiment_ids = []
        for _ in range(5):
            experiment = ExperimentFactory(experiment_group=experiment_group)
            experiments.append(experiment)
            experiment_ids.append(experiment.id)
            ExperimentMetric.objects.create(experiment=experiment,
                                            values={'precision': random.random()})

        for experiment in experiments[:3]:
            ExperimentMetric.objects.create(experiment=experiment,
                                            values={'loss': random.random()})

        experiment_metrics = experiment_group.get_ordered_experiments_by_metric(
            experiment_ids=experiment_ids,
            metric='precision',
            optimization='maximize'
        )

        assert len(experiment_metrics) == 5
        metrics = [m.precision for m in experiment_metrics if m.precision is not None]
        assert len(metrics) == 2
        assert sorted(metrics, reverse=True) == metrics

        experiment_metrics = experiment_group.get_ordered_experiments_by_metric(
            experiment_ids=experiment_ids,
            metric='loss',
            optimization='minimize'
        )
        assert len(experiment_metrics) == 5
        metrics = [m.loss for m in experiment_metrics if m.loss is not None]
        assert len(metrics) == 3
        assert sorted(metrics) == metrics

        experiment_metrics = experiment_group.get_ordered_experiments_by_metric(
            experiment_ids=experiment_ids,
            metric='accuracy',
            optimization='maximize'
        )

        assert len(experiment_metrics) == 5  # pylint:disable=len-as-condition
        assert len(  # pylint:disable=len-as-condition
            [m for m in experiment_metrics if m.accuracy is not None]) == 0
Ejemplo n.º 3
0
    def test_get_ordered_experiments_by_metric(self, _):
        experiment_group = ExperimentGroupFactory()

        self.assertEqual(
            len(
                experiment_group.get_ordered_experiments_by_metric(
                    experiment_ids=[],
                    metric='precision',
                    optimization='maximize')), 0)

        experiments = []
        experiment_ids = []

        for _ in range(5):
            experiment = ExperimentFactory(experiment_group=experiment_group)
            experiments.append(experiment)
            experiment_ids.append(experiment.id)

        # Create metrics for 2 experiments
        for experiment in experiments[:2]:
            ExperimentMetric.objects.create(
                experiment=experiment, values={'accuracy': random.random()})

        # Test metric values for accuracy (2 values)
        experiment_metrics = experiment_group.get_ordered_experiments_by_metric(
            experiment_ids=experiment_ids,
            metric='accuracy',
            optimization='maximize')

        assert len(experiment_metrics) == 5
        metrics = [
            m.accuracy for m in experiment_metrics if m.accuracy is not None
        ]
        assert len(metrics) == 2
        assert sorted(metrics, reverse=True) == metrics

        # Add more metrics (precision for all, and loss for 3)
        for experiment in experiments:
            ExperimentMetric.objects.create(
                experiment=experiment, values={'precision': random.random()})

        for experiment in experiments[:3]:
            ExperimentMetric.objects.create(experiment=experiment,
                                            values={'loss': random.random()})

        # Testing again for accuracy should be propagated to all experiments but only 2 with values
        experiment_metrics = experiment_group.get_ordered_experiments_by_metric(
            experiment_ids=experiment_ids,
            metric='accuracy',
            optimization='maximize')
        assert len(experiment_metrics) == 5
        metrics = [
            m.accuracy for m in experiment_metrics if m.accuracy is not None
        ]
        assert len(metrics) == 2
        assert sorted(metrics, reverse=True) == metrics

        # Test for precisions, even after an updated metrics, the values were passed to last_metric
        experiment_metrics = experiment_group.get_ordered_experiments_by_metric(
            experiment_ids=experiment_ids,
            metric='precision',
            optimization='maximize')

        assert len(experiment_metrics) == 5
        metrics = [
            m.precision for m in experiment_metrics if m.precision is not None
        ]
        assert len(metrics) == 5
        assert sorted(metrics, reverse=True) == metrics

        # Loss is only visible on 3 experiments
        experiment_metrics = experiment_group.get_ordered_experiments_by_metric(
            experiment_ids=experiment_ids,
            metric='loss',
            optimization='minimize')
        assert len(experiment_metrics) == 5
        metrics = [m.loss for m in experiment_metrics if m.loss is not None]
        assert len(metrics) == 3
        assert sorted(metrics) == metrics

        # Check non existing metric
        experiment_metrics = experiment_group.get_ordered_experiments_by_metric(
            experiment_ids=experiment_ids,
            metric='metric_dummy',
            optimization='maximize')

        self.assertEqual(len(experiment_metrics), 5)
        self.assertEqual(
            len([m for m in experiment_metrics if m.metric_dummy is not None]),
            0)