tf-models-nightly 2.17.0.dev20240408__py2.py3-none-any.whl → 2.17.0.dev20240410__py2.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.
- official/recommendation/uplift/metrics/loss_metric.py +70 -23
- official/recommendation/uplift/metrics/loss_metric_test.py +161 -7
- official/vision/dataloaders/retinanet_input.py +15 -7
- {tf_models_nightly-2.17.0.dev20240408.dist-info → tf_models_nightly-2.17.0.dev20240410.dist-info}/METADATA +1 -1
- {tf_models_nightly-2.17.0.dev20240408.dist-info → tf_models_nightly-2.17.0.dev20240410.dist-info}/RECORD +9 -9
- {tf_models_nightly-2.17.0.dev20240408.dist-info → tf_models_nightly-2.17.0.dev20240410.dist-info}/AUTHORS +0 -0
- {tf_models_nightly-2.17.0.dev20240408.dist-info → tf_models_nightly-2.17.0.dev20240410.dist-info}/LICENSE +0 -0
- {tf_models_nightly-2.17.0.dev20240408.dist-info → tf_models_nightly-2.17.0.dev20240410.dist-info}/WHEEL +0 -0
- {tf_models_nightly-2.17.0.dev20240408.dist-info → tf_models_nightly-2.17.0.dev20240410.dist-info}/top_level.txt +0 -0
@@ -40,7 +40,7 @@ class LossMetric(tf_keras.metrics.Metric):
|
|
40
40
|
... true_logits=tf.constant([1, 2, 3, 4])
|
41
41
|
... is_treatment=tf.constant([True, False, True, False]),
|
42
42
|
... )
|
43
|
-
>>> sliced_loss(y_true=
|
43
|
+
>>> sliced_loss(y_true=y_true, y_pred=y_pred)
|
44
44
|
{
|
45
45
|
"loss": 2.5
|
46
46
|
"loss/control": 4.0
|
@@ -58,8 +58,11 @@ class LossMetric(tf_keras.metrics.Metric):
|
|
58
58
|
|
59
59
|
def __init__(
|
60
60
|
self,
|
61
|
-
loss_fn:
|
61
|
+
loss_fn: (
|
62
|
+
Callable[[tf.Tensor, tf.Tensor], tf.Tensor] | tf_keras.metrics.Metric
|
63
|
+
),
|
62
64
|
from_logits: bool = True,
|
65
|
+
slice_by_treatment: bool = True,
|
63
66
|
name: str = "loss",
|
64
67
|
dtype: tf.DType = tf.float32,
|
65
68
|
**loss_fn_kwargs,
|
@@ -67,27 +70,61 @@ class LossMetric(tf_keras.metrics.Metric):
|
|
67
70
|
"""Initializes the instance.
|
68
71
|
|
69
72
|
Args:
|
70
|
-
loss_fn: The loss function
|
71
|
-
|
73
|
+
loss_fn: The loss function or Keras metric to apply with call signature
|
74
|
+
`__call__(y_true: tf,Tensor, y_pred: tf.Tensor, **loss_fn_kwargs)`. Note
|
75
|
+
that the `loss_fn_kwargs` will not be passed to the `__call__` method if
|
76
|
+
`loss_fn` is a Keras metric.
|
72
77
|
from_logits: Specifies whether the true logits or true predictions should
|
73
78
|
be used from the model outputs to compute the loss. Defaults to using
|
74
79
|
the true logits.
|
75
|
-
|
76
|
-
|
80
|
+
slice_by_treatment: Specifies whether the loss should be sliced by the
|
81
|
+
treatment indicator tensor. If `True`, `loss_fn` will be wrapped in a
|
82
|
+
`TreatmentSlicedMetric` to report the loss values sliced by the
|
83
|
+
treatment group.
|
84
|
+
name: Optional name for the instance. If `loss_fn` is a Keras metric then
|
85
|
+
its name will be used instead.
|
86
|
+
dtype: Optional data type for the instance. If `loss_fn` is a Keras metric
|
87
|
+
then its `dtype` will be used instead.
|
77
88
|
**loss_fn_kwargs: The keyword arguments that are passed on to `loss_fn`.
|
89
|
+
These arguments will be ignored if `loss_fn` is a Keras metric.
|
78
90
|
"""
|
91
|
+
# Do not accept Loss objects as they reduce tensors before weighting.
|
92
|
+
if isinstance(loss_fn, tf_keras.losses.Loss):
|
93
|
+
raise TypeError(
|
94
|
+
"`loss_fn` cannot be a Keras `Loss` object, pass a non-reducing loss"
|
95
|
+
" function or a metric instance instead."
|
96
|
+
)
|
97
|
+
|
98
|
+
if isinstance(loss_fn, tf_keras.metrics.Metric):
|
99
|
+
name = loss_fn.name
|
100
|
+
dtype = loss_fn.dtype
|
101
|
+
|
79
102
|
super().__init__(name=name, dtype=dtype)
|
80
103
|
|
81
104
|
self._loss_fn = loss_fn
|
82
105
|
self._from_logits = from_logits
|
83
106
|
self._loss_fn_kwargs = loss_fn_kwargs
|
107
|
+
self._slice_by_treatment = slice_by_treatment
|
108
|
+
|
109
|
+
if isinstance(loss_fn, tf_keras.metrics.Metric):
|
110
|
+
metric_from_logits = loss_fn.get_config().get("from_logits", from_logits)
|
111
|
+
if from_logits != metric_from_logits:
|
112
|
+
raise ValueError(
|
113
|
+
f"Value passed to `from_logits` ({from_logits}) is conflicting with"
|
114
|
+
" the `from_logits` value passed to the `loss_fn` metric"
|
115
|
+
f" ({metric_from_logits}). Ensure that they have the same value."
|
116
|
+
)
|
117
|
+
loss_metric = loss_fn
|
84
118
|
|
85
|
-
|
86
|
-
|
119
|
+
else:
|
120
|
+
if "from_logits" in inspect.signature(loss_fn).parameters:
|
121
|
+
self._loss_fn_kwargs.update({"from_logits": from_logits})
|
122
|
+
loss_metric = tf_keras.metrics.Mean(name=name, dtype=dtype)
|
87
123
|
|
88
|
-
|
89
|
-
|
90
|
-
|
124
|
+
if slice_by_treatment:
|
125
|
+
self._loss = treatment_sliced_metric.TreatmentSlicedMetric(loss_metric)
|
126
|
+
else:
|
127
|
+
self._loss = loss_metric
|
91
128
|
|
92
129
|
def update_state(
|
93
130
|
self,
|
@@ -115,24 +152,34 @@ class LossMetric(tf_keras.metrics.Metric):
|
|
115
152
|
f" {type(y_pred)} instead."
|
116
153
|
)
|
117
154
|
|
118
|
-
if self._from_logits
|
119
|
-
loss = self._loss_fn(y_true, y_pred.true_logits)
|
120
|
-
else:
|
121
|
-
loss = self._loss_fn(y_true, y_pred.true_predictions)
|
155
|
+
pred = y_pred.true_logits if self._from_logits else y_pred.true_predictions
|
122
156
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
)
|
157
|
+
is_treatment = {}
|
158
|
+
if self._slice_by_treatment:
|
159
|
+
is_treatment["is_treatment"] = y_pred.is_treatment
|
160
|
+
|
161
|
+
if isinstance(self._loss_fn, tf_keras.metrics.Metric):
|
162
|
+
self._loss.update_state(
|
163
|
+
y_true,
|
164
|
+
y_pred=pred,
|
165
|
+
sample_weight=sample_weight,
|
166
|
+
**is_treatment,
|
167
|
+
)
|
168
|
+
else:
|
169
|
+
self._loss.update_state(
|
170
|
+
values=self._loss_fn(y_true, pred, **self._loss_fn_kwargs),
|
171
|
+
sample_weight=sample_weight,
|
172
|
+
**is_treatment,
|
173
|
+
)
|
128
174
|
|
129
|
-
def result(self) -> dict[str, tf.Tensor]:
|
130
|
-
return self.
|
175
|
+
def result(self) -> tf.Tensor | dict[str, tf.Tensor]:
|
176
|
+
return self._loss.result()
|
131
177
|
|
132
178
|
def get_config(self) -> dict[str, Any]:
|
133
179
|
config = super().get_config()
|
134
180
|
config["loss_fn"] = tf_keras.utils.serialize_keras_object(self._loss_fn)
|
135
181
|
config["from_logits"] = self._from_logits
|
182
|
+
config["slice_by_treatment"] = self._slice_by_treatment
|
136
183
|
config.update(self._loss_fn_kwargs)
|
137
184
|
return config
|
138
185
|
|
@@ -141,4 +188,4 @@ class LossMetric(tf_keras.metrics.Metric):
|
|
141
188
|
config["loss_fn"] = tf_keras.utils.deserialize_keras_object(
|
142
189
|
config["loss_fn"]
|
143
190
|
)
|
144
|
-
return
|
191
|
+
return cls(**config)
|
@@ -25,9 +25,7 @@ from official.recommendation.uplift import types
|
|
25
25
|
from official.recommendation.uplift.metrics import loss_metric
|
26
26
|
|
27
27
|
|
28
|
-
class
|
29
|
-
keras_test_case.KerasTestCase, parameterized.TestCase
|
30
|
-
):
|
28
|
+
class LossMetricTest(keras_test_case.KerasTestCase, parameterized.TestCase):
|
31
29
|
|
32
30
|
def _get_outputs(
|
33
31
|
self,
|
@@ -64,6 +62,20 @@ class TrueLogitsTreatmentLossTest(
|
|
64
62
|
"loss/treatment": 1.0,
|
65
63
|
},
|
66
64
|
},
|
65
|
+
{
|
66
|
+
"testcase_name": "unweighted_metric",
|
67
|
+
"loss_fn": tf_keras.metrics.MeanSquaredError(name="loss"),
|
68
|
+
"from_logits": False,
|
69
|
+
"y_true": tf.constant([[0], [0], [2], [2]]),
|
70
|
+
"y_pred": tf.constant([[1], [2], [3], [4]]),
|
71
|
+
"is_treatment": tf.constant([[True], [False], [True], [False]]),
|
72
|
+
"sample_weight": None,
|
73
|
+
"expected_losses": {
|
74
|
+
"loss": 2.5,
|
75
|
+
"loss/control": 4.0,
|
76
|
+
"loss/treatment": 1.0,
|
77
|
+
},
|
78
|
+
},
|
67
79
|
{
|
68
80
|
"testcase_name": "weighted",
|
69
81
|
"loss_fn": tf_keras.losses.mean_absolute_error,
|
@@ -78,6 +90,20 @@ class TrueLogitsTreatmentLossTest(
|
|
78
90
|
"loss/treatment": 1.0,
|
79
91
|
},
|
80
92
|
},
|
93
|
+
{
|
94
|
+
"testcase_name": "weighted_keras_metric",
|
95
|
+
"loss_fn": tf_keras.metrics.MeanAbsoluteError(name="loss"),
|
96
|
+
"from_logits": False,
|
97
|
+
"y_true": tf.constant([[0], [0], [2], [7]]),
|
98
|
+
"y_pred": tf.constant([[1], [2], [3], [4]]),
|
99
|
+
"is_treatment": tf.constant([[True], [False], [True], [False]]),
|
100
|
+
"sample_weight": tf.constant([[0.5], [0.5], [0.7], [1.8]]),
|
101
|
+
"expected_losses": {
|
102
|
+
"loss": np.average([1, 2, 1, 3], weights=[0.5, 0.5, 0.7, 1.8]),
|
103
|
+
"loss/control": np.average([2, 3], weights=[0.5, 1.8]),
|
104
|
+
"loss/treatment": 1.0,
|
105
|
+
},
|
106
|
+
},
|
81
107
|
{
|
82
108
|
"testcase_name": "only_control",
|
83
109
|
"loss_fn": tf_keras.metrics.mean_squared_error,
|
@@ -92,6 +118,20 @@ class TrueLogitsTreatmentLossTest(
|
|
92
118
|
"loss/treatment": 0.0,
|
93
119
|
},
|
94
120
|
},
|
121
|
+
{
|
122
|
+
"testcase_name": "only_control_metric",
|
123
|
+
"loss_fn": tf_keras.metrics.MeanSquaredError(name="loss"),
|
124
|
+
"from_logits": False,
|
125
|
+
"y_true": tf.constant([[0], [1], [5]]),
|
126
|
+
"y_pred": tf.constant([[1], [2], [5]]),
|
127
|
+
"is_treatment": tf.constant([[False], [False], [False]]),
|
128
|
+
"sample_weight": tf.constant([1, 0, 1]),
|
129
|
+
"expected_losses": {
|
130
|
+
"loss": 0.5,
|
131
|
+
"loss/control": 0.5,
|
132
|
+
"loss/treatment": 0.0,
|
133
|
+
},
|
134
|
+
},
|
95
135
|
{
|
96
136
|
"testcase_name": "only_treatment",
|
97
137
|
"loss_fn": tf_keras.metrics.mean_absolute_error,
|
@@ -106,6 +146,20 @@ class TrueLogitsTreatmentLossTest(
|
|
106
146
|
"loss/treatment": 0.5,
|
107
147
|
},
|
108
148
|
},
|
149
|
+
{
|
150
|
+
"testcase_name": "only_treatment_metric",
|
151
|
+
"loss_fn": tf_keras.metrics.MeanAbsoluteError(name="loss"),
|
152
|
+
"from_logits": False,
|
153
|
+
"y_true": tf.constant([[0], [1], [5]]),
|
154
|
+
"y_pred": tf.constant([[1], [2], [5]]),
|
155
|
+
"is_treatment": tf.constant([[True], [True], [True]]),
|
156
|
+
"sample_weight": tf.constant([1, 0, 1]),
|
157
|
+
"expected_losses": {
|
158
|
+
"loss": 0.5,
|
159
|
+
"loss/control": 0.0,
|
160
|
+
"loss/treatment": 0.5,
|
161
|
+
},
|
162
|
+
},
|
109
163
|
{
|
110
164
|
"testcase_name": "one_entry",
|
111
165
|
"loss_fn": tf.nn.log_poisson_loss,
|
@@ -138,6 +192,70 @@ class TrueLogitsTreatmentLossTest(
|
|
138
192
|
"loss/treatment": 0.0,
|
139
193
|
},
|
140
194
|
},
|
195
|
+
{
|
196
|
+
"testcase_name": "no_entry_metric",
|
197
|
+
"loss_fn": tf_keras.metrics.BinaryCrossentropy(name="loss"),
|
198
|
+
"from_logits": False,
|
199
|
+
"y_true": tf.constant([[]]),
|
200
|
+
"y_pred": tf.constant([[]]),
|
201
|
+
"is_treatment": tf.constant([[]]),
|
202
|
+
"sample_weight": tf.constant([[]]),
|
203
|
+
"expected_losses": {
|
204
|
+
"loss": 0.0,
|
205
|
+
"loss/control": 0.0,
|
206
|
+
"loss/treatment": 0.0,
|
207
|
+
},
|
208
|
+
},
|
209
|
+
{
|
210
|
+
"testcase_name": "auc_metric",
|
211
|
+
"loss_fn": tf_keras.metrics.AUC(from_logits=True, name="loss"),
|
212
|
+
"from_logits": True,
|
213
|
+
"y_true": tf.constant([[0], [0], [1], [1]]),
|
214
|
+
"y_pred": tf.constant([[0], [0.5], [0.3], [0.9]]),
|
215
|
+
"is_treatment": tf.constant([[1], [1], [1], [1]]),
|
216
|
+
"sample_weight": None,
|
217
|
+
"expected_losses": {
|
218
|
+
"loss": 0.75,
|
219
|
+
"loss/control": 0.0,
|
220
|
+
"loss/treatment": 0.75,
|
221
|
+
},
|
222
|
+
},
|
223
|
+
{
|
224
|
+
"testcase_name": "loss_fn_with_from_logits",
|
225
|
+
"loss_fn": tf_keras.losses.binary_crossentropy,
|
226
|
+
"from_logits": True,
|
227
|
+
"y_true": tf.constant([[0.0, 1.0]]),
|
228
|
+
"y_pred": tf.constant([[0.0, 1.0]]),
|
229
|
+
"is_treatment": tf.constant([[0], [0]]),
|
230
|
+
"sample_weight": None,
|
231
|
+
"expected_losses": {
|
232
|
+
"loss": 0.50320446,
|
233
|
+
"loss/control": 0.50320446,
|
234
|
+
"loss/treatment": 0.0,
|
235
|
+
},
|
236
|
+
},
|
237
|
+
{
|
238
|
+
"testcase_name": "no_treatment_slice",
|
239
|
+
"loss_fn": tf_keras.losses.binary_crossentropy,
|
240
|
+
"from_logits": True,
|
241
|
+
"y_true": tf.constant([[0.0, 1.0]]),
|
242
|
+
"y_pred": tf.constant([[0.0, 1.0]]),
|
243
|
+
"is_treatment": tf.constant([[0], [0]]),
|
244
|
+
"sample_weight": None,
|
245
|
+
"expected_losses": 0.50320446,
|
246
|
+
"slice_by_treatment": False,
|
247
|
+
},
|
248
|
+
{
|
249
|
+
"testcase_name": "no_treatment_slice_metric",
|
250
|
+
"loss_fn": tf_keras.metrics.BinaryCrossentropy(from_logits=False),
|
251
|
+
"from_logits": False,
|
252
|
+
"y_true": tf.constant([[0.0, 1.0]]),
|
253
|
+
"y_pred": tf.constant([[0.0, 1.0]]),
|
254
|
+
"is_treatment": tf.constant([[0], [0]]),
|
255
|
+
"sample_weight": None,
|
256
|
+
"expected_losses": 0,
|
257
|
+
"slice_by_treatment": False,
|
258
|
+
},
|
141
259
|
)
|
142
260
|
def test_metric_computes_sliced_losses(
|
143
261
|
self,
|
@@ -147,7 +265,8 @@ class TrueLogitsTreatmentLossTest(
|
|
147
265
|
y_pred: tf.Tensor,
|
148
266
|
is_treatment: tf.Tensor,
|
149
267
|
sample_weight: tf.Tensor | None,
|
150
|
-
expected_losses: dict[str, float],
|
268
|
+
expected_losses: float | dict[str, float],
|
269
|
+
slice_by_treatment: bool = True,
|
151
270
|
):
|
152
271
|
if from_logits:
|
153
272
|
true_logits = y_pred
|
@@ -156,7 +275,11 @@ class TrueLogitsTreatmentLossTest(
|
|
156
275
|
true_logits = tf.zeros_like(y_pred) # Irrelevant for testing.
|
157
276
|
true_predictions = y_pred
|
158
277
|
|
159
|
-
metric = loss_metric.LossMetric(
|
278
|
+
metric = loss_metric.LossMetric(
|
279
|
+
loss_fn=loss_fn,
|
280
|
+
from_logits=from_logits,
|
281
|
+
slice_by_treatment=slice_by_treatment,
|
282
|
+
)
|
160
283
|
outputs = self._get_outputs(
|
161
284
|
true_logits=true_logits,
|
162
285
|
true_predictions=true_predictions,
|
@@ -237,9 +360,27 @@ class TrueLogitsTreatmentLossTest(
|
|
237
360
|
metric.reset_states()
|
238
361
|
self.assertEqual(expected_initial_result, metric.result())
|
239
362
|
|
240
|
-
|
363
|
+
@parameterized.product(
|
364
|
+
loss_fn=(
|
365
|
+
tf_keras.losses.binary_crossentropy,
|
366
|
+
tf_keras.metrics.BinaryCrossentropy(
|
367
|
+
from_logits=True, name="bce_loss"
|
368
|
+
),
|
369
|
+
),
|
370
|
+
slice_by_treatment=(True, False),
|
371
|
+
)
|
372
|
+
def test_metric_is_configurable(
|
373
|
+
self,
|
374
|
+
loss_fn: (
|
375
|
+
Callable[[tf.Tensor, tf.Tensor], tf.Tensor] | tf_keras.metrics.Metric
|
376
|
+
),
|
377
|
+
slice_by_treatment: bool,
|
378
|
+
):
|
241
379
|
metric = loss_metric.LossMetric(
|
242
|
-
|
380
|
+
loss_fn,
|
381
|
+
from_logits=True,
|
382
|
+
slice_by_treatment=slice_by_treatment,
|
383
|
+
name="bce_loss",
|
243
384
|
)
|
244
385
|
self.assertLayerConfigurable(
|
245
386
|
layer=metric,
|
@@ -261,6 +402,19 @@ class TrueLogitsTreatmentLossTest(
|
|
261
402
|
):
|
262
403
|
metric.update_state(y_true=tf.ones((3, 1)), y_pred=tf.ones((3, 1)))
|
263
404
|
|
405
|
+
def test_passing_loss_object_raises_error(self):
|
406
|
+
with self.assertRaisesRegex(
|
407
|
+
TypeError, "`loss_fn` cannot be a Keras `Loss` object"
|
408
|
+
):
|
409
|
+
loss_metric.LossMetric(loss_fn=tf_keras.losses.MeanAbsoluteError())
|
410
|
+
|
411
|
+
def test_conflicting_from_logits_values_raises_error(self):
|
412
|
+
with self.assertRaises(ValueError):
|
413
|
+
loss_metric.LossMetric(
|
414
|
+
loss_fn=tf_keras.metrics.BinaryCrossentropy(from_logits=True),
|
415
|
+
from_logits=False,
|
416
|
+
)
|
417
|
+
|
264
418
|
|
265
419
|
if __name__ == "__main__":
|
266
420
|
tf.test.main()
|
@@ -39,11 +39,11 @@ class Parser(parser.Parser):
|
|
39
39
|
|
40
40
|
def __init__(self,
|
41
41
|
output_size,
|
42
|
-
min_level,
|
42
|
+
min_level: int | None,
|
43
43
|
max_level,
|
44
|
-
num_scales,
|
45
|
-
aspect_ratios,
|
46
|
-
anchor_size,
|
44
|
+
num_scales: int | None,
|
45
|
+
aspect_ratios: list[float] | None,
|
46
|
+
anchor_size: float | None,
|
47
47
|
match_threshold=0.5,
|
48
48
|
unmatched_threshold=0.5,
|
49
49
|
box_coder_weights=None,
|
@@ -63,20 +63,28 @@ class Parser(parser.Parser):
|
|
63
63
|
keep_aspect_ratio=True):
|
64
64
|
"""Initializes parameters for parsing annotations in the dataset.
|
65
65
|
|
66
|
+
If one provides `input_anchor` when calling `_parse_eval_data()` and
|
67
|
+
`_parse_train_data()`, the `min_level`, `num_scales`, `aspect_ratios`, and
|
68
|
+
`anchor_size` can be `None`.
|
69
|
+
|
66
70
|
Args:
|
67
71
|
output_size: `Tensor` or `list` for [height, width] of output image. The
|
68
72
|
output_size should be divided by the largest feature stride 2^max_level.
|
69
73
|
min_level: `int` number of minimum level of the output feature pyramid.
|
74
|
+
Can be `None` if `input_anchor` is provided in `_parse_*_data()`.
|
70
75
|
max_level: `int` number of maximum level of the output feature pyramid.
|
71
76
|
num_scales: `int` number representing intermediate scales added on each
|
72
77
|
level. For instances, num_scales=2 adds one additional intermediate
|
73
|
-
anchor scales [2^0, 2^0.5] on each level.
|
78
|
+
anchor scales [2^0, 2^0.5] on each level. Can be `None` if
|
79
|
+
`input_anchor` is provided in `_parse_*_data()`.
|
74
80
|
aspect_ratios: `list` of float numbers representing the aspect ratio
|
75
81
|
anchors added on each level. The number indicates the ratio of width to
|
76
82
|
height. For instances, aspect_ratios=[1.0, 2.0, 0.5] adds three anchors
|
77
|
-
on each scale level.
|
83
|
+
on each scale level. Can be `None` if `input_anchor` is provided in
|
84
|
+
`_parse_*_data()`.
|
78
85
|
anchor_size: `float` number representing the scale of size of the base
|
79
|
-
anchor to the feature stride 2^level.
|
86
|
+
anchor to the feature stride 2^level. Can be `None` if `input_anchor` is
|
87
|
+
provided in `_parse_*_data()`.
|
80
88
|
match_threshold: `float` number between 0 and 1 representing the
|
81
89
|
lower-bound threshold to assign positive labels for anchors. An anchor
|
82
90
|
with a score over the threshold is labeled positive.
|
@@ -912,8 +912,8 @@ official/recommendation/uplift/metrics/label_mean.py,sha256=ECaes7FZmsksnwySn7jf
|
|
912
912
|
official/recommendation/uplift/metrics/label_mean_test.py,sha256=b_d3lNlpkDm2xKLUkxfiXeQg7pjL8HNx7y9NaYarpV0,7083
|
913
913
|
official/recommendation/uplift/metrics/label_variance.py,sha256=9DCl42BJkehxfWD3pSbZnRNvwfhVM6VyHwivGdaU72s,3610
|
914
914
|
official/recommendation/uplift/metrics/label_variance_test.py,sha256=k0mdEU1WU53-HIEO5HGtfp1MleifD-h4bZNKtTvM3Ws,7681
|
915
|
-
official/recommendation/uplift/metrics/loss_metric.py,sha256=
|
916
|
-
official/recommendation/uplift/metrics/loss_metric_test.py,sha256=
|
915
|
+
official/recommendation/uplift/metrics/loss_metric.py,sha256=qWMcLk1JmLkru5T9qcqO2UbB_AJQKjQ8uUSAxjR1l58,6883
|
916
|
+
official/recommendation/uplift/metrics/loss_metric_test.py,sha256=QIUujZvUud-A2itI2vs2KpzWfLwbq2XDd9H9CFq5D4Y,14929
|
917
917
|
official/recommendation/uplift/metrics/metric_configs.py,sha256=Z-r79orE4EycQ5TJ7xdI5LhjOHT3wzChYyDxcxGqLXk,1670
|
918
918
|
official/recommendation/uplift/metrics/sliced_metric.py,sha256=O2I2apZK6IfOQK9Q_mgSiTUCnGokczp4e14zrrYNeRU,8564
|
919
919
|
official/recommendation/uplift/metrics/sliced_metric_test.py,sha256=dhY41X8lqT_WW04XLjyjDerZwujEBGeTXtxf4NkYThw,11359
|
@@ -987,7 +987,7 @@ official/vision/dataloaders/input_reader.py,sha256=CHojw8PJKf74jl8Q3rtH2ylwhmTYg
|
|
987
987
|
official/vision/dataloaders/input_reader_factory.py,sha256=WpvSA8qyqAo3wkmme4WqXpICBVg0SuR6_nNWHZ0ECM0,1623
|
988
988
|
official/vision/dataloaders/maskrcnn_input.py,sha256=iCc08yYD-7mvIPojgBjm_nSvoQACXWCIeZNZN8CfXSs,16822
|
989
989
|
official/vision/dataloaders/parser.py,sha256=nMXnhigMa_ascSJ2OK88xi4HdE9xvfL3G4oMrHau-t4,2315
|
990
|
-
official/vision/dataloaders/retinanet_input.py,sha256=
|
990
|
+
official/vision/dataloaders/retinanet_input.py,sha256=bU1fDpJuOtBZVJSg3Fzaku2PjxHh22E4d3M7B3Vu8ZQ,18831
|
991
991
|
official/vision/dataloaders/segmentation_input.py,sha256=Klg5KAChYZDRvqzZfyIzdPy54rTlWYZp2AotolD3WX8,12934
|
992
992
|
official/vision/dataloaders/tf_example_decoder.py,sha256=9yCT6uSLMpmw50w7zdaRR_BXy6vIvliLZntrYAgzD18,8647
|
993
993
|
official/vision/dataloaders/tf_example_decoder_test.py,sha256=PHxneXHn5-eIMdmk1uI4IPLa178kTCifa4EF53ik2Jo,12629
|
@@ -1203,9 +1203,9 @@ tensorflow_models/__init__.py,sha256=etxw45SHxuwFCRX5qGxGMP83II0JfJulzNl5GSNJvhw
|
|
1203
1203
|
tensorflow_models/tensorflow_models_test.py,sha256=AxUYUdiQn416UR7jg0h6rmv688esvlKDfpyDCIQkF18,1395
|
1204
1204
|
tensorflow_models/nlp/__init__.py,sha256=4tA5Pf4qaFwT-fIFOpX7x7FHJpnyJT-5UgOeFYTyMlc,807
|
1205
1205
|
tensorflow_models/vision/__init__.py,sha256=zBorY_v5xva1uI-qxhZO3Qh-Dii-Suq6wEYh6hKHDfc,833
|
1206
|
-
tf_models_nightly-2.17.0.
|
1207
|
-
tf_models_nightly-2.17.0.
|
1208
|
-
tf_models_nightly-2.17.0.
|
1209
|
-
tf_models_nightly-2.17.0.
|
1210
|
-
tf_models_nightly-2.17.0.
|
1211
|
-
tf_models_nightly-2.17.0.
|
1206
|
+
tf_models_nightly-2.17.0.dev20240410.dist-info/AUTHORS,sha256=1dG3fXVu9jlo7bul8xuix5F5vOnczMk7_yWn4y70uw0,337
|
1207
|
+
tf_models_nightly-2.17.0.dev20240410.dist-info/LICENSE,sha256=WxeBS_DejPZQabxtfMOM_xn8qoZNJDQjrT7z2wG1I4U,11512
|
1208
|
+
tf_models_nightly-2.17.0.dev20240410.dist-info/METADATA,sha256=Bh56e1__Pn_yvpm9QMq4h12nKucvnKAftuk0ElQqn_w,1432
|
1209
|
+
tf_models_nightly-2.17.0.dev20240410.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110
|
1210
|
+
tf_models_nightly-2.17.0.dev20240410.dist-info/top_level.txt,sha256=gum2FfO5R4cvjl2-QtP-S1aNmsvIZaFFT6VFzU0f4-g,33
|
1211
|
+
tf_models_nightly-2.17.0.dev20240410.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|