keras-rs-nightly 0.0.1.dev2025043003__py3-none-any.whl → 0.2.2.dev202506100336__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.
Potentially problematic release.
This version of keras-rs-nightly might be problematic. Click here for more details.
- keras_rs/layers/__init__.py +12 -0
- keras_rs/src/layers/embedding/__init__.py +0 -0
- keras_rs/src/layers/embedding/base_distributed_embedding.py +1124 -0
- keras_rs/src/layers/embedding/distributed_embedding.py +33 -0
- keras_rs/src/layers/embedding/distributed_embedding_config.py +129 -0
- keras_rs/src/layers/embedding/embed_reduce.py +309 -0
- keras_rs/src/layers/embedding/jax/__init__.py +0 -0
- keras_rs/src/layers/embedding/jax/config_conversion.py +398 -0
- keras_rs/src/layers/embedding/jax/distributed_embedding.py +892 -0
- keras_rs/src/layers/embedding/jax/embedding_lookup.py +255 -0
- keras_rs/src/layers/embedding/jax/embedding_utils.py +596 -0
- keras_rs/src/layers/embedding/tensorflow/__init__.py +0 -0
- keras_rs/src/layers/embedding/tensorflow/config_conversion.py +323 -0
- keras_rs/src/layers/embedding/tensorflow/distributed_embedding.py +424 -0
- keras_rs/src/layers/feature_interaction/dot_interaction.py +2 -2
- keras_rs/src/layers/feature_interaction/feature_cross.py +14 -16
- keras_rs/src/layers/retrieval/brute_force_retrieval.py +5 -5
- keras_rs/src/layers/retrieval/retrieval.py +4 -4
- keras_rs/src/losses/pairwise_loss.py +2 -2
- keras_rs/src/losses/pairwise_mean_squared_error.py +1 -3
- keras_rs/src/metrics/dcg.py +2 -2
- keras_rs/src/metrics/mean_average_precision.py +1 -1
- keras_rs/src/metrics/mean_reciprocal_rank.py +4 -4
- keras_rs/src/metrics/ndcg.py +2 -2
- keras_rs/src/metrics/precision_at_k.py +3 -3
- keras_rs/src/metrics/ranking_metric.py +11 -5
- keras_rs/src/metrics/ranking_metrics_utils.py +10 -10
- keras_rs/src/metrics/recall_at_k.py +2 -2
- keras_rs/src/metrics/utils.py +2 -4
- keras_rs/src/types.py +43 -14
- keras_rs/src/utils/keras_utils.py +26 -6
- keras_rs/src/version.py +1 -1
- {keras_rs_nightly-0.0.1.dev2025043003.dist-info → keras_rs_nightly-0.2.2.dev202506100336.dist-info}/METADATA +6 -3
- keras_rs_nightly-0.2.2.dev202506100336.dist-info/RECORD +55 -0
- {keras_rs_nightly-0.0.1.dev2025043003.dist-info → keras_rs_nightly-0.2.2.dev202506100336.dist-info}/WHEEL +1 -1
- keras_rs_nightly-0.0.1.dev2025043003.dist-info/RECORD +0 -42
- {keras_rs_nightly-0.0.1.dev2025043003.dist-info → keras_rs_nightly-0.2.2.dev202506100336.dist-info}/top_level.txt +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import abc
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
import keras
|
|
5
5
|
from keras import ops
|
|
@@ -39,9 +39,9 @@ class RankingMetric(keras.metrics.Mean, abc.ABC):
|
|
|
39
39
|
|
|
40
40
|
def __init__(
|
|
41
41
|
self,
|
|
42
|
-
k:
|
|
42
|
+
k: int | None = None,
|
|
43
43
|
shuffle_ties: bool = True,
|
|
44
|
-
seed:
|
|
44
|
+
seed: int | keras.random.SeedGenerator | None = None,
|
|
45
45
|
**kwargs: Any,
|
|
46
46
|
) -> None:
|
|
47
47
|
super().__init__(**kwargs)
|
|
@@ -73,7 +73,7 @@ class RankingMetric(keras.metrics.Mean, abc.ABC):
|
|
|
73
73
|
self,
|
|
74
74
|
y_true: types.Tensor,
|
|
75
75
|
y_pred: types.Tensor,
|
|
76
|
-
sample_weight:
|
|
76
|
+
sample_weight: types.Tensor | None = None,
|
|
77
77
|
) -> None:
|
|
78
78
|
"""
|
|
79
79
|
Accumulates statistics for the ranking metric.
|
|
@@ -116,6 +116,12 @@ class RankingMetric(keras.metrics.Mean, abc.ABC):
|
|
|
116
116
|
if passed_mask is not None:
|
|
117
117
|
passed_mask = ops.convert_to_tensor(passed_mask)
|
|
118
118
|
|
|
119
|
+
# Cast to the correct dtype.
|
|
120
|
+
y_true = ops.cast(y_true, dtype=self.dtype)
|
|
121
|
+
y_pred = ops.cast(y_pred, dtype=self.dtype)
|
|
122
|
+
if sample_weight is not None:
|
|
123
|
+
sample_weight = ops.cast(sample_weight, dtype=self.dtype)
|
|
124
|
+
|
|
119
125
|
# === Process `sample_weight` ===
|
|
120
126
|
if sample_weight is None:
|
|
121
127
|
sample_weight = ops.cast(1, dtype=y_pred.dtype)
|
|
@@ -152,7 +158,7 @@ class RankingMetric(keras.metrics.Mean, abc.ABC):
|
|
|
152
158
|
|
|
153
159
|
# Mask all values less than 0 (since less than 0 implies invalid
|
|
154
160
|
# labels).
|
|
155
|
-
valid_mask = ops.greater_equal(y_true, ops.cast(0
|
|
161
|
+
valid_mask = ops.greater_equal(y_true, ops.cast(0, y_true.dtype))
|
|
156
162
|
if passed_mask is not None:
|
|
157
163
|
valid_mask = ops.logical_and(valid_mask, passed_mask)
|
|
158
164
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Callable
|
|
1
|
+
from typing import Callable
|
|
2
2
|
|
|
3
3
|
import keras
|
|
4
4
|
from keras import ops
|
|
@@ -7,10 +7,10 @@ from keras_rs.src import types
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def get_shuffled_indices(
|
|
10
|
-
shape: types.
|
|
11
|
-
mask:
|
|
10
|
+
shape: types.Shape,
|
|
11
|
+
mask: types.Tensor | None = None,
|
|
12
12
|
shuffle_ties: bool = True,
|
|
13
|
-
seed:
|
|
13
|
+
seed: int | keras.random.SeedGenerator | None = None,
|
|
14
14
|
) -> types.Tensor:
|
|
15
15
|
"""Utility function for getting shuffled indices, with masked indices
|
|
16
16
|
pushed to the end.
|
|
@@ -54,16 +54,16 @@ def get_shuffled_indices(
|
|
|
54
54
|
def sort_by_scores(
|
|
55
55
|
tensors_to_sort: list[types.Tensor],
|
|
56
56
|
scores: types.Tensor,
|
|
57
|
-
mask:
|
|
58
|
-
k:
|
|
57
|
+
mask: types.Tensor | None = None,
|
|
58
|
+
k: int | None = None,
|
|
59
59
|
shuffle_ties: bool = True,
|
|
60
|
-
seed:
|
|
60
|
+
seed: int | keras.random.SeedGenerator | None = None,
|
|
61
61
|
) -> types.Tensor:
|
|
62
62
|
"""
|
|
63
63
|
Utility function for sorting tensors by scores.
|
|
64
64
|
|
|
65
65
|
Args:
|
|
66
|
-
tensors_to_sort
|
|
66
|
+
tensors_to_sort: list of tensors. All tensors are of shape
|
|
67
67
|
`(batch_size, list_size)`. These tensors are sorted based on
|
|
68
68
|
`scores`.
|
|
69
69
|
scores: tensor. Of shape `(batch_size, list_size)`. The scores to sort
|
|
@@ -163,7 +163,7 @@ def get_list_weights(
|
|
|
163
163
|
# Identify lists where both weights and relevance sums are non-zero.
|
|
164
164
|
nonzero_relevance = ops.cast(
|
|
165
165
|
ops.logical_and(nonzero_weights, nonzero_relevance_condition),
|
|
166
|
-
dtype=
|
|
166
|
+
dtype=weights.dtype,
|
|
167
167
|
)
|
|
168
168
|
# Count the number of lists with non-zero relevance and non-zero weights.
|
|
169
169
|
nonzero_relevance_count = ops.sum(nonzero_relevance, axis=0, keepdims=True)
|
|
@@ -227,7 +227,7 @@ def compute_dcg(
|
|
|
227
227
|
] = default_rank_discount_fn,
|
|
228
228
|
) -> types.Tensor:
|
|
229
229
|
list_size = ops.shape(y_true)[1]
|
|
230
|
-
positions = ops.arange(1, list_size + 1, dtype=
|
|
230
|
+
positions = ops.arange(1, list_size + 1, dtype=y_true.dtype)
|
|
231
231
|
gain = gain_fn(y_true)
|
|
232
232
|
discount = rank_discount_fn(positions)
|
|
233
233
|
|
|
@@ -38,11 +38,11 @@ class RecallAtK(RankingMetric):
|
|
|
38
38
|
ops.greater_equal(
|
|
39
39
|
sorted_y_true, ops.cast(1, dtype=sorted_y_true.dtype)
|
|
40
40
|
),
|
|
41
|
-
dtype=
|
|
41
|
+
dtype=y_pred.dtype,
|
|
42
42
|
)
|
|
43
43
|
overall_relevance = ops.cast(
|
|
44
44
|
ops.greater_equal(y_true, ops.cast(1, dtype=y_true.dtype)),
|
|
45
|
-
dtype=
|
|
45
|
+
dtype=y_pred.dtype,
|
|
46
46
|
)
|
|
47
47
|
per_list_recall = ops.divide_no_nan(
|
|
48
48
|
ops.sum(relevance, axis=1, keepdims=True),
|
keras_rs/src/metrics/utils.py
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
1
|
from keras import ops
|
|
4
2
|
|
|
5
3
|
from keras_rs.src import types
|
|
@@ -10,9 +8,9 @@ from keras_rs.src.utils.keras_utils import check_shapes_compatible
|
|
|
10
8
|
def standardize_call_inputs_ranks(
|
|
11
9
|
y_true: types.Tensor,
|
|
12
10
|
y_pred: types.Tensor,
|
|
13
|
-
mask:
|
|
11
|
+
mask: types.Tensor | None = None,
|
|
14
12
|
check_y_true_rank: bool = True,
|
|
15
|
-
) -> tuple[types.Tensor, types.Tensor,
|
|
13
|
+
) -> tuple[types.Tensor, types.Tensor, types.Tensor | None, bool]:
|
|
16
14
|
"""
|
|
17
15
|
Utility function for processing inputs for losses and metrics.
|
|
18
16
|
|
keras_rs/src/types.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"""Type definitions."""
|
|
2
2
|
|
|
3
|
-
from typing import Any,
|
|
3
|
+
from typing import Any, Callable, Mapping, Sequence, TypeAlias, TypeVar, Union
|
|
4
|
+
|
|
5
|
+
import keras
|
|
4
6
|
|
|
5
7
|
"""
|
|
6
8
|
A tensor in any of the backends.
|
|
@@ -8,19 +10,46 @@ A tensor in any of the backends.
|
|
|
8
10
|
We do not define it explicitly to not require all the backends to be installed
|
|
9
11
|
and imported. The explicit definition would be:
|
|
10
12
|
```
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
keras.KerasTensor,
|
|
21
|
-
]
|
|
13
|
+
numpy.ndarray,
|
|
14
|
+
| tensorflow.Tensor,
|
|
15
|
+
| tensorflow.RaggedTensor,
|
|
16
|
+
| tensorflow.SparseTensor,
|
|
17
|
+
| tensorflow.IndexedSlices,
|
|
18
|
+
| jax.Array,
|
|
19
|
+
| jax.experimental.sparse.JAXSparse,
|
|
20
|
+
| torch.Tensor,
|
|
21
|
+
| keras.KerasTensor,
|
|
22
22
|
```
|
|
23
23
|
"""
|
|
24
|
-
Tensor = Any
|
|
24
|
+
Tensor: TypeAlias = Any
|
|
25
|
+
|
|
26
|
+
Shape: TypeAlias = Sequence[int | None]
|
|
27
|
+
|
|
28
|
+
DType: TypeAlias = str
|
|
29
|
+
|
|
30
|
+
ConstraintLike: TypeAlias = (
|
|
31
|
+
str
|
|
32
|
+
| keras.constraints.Constraint
|
|
33
|
+
| type[keras.constraints.Constraint]
|
|
34
|
+
| Callable[[Tensor], Tensor]
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
InitializerLike: TypeAlias = (
|
|
38
|
+
str
|
|
39
|
+
| keras.initializers.Initializer
|
|
40
|
+
| type[keras.initializers.Initializer]
|
|
41
|
+
| Callable[[Shape, DType], Tensor]
|
|
42
|
+
| Tensor
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
RegularizerLike: TypeAlias = (
|
|
46
|
+
str
|
|
47
|
+
| keras.regularizers.Regularizer
|
|
48
|
+
| type[keras.regularizers.Regularizer]
|
|
49
|
+
| Callable[[Tensor], Tensor]
|
|
50
|
+
)
|
|
25
51
|
|
|
26
|
-
|
|
52
|
+
T = TypeVar("T")
|
|
53
|
+
Nested: TypeAlias = (
|
|
54
|
+
T | Sequence[Union[T, "Nested[T]"]] | Mapping[str, Union[T, "Nested[T]"]]
|
|
55
|
+
)
|
|
@@ -1,13 +1,35 @@
|
|
|
1
|
-
from typing import
|
|
1
|
+
from typing import Any, Callable
|
|
2
2
|
|
|
3
3
|
import keras
|
|
4
4
|
|
|
5
5
|
from keras_rs.src import types
|
|
6
6
|
|
|
7
7
|
|
|
8
|
+
def no_automatic_dependency_tracking(
|
|
9
|
+
fn: Callable[..., Any],
|
|
10
|
+
) -> Callable[..., Any]:
|
|
11
|
+
"""Decorator to disable automatic dependency tracking in Keras and TF.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
fn: the function to disable automatic dependency tracking for.
|
|
15
|
+
|
|
16
|
+
Returns:
|
|
17
|
+
a wrapped version of `fn`.
|
|
18
|
+
"""
|
|
19
|
+
if keras.backend.backend() == "tensorflow":
|
|
20
|
+
import tensorflow as tf
|
|
21
|
+
|
|
22
|
+
fn = tf.__internal__.tracking.no_automatic_dependency_tracking(fn)
|
|
23
|
+
|
|
24
|
+
wrapped_fn: Callable[..., Any] = (
|
|
25
|
+
keras.src.utils.tracking.no_automatic_dependency_tracking(fn)
|
|
26
|
+
)
|
|
27
|
+
return wrapped_fn
|
|
28
|
+
|
|
29
|
+
|
|
8
30
|
def clone_initializer(
|
|
9
|
-
initializer:
|
|
10
|
-
) ->
|
|
31
|
+
initializer: types.InitializerLike,
|
|
32
|
+
) -> types.InitializerLike:
|
|
11
33
|
"""Clones an initializer to ensure a new seed.
|
|
12
34
|
|
|
13
35
|
Args:
|
|
@@ -29,9 +51,7 @@ def clone_initializer(
|
|
|
29
51
|
return initializer
|
|
30
52
|
|
|
31
53
|
|
|
32
|
-
def check_shapes_compatible(
|
|
33
|
-
shape1: types.TensorShape, shape2: types.TensorShape
|
|
34
|
-
) -> bool:
|
|
54
|
+
def check_shapes_compatible(shape1: types.Shape, shape2: types.Shape) -> bool:
|
|
35
55
|
# Check rank first.
|
|
36
56
|
if len(shape1) != len(shape2):
|
|
37
57
|
return False
|
keras_rs/src/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: keras-rs-nightly
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.2.dev202506100336
|
|
4
4
|
Summary: Multi-backend recommender systems with Keras 3.
|
|
5
5
|
Author-email: Keras team <keras-users@googlegroups.com>
|
|
6
6
|
License: Apache License 2.0
|
|
@@ -8,7 +8,6 @@ Project-URL: Home, https://keras.io/keras_rs
|
|
|
8
8
|
Project-URL: Repository, https://github.com/keras-team/keras-rs
|
|
9
9
|
Classifier: Development Status :: 3 - Alpha
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
12
11
|
Classifier: Programming Language :: Python :: 3.10
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
13
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
@@ -18,13 +17,17 @@ Classifier: Operating System :: MacOS
|
|
|
18
17
|
Classifier: Intended Audience :: Science/Research
|
|
19
18
|
Classifier: Topic :: Scientific/Engineering
|
|
20
19
|
Classifier: Topic :: Software Development
|
|
21
|
-
Requires-Python: >=3.
|
|
20
|
+
Requires-Python: >=3.10
|
|
22
21
|
Description-Content-Type: text/markdown
|
|
23
22
|
Requires-Dist: keras
|
|
24
23
|
Requires-Dist: ml-dtypes
|
|
25
24
|
|
|
26
25
|
# Keras Recommenders
|
|
27
26
|
|
|
27
|
+
<p align="center" width="100%">
|
|
28
|
+
<img src="https://i.imgur.com/m1BX7Zd.png" width="434" height="157" alt="KerasRS">
|
|
29
|
+
</p>
|
|
30
|
+
|
|
28
31
|
Keras Recommenders is a library for building recommender systems on top of
|
|
29
32
|
Keras 3. Keras Recommenders works natively with TensorFlow, JAX, or PyTorch. It
|
|
30
33
|
provides a collection of building blocks which help with the full workflow of
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
keras_rs/__init__.py,sha256=8sjHiPN2GhUqAq4V7Vh4FLLqYw20-jgdI26ZKX5sg6M,350
|
|
2
|
+
keras_rs/layers/__init__.py,sha256=ERqFu1R8FgeES5rO5QwauArbNCm8auj-AiCURtsG6Ro,1332
|
|
3
|
+
keras_rs/losses/__init__.py,sha256=m04QOgxIUfJ2MvCUKLgEof-UbSNKgUYLPnY-D9NAclI,573
|
|
4
|
+
keras_rs/metrics/__init__.py,sha256=Qxpf6OFooIL9TIn2l3WgOea3HFRG0hq02glPAxtMZ9c,580
|
|
5
|
+
keras_rs/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
keras_rs/src/api_export.py,sha256=RsmG-DvO-cdFeAF9W6LRzms0kvtm-Yp9BAA_d-952zI,510
|
|
7
|
+
keras_rs/src/types.py,sha256=1A-oLRdX1-f2DsVZBcNl8qNsaH8pM-gnleLT9FWZWBw,1189
|
|
8
|
+
keras_rs/src/version.py,sha256=ZDE_RjVl35PdFbqUTZE4krhKovaxmfxToo_5BCojNbA,224
|
|
9
|
+
keras_rs/src/layers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
+
keras_rs/src/layers/embedding/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
+
keras_rs/src/layers/embedding/base_distributed_embedding.py,sha256=dUZ4eS6ktnbnw_Z5gbyZGpQqO44Oyi7DkpNCReL66No,44347
|
|
12
|
+
keras_rs/src/layers/embedding/distributed_embedding.py,sha256=94jxUHoGK3Gs9yfV0KxFTuqPo7XFnhgCNlO2FEeiSgM,1072
|
|
13
|
+
keras_rs/src/layers/embedding/distributed_embedding_config.py,sha256=AWPmZBir1shhqNP6U_jiQ9lsBhMXVikW4B5VnzLsvPg,5579
|
|
14
|
+
keras_rs/src/layers/embedding/embed_reduce.py,sha256=c-MnEw1-KWs0jTf0JJ_ZBOY-9hRkiFyu989Dof3DnS8,12343
|
|
15
|
+
keras_rs/src/layers/embedding/jax/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
+
keras_rs/src/layers/embedding/jax/config_conversion.py,sha256=kDgzab8AVYf4jd_8fsiycPA0oFnT83kSWx-TXhzy6sk,13590
|
|
17
|
+
keras_rs/src/layers/embedding/jax/distributed_embedding.py,sha256=s_V2h8smO6_Nd3lQfp6zqNi9XxXIn9wjnggSedRoE8E,35410
|
|
18
|
+
keras_rs/src/layers/embedding/jax/embedding_lookup.py,sha256=HFkc0pGB9JngnCtbEJE2gDxC2K4gDdQ6GpnatSdnW6s,8205
|
|
19
|
+
keras_rs/src/layers/embedding/jax/embedding_utils.py,sha256=EHrQjPLl94STLWf9g8Ew8nuwupXRq-a_QmvFlXV6G6A,20331
|
|
20
|
+
keras_rs/src/layers/embedding/tensorflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
+
keras_rs/src/layers/embedding/tensorflow/config_conversion.py,sha256=i0iNXHi9E2UNh32Q5_kQtB9W5Cbcbm-tbWwRS1FHrfE,11589
|
|
22
|
+
keras_rs/src/layers/embedding/tensorflow/distributed_embedding.py,sha256=WPkRLJ7Tz272A0mMb5LCHlnNMYl_mTF2VxKpObcfQic,17206
|
|
23
|
+
keras_rs/src/layers/feature_interaction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
+
keras_rs/src/layers/feature_interaction/dot_interaction.py,sha256=Rs8xIHXNWQNiwjp_xzvQRmTSV1AyhJjDgVc3K5pTmrQ,8530
|
|
25
|
+
keras_rs/src/layers/feature_interaction/feature_cross.py,sha256=Wq_eQvO0WTRlep69QbKi8TwY8bnFoF9vreP_j6ZHNFE,8666
|
|
26
|
+
keras_rs/src/layers/retrieval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
+
keras_rs/src/layers/retrieval/brute_force_retrieval.py,sha256=WVH9nHj6mGcK5DAOzYBGfUztPtGtMX4RKLac6GV1vLI,5644
|
|
28
|
+
keras_rs/src/layers/retrieval/hard_negative_mining.py,sha256=n5UftRcuuR7Lh75vOdFdqatpsYqJDHCsraNtAjeWvoM,3575
|
|
29
|
+
keras_rs/src/layers/retrieval/remove_accidental_hits.py,sha256=WKoIhUSc6SvbgLXcSqNvFUnkuyXfxWwsC7nAgYbON_U,3773
|
|
30
|
+
keras_rs/src/layers/retrieval/retrieval.py,sha256=SFxMdooUhZy854SLZbpoyZR1Md4bHnpf7P077oVjjtU,4162
|
|
31
|
+
keras_rs/src/layers/retrieval/sampling_probability_correction.py,sha256=3zD6LInxhyIvyujMleGqiuoPKsna2oaTN6JU6xMnW_M,1977
|
|
32
|
+
keras_rs/src/losses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
+
keras_rs/src/losses/pairwise_hinge_loss.py,sha256=tONOJpcwCw1mybwvyx8dAy5t6dDmlIn00enzWfQLXpQ,3049
|
|
34
|
+
keras_rs/src/losses/pairwise_logistic_loss.py,sha256=40PFdCHDM7CLunT_PE3RbgxROVImw13dgVL3o3nzeNg,3473
|
|
35
|
+
keras_rs/src/losses/pairwise_loss.py,sha256=Oydk8e7AGU0Mc9yvm6ccr_XDDfUe8EZlS4JJgyxKUm4,6197
|
|
36
|
+
keras_rs/src/losses/pairwise_loss_utils.py,sha256=xvdGvdKNkvGvIaWYEQziWTFNa5EJz7rdkVGgrsnDHUk,1246
|
|
37
|
+
keras_rs/src/losses/pairwise_mean_squared_error.py,sha256=sW-S3fUFtLV_cf8Tw9Wluzoe9t7lmXzSIAj6MXOpL2M,4823
|
|
38
|
+
keras_rs/src/losses/pairwise_soft_zero_one_loss.py,sha256=YddVtJS8tKEeb0YrqGzEsr-6IDxH4uRjFrYkZDMWpkk,3492
|
|
39
|
+
keras_rs/src/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
|
+
keras_rs/src/metrics/dcg.py,sha256=rUtWe8VwZ8unXIhPu7fjTiErpK6-IOtcaiuikjtY1VE,5823
|
|
41
|
+
keras_rs/src/metrics/mean_average_precision.py,sha256=yUub4jGnqwTmxf694Z2ymRjMG_vO2HdyqqvDbcEhdSQ,4632
|
|
42
|
+
keras_rs/src/metrics/mean_reciprocal_rank.py,sha256=vr3ZZjpGYy2N-N7stcIm5elfHe9A4W8uY4HADP8icMw,4046
|
|
43
|
+
keras_rs/src/metrics/ndcg.py,sha256=ZBaKqV57K7jlto6ZVMxFNNRLdhzbLhdAR8TgDexjSjg,6922
|
|
44
|
+
keras_rs/src/metrics/precision_at_k.py,sha256=Dj5R-rT_Yd5hAsk4f-BlNMujfgIdPXnFVGOw9u7BIZQ,4038
|
|
45
|
+
keras_rs/src/metrics/ranking_metric.py,sha256=Lcl-Tt6HlI0f2wQpvAJ2M4mm5qCTZm-IgnLjjSEeNXE,10655
|
|
46
|
+
keras_rs/src/metrics/ranking_metrics_utils.py,sha256=0b03wiO9SjaHthtUYO4qezBFB8yLhFSwIRJhsL2fAJg,8785
|
|
47
|
+
keras_rs/src/metrics/recall_at_k.py,sha256=ssnQJC42KLN28cGrmzM-qR4M4iPqiQzWM2MfwYMq4ZE,3701
|
|
48
|
+
keras_rs/src/metrics/utils.py,sha256=fGTo8j0ykVE5Y3yQCS2orSFcHY20Uxt0NazyPsybUsw,2471
|
|
49
|
+
keras_rs/src/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
+
keras_rs/src/utils/doc_string_utils.py,sha256=CmqomepmaYcvpACpXEXkrJb8DMnvIgmYK-lJ53lYarY,1675
|
|
51
|
+
keras_rs/src/utils/keras_utils.py,sha256=dc-NFzs3a-qmRw0vBDiMslPLfrm9yymGduLWesXPhuY,2123
|
|
52
|
+
keras_rs_nightly-0.2.2.dev202506100336.dist-info/METADATA,sha256=fzhvqOxdMLY7GEw5SHAAc6zZJxa8EljtoTH0aZqecck,5273
|
|
53
|
+
keras_rs_nightly-0.2.2.dev202506100336.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
54
|
+
keras_rs_nightly-0.2.2.dev202506100336.dist-info/top_level.txt,sha256=pWs8X78Z0cn6lfcIb9VYOW5UeJ-TpoaO9dByzo7_FFo,9
|
|
55
|
+
keras_rs_nightly-0.2.2.dev202506100336.dist-info/RECORD,,
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
keras_rs/__init__.py,sha256=8sjHiPN2GhUqAq4V7Vh4FLLqYw20-jgdI26ZKX5sg6M,350
|
|
2
|
-
keras_rs/layers/__init__.py,sha256=cvrFgFWg0RjI0ExUZOKZRdcN-FwTIkqhT33Vx8wGtjQ,905
|
|
3
|
-
keras_rs/losses/__init__.py,sha256=m04QOgxIUfJ2MvCUKLgEof-UbSNKgUYLPnY-D9NAclI,573
|
|
4
|
-
keras_rs/metrics/__init__.py,sha256=Qxpf6OFooIL9TIn2l3WgOea3HFRG0hq02glPAxtMZ9c,580
|
|
5
|
-
keras_rs/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
keras_rs/src/api_export.py,sha256=RsmG-DvO-cdFeAF9W6LRzms0kvtm-Yp9BAA_d-952zI,510
|
|
7
|
-
keras_rs/src/types.py,sha256=UyOdgjqrqg_b58opnY8n6gTiDHKVR8z_bmEruehERBk,514
|
|
8
|
-
keras_rs/src/version.py,sha256=6DQicfo43WsR2bsg-BdUHiGbBwGhNMF6hKd7NXYSW70,222
|
|
9
|
-
keras_rs/src/layers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
keras_rs/src/layers/feature_interaction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
-
keras_rs/src/layers/feature_interaction/dot_interaction.py,sha256=bRLz03_8VaYLNG4gbIKCzsSc26shKMmzmwCs8SujezE,8542
|
|
12
|
-
keras_rs/src/layers/feature_interaction/feature_cross.py,sha256=rViVlJOGYG2f-uKTDQH7MdX2syRzIMkYYtAQUjz6F-0,8755
|
|
13
|
-
keras_rs/src/layers/retrieval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
keras_rs/src/layers/retrieval/brute_force_retrieval.py,sha256=izdppBXxJH0KqYEg7Zsr-SL-SHgAmnFopXMPalEO3uw,5676
|
|
15
|
-
keras_rs/src/layers/retrieval/hard_negative_mining.py,sha256=n5UftRcuuR7Lh75vOdFdqatpsYqJDHCsraNtAjeWvoM,3575
|
|
16
|
-
keras_rs/src/layers/retrieval/remove_accidental_hits.py,sha256=WKoIhUSc6SvbgLXcSqNvFUnkuyXfxWwsC7nAgYbON_U,3773
|
|
17
|
-
keras_rs/src/layers/retrieval/retrieval.py,sha256=hVOBF10SF2q_TgJdVUqztbnw5qQF-cxVRGdJbOKoL9M,4191
|
|
18
|
-
keras_rs/src/layers/retrieval/sampling_probability_correction.py,sha256=3zD6LInxhyIvyujMleGqiuoPKsna2oaTN6JU6xMnW_M,1977
|
|
19
|
-
keras_rs/src/losses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
-
keras_rs/src/losses/pairwise_hinge_loss.py,sha256=tONOJpcwCw1mybwvyx8dAy5t6dDmlIn00enzWfQLXpQ,3049
|
|
21
|
-
keras_rs/src/losses/pairwise_logistic_loss.py,sha256=40PFdCHDM7CLunT_PE3RbgxROVImw13dgVL3o3nzeNg,3473
|
|
22
|
-
keras_rs/src/losses/pairwise_loss.py,sha256=1eux_u7PZ8BkAVdoZnt8nQxJuJeTQy_FJ8IspN5SsPc,6210
|
|
23
|
-
keras_rs/src/losses/pairwise_loss_utils.py,sha256=xvdGvdKNkvGvIaWYEQziWTFNa5EJz7rdkVGgrsnDHUk,1246
|
|
24
|
-
keras_rs/src/losses/pairwise_mean_squared_error.py,sha256=zFiSr2TNyJysgULxj9R_trpIMRNL_4MqpiAMNPUYmR0,4855
|
|
25
|
-
keras_rs/src/losses/pairwise_soft_zero_one_loss.py,sha256=YddVtJS8tKEeb0YrqGzEsr-6IDxH4uRjFrYkZDMWpkk,3492
|
|
26
|
-
keras_rs/src/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
-
keras_rs/src/metrics/dcg.py,sha256=UT5EyStuMeF7kpVguF34u7__Hr0bWfSFqEoyX1F4dtA,5836
|
|
28
|
-
keras_rs/src/metrics/mean_average_precision.py,sha256=fRptyVvhCtzg0rXhBaTfLmqo7dKIG7vS75HK0xuDvpg,4629
|
|
29
|
-
keras_rs/src/metrics/mean_reciprocal_rank.py,sha256=R_LDAuKLK9buSD6hh3_nm0PksMhISbpuI6fR1MTsFWM,4034
|
|
30
|
-
keras_rs/src/metrics/ndcg.py,sha256=OX8vqO5JoBm8I7NDOce0bXwtoGNEK0hGEQT8hYfqJDA,6935
|
|
31
|
-
keras_rs/src/metrics/precision_at_k.py,sha256=A1pL5-Yo_DfDzUqAfqbF8TY39yqFgf_Fe1cxz0AsCfE,4029
|
|
32
|
-
keras_rs/src/metrics/ranking_metric.py,sha256=GFtOszaDmP4Q1ky3KnyMNXR6OBu09Uk4aEOJyn5-JO4,10439
|
|
33
|
-
keras_rs/src/metrics/ranking_metrics_utils.py,sha256=989J8pr6FRsA1HwBeF7SA8uQqjZT2XeCxKfRuMysWnQ,8828
|
|
34
|
-
keras_rs/src/metrics/recall_at_k.py,sha256=allUQA6JvPcWXxtGUHXmZ_nOWHAOmuUrIy5s5Nxse-4,3695
|
|
35
|
-
keras_rs/src/metrics/utils.py,sha256=6xanTNdwARn4ugzmb7ko2kwAhNhsnR4NhrpS_qW0IKc,2506
|
|
36
|
-
keras_rs/src/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
-
keras_rs/src/utils/doc_string_utils.py,sha256=CmqomepmaYcvpACpXEXkrJb8DMnvIgmYK-lJ53lYarY,1675
|
|
38
|
-
keras_rs/src/utils/keras_utils.py,sha256=d28OdQP4GrJk4NIQS4n0KPtCbgOCxVU_vDnnI7ODpOw,1562
|
|
39
|
-
keras_rs_nightly-0.0.1.dev2025043003.dist-info/METADATA,sha256=9RvG8sYrJD060w9nUrJ_vIVKwx_M3CzH_f0dquulVjg,5199
|
|
40
|
-
keras_rs_nightly-0.0.1.dev2025043003.dist-info/WHEEL,sha256=ooBFpIzZCPdw3uqIQsOo4qqbA4ZRPxHnOH7peeONza0,91
|
|
41
|
-
keras_rs_nightly-0.0.1.dev2025043003.dist-info/top_level.txt,sha256=pWs8X78Z0cn6lfcIb9VYOW5UeJ-TpoaO9dByzo7_FFo,9
|
|
42
|
-
keras_rs_nightly-0.0.1.dev2025043003.dist-info/RECORD,,
|
|
File without changes
|