dataeval 0.72.2__py3-none-any.whl → 0.73.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dataeval/__init__.py +3 -3
- dataeval/detectors/__init__.py +1 -1
- dataeval/detectors/drift/__init__.py +1 -1
- dataeval/detectors/drift/base.py +2 -2
- dataeval/detectors/linters/clusterer.py +1 -1
- dataeval/detectors/ood/__init__.py +1 -1
- dataeval/detectors/ood/ae.py +14 -6
- dataeval/detectors/ood/aegmm.py +14 -6
- dataeval/detectors/ood/base.py +9 -3
- dataeval/detectors/ood/llr.py +22 -16
- dataeval/detectors/ood/vae.py +14 -6
- dataeval/detectors/ood/vaegmm.py +14 -6
- dataeval/interop.py +9 -7
- dataeval/metrics/bias/balance.py +50 -44
- dataeval/metrics/bias/coverage.py +38 -6
- dataeval/metrics/bias/diversity.py +117 -65
- dataeval/metrics/bias/metadata.py +225 -60
- dataeval/metrics/bias/parity.py +68 -54
- dataeval/utils/__init__.py +4 -3
- dataeval/utils/lazy.py +26 -0
- dataeval/utils/metadata.py +258 -0
- dataeval/utils/shared.py +1 -1
- dataeval/utils/split_dataset.py +12 -6
- dataeval/utils/tensorflow/_internal/gmm.py +8 -2
- dataeval/utils/tensorflow/_internal/loss.py +20 -11
- dataeval/utils/tensorflow/_internal/{pixelcnn.py → models.py} +371 -77
- dataeval/utils/tensorflow/_internal/trainer.py +12 -5
- dataeval/utils/tensorflow/_internal/utils.py +70 -71
- dataeval/utils/torch/datasets.py +2 -2
- dataeval/workflows/__init__.py +1 -1
- {dataeval-0.72.2.dist-info → dataeval-0.73.1.dist-info}/METADATA +3 -3
- {dataeval-0.72.2.dist-info → dataeval-0.73.1.dist-info}/RECORD +34 -33
- dataeval/utils/tensorflow/_internal/autoencoder.py +0 -316
- {dataeval-0.72.2.dist-info → dataeval-0.73.1.dist-info}/LICENSE.txt +0 -0
- {dataeval-0.72.2.dist-info → dataeval-0.73.1.dist-info}/WHEEL +0 -0
@@ -8,18 +8,27 @@ Licensed under Apache Software License (Apache 2.0)
|
|
8
8
|
|
9
9
|
from __future__ import annotations
|
10
10
|
|
11
|
-
from typing import Literal, cast
|
11
|
+
from typing import TYPE_CHECKING, Literal, cast
|
12
12
|
|
13
13
|
import numpy as np
|
14
|
-
import tensorflow as tf
|
15
14
|
from numpy.typing import NDArray
|
16
|
-
from tensorflow_probability.python.distributions.mvn_diag import MultivariateNormalDiag
|
17
|
-
from tensorflow_probability.python.distributions.mvn_tril import MultivariateNormalTriL
|
18
|
-
from tensorflow_probability.python.stats import covariance
|
19
|
-
from tf_keras.layers import Flatten
|
20
15
|
|
16
|
+
from dataeval.utils.lazy import lazyload
|
21
17
|
from dataeval.utils.tensorflow._internal.gmm import gmm_energy, gmm_params
|
22
18
|
|
19
|
+
if TYPE_CHECKING:
|
20
|
+
import tensorflow as tf
|
21
|
+
import tensorflow_probability.python.distributions.mvn_diag as mvn_diag
|
22
|
+
import tensorflow_probability.python.distributions.mvn_tril as mvn_tril
|
23
|
+
import tensorflow_probability.python.stats as tfp_stats
|
24
|
+
import tf_keras as keras
|
25
|
+
else:
|
26
|
+
tf = lazyload("tensorflow")
|
27
|
+
keras = lazyload("tf_keras")
|
28
|
+
mvn_diag = lazyload("tensorflow_probability.python.distributions.mvn_diag")
|
29
|
+
mvn_tril = lazyload("tensorflow_probability.python.distributions.mvn_tril")
|
30
|
+
tfp_stats = lazyload("tensorflow_probability.python.stats")
|
31
|
+
|
23
32
|
|
24
33
|
class Elbo:
|
25
34
|
"""
|
@@ -46,7 +55,7 @@ class Elbo:
|
|
46
55
|
self._cov = ("sim", cov_type)
|
47
56
|
elif cov_type in ["cov_full", "cov_diag"]:
|
48
57
|
x_np: NDArray[np.float32] = x.numpy().astype(np.float32) if tf.is_tensor(x) else x # type: ignore
|
49
|
-
cov = covariance(x_np.reshape(x_np.shape[0], -1)) # type: ignore py38
|
58
|
+
cov = tfp_stats.covariance(x_np.reshape(x_np.shape[0], -1)) # type: ignore py38
|
50
59
|
if cov_type == "cov_diag": # infer standard deviation from covariance matrix
|
51
60
|
cov = tf.math.sqrt(tf.linalg.diag_part(cov))
|
52
61
|
self._cov = (cov_type, cov)
|
@@ -54,15 +63,15 @@ class Elbo:
|
|
54
63
|
raise ValueError("Only cov_full, cov_diag or sim value should be specified.")
|
55
64
|
|
56
65
|
def __call__(self, y_true: tf.Tensor, y_pred: tf.Tensor) -> tf.Tensor:
|
57
|
-
y_pred_flat = cast(tf.Tensor, Flatten()(y_pred))
|
66
|
+
y_pred_flat = cast(tf.Tensor, keras.layers.Flatten()(y_pred))
|
58
67
|
|
59
68
|
if self._cov[0] == "cov_full":
|
60
|
-
y_mn = MultivariateNormalTriL(y_pred_flat, scale_tril=tf.linalg.cholesky(self._cov[1]))
|
69
|
+
y_mn = mvn_tril.MultivariateNormalTriL(y_pred_flat, scale_tril=tf.linalg.cholesky(self._cov[1]))
|
61
70
|
else: # cov_diag and sim
|
62
71
|
cov_diag = self._cov[1] if self._cov[0] == "cov_diag" else self._cov[1] * tf.ones(y_pred_flat.shape[-1])
|
63
|
-
y_mn = MultivariateNormalDiag(y_pred_flat, scale_diag=cov_diag)
|
72
|
+
y_mn = mvn_diag.MultivariateNormalDiag(y_pred_flat, scale_diag=cov_diag)
|
64
73
|
|
65
|
-
loss = -tf.reduce_mean(y_mn.log_prob(Flatten()(y_true)))
|
74
|
+
loss = -tf.reduce_mean(y_mn.log_prob(keras.layers.Flatten()(y_true)))
|
66
75
|
return loss
|
67
76
|
|
68
77
|
|