def test_entropy(distributions, reduction): np.random.seed(1337) entropy = Entropy(reduction=reduction) marg = entropy(distributions) assert np.all(marg == [1, 2, 0]), "Entropy is not right {}".format(marg) entropy = Entropy(0.9, reduction=reduction) marg = entropy(distributions) assert np.any(marg != [1, 2, 0])
def test_heuristics_reorder_list(): # we are just testing if given calculated uncertainty measures for chunks of data # the `reorder_indices` would make correct decision. Here index 0 has the # highest uncertainty chosen but both methods (uncertainties1 and uncertainties2) streaming_prediction = [np.array([0.98]), np.array([0.87, 0.68]), np.array([0.96, 0.54])] heuristic = BALD() ranks = heuristic.reorder_indices(streaming_prediction) assert np.all(ranks == [0, 3, 1, 2, 4]), "reorder list for BALD is not right {}".format(ranks) heuristic = Variance() ranks = heuristic.reorder_indices(streaming_prediction) assert np.all(ranks == [0, 3, 1, 2, 4]), "reorder list for Variance is not right {}".format( ranks) heuristic = Entropy() ranks = heuristic.reorder_indices(streaming_prediction) assert np.all(ranks == [0, 3, 1, 2, 4]), "reorder list for Entropy is not right {}".format( ranks) heuristic = Margin() ranks = heuristic.reorder_indices(streaming_prediction) assert np.all(ranks == [4, 2, 1, 3, 0]), "reorder list for Margin is not right {}".format(ranks) heuristic = Certainty() ranks = heuristic.reorder_indices(streaming_prediction) assert np.all(ranks == [4, 2, 1, 3, 0]), "reorder list for Certainty is not right {}".format( ranks) heuristic = Random() ranks = heuristic.reorder_indices(streaming_prediction) assert ranks.size == 5, "reorder list for Random is not right {}".format( ranks)
return logits probability_distribution = wrapped(None, logits) assert np.alltrue((probability_distribution >= 0) & (probability_distribution <= 1)).all() def test_that_precomputed_passes_back_predictions(): precomputed = Precomputed() ranks = np.arange(10) assert (precomputed(ranks) == ranks).all() @pytest.mark.parametrize('heuristic1, heuristic2, weights', [(BALD(), Variance(), [0.7, 0.3]), (BALD(), Entropy(reduction='mean'), [0.9, 0.8]), (Entropy(), Variance(), [4, 8]), (Certainty(), Variance(), [9, 2]), (Certainty(), Certainty(reduction='mean'), [1, 3])]) def test_combine_heuristics(heuristic1, heuristic2, weights): np.random.seed(1337) predictions = [distributions_3d, distributions_5d] if isinstance(heuristic1, Certainty) and not isinstance(heuristic2, Certainty): with pytest.raises(Exception) as e_info: heuristics = CombineHeuristics([heuristic1, heuristic2], weights=weights, reduction='mean') assert 'heuristics should have the same value for `revesed` parameter' in str( e_info.value)