keras-rs-nightly 0.0.1.dev2025021903__py3-none-any.whl → 0.3.1.dev202512130338__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.
- keras_rs/__init__.py +9 -28
- keras_rs/layers/__init__.py +37 -0
- keras_rs/losses/__init__.py +19 -0
- keras_rs/metrics/__init__.py +16 -0
- keras_rs/src/layers/embedding/base_distributed_embedding.py +1151 -0
- keras_rs/src/layers/embedding/distributed_embedding.py +33 -0
- keras_rs/src/layers/embedding/distributed_embedding_config.py +132 -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/checkpoint_utils.py +104 -0
- keras_rs/src/layers/embedding/jax/config_conversion.py +468 -0
- keras_rs/src/layers/embedding/jax/distributed_embedding.py +829 -0
- keras_rs/src/layers/embedding/jax/embedding_lookup.py +276 -0
- keras_rs/src/layers/embedding/jax/embedding_utils.py +217 -0
- keras_rs/src/layers/embedding/tensorflow/__init__.py +0 -0
- keras_rs/src/layers/embedding/tensorflow/config_conversion.py +363 -0
- keras_rs/src/layers/embedding/tensorflow/distributed_embedding.py +436 -0
- keras_rs/src/layers/feature_interaction/__init__.py +0 -0
- keras_rs/src/layers/{modeling → feature_interaction}/dot_interaction.py +116 -25
- keras_rs/src/layers/{modeling → feature_interaction}/feature_cross.py +40 -22
- keras_rs/src/layers/retrieval/brute_force_retrieval.py +16 -65
- keras_rs/src/layers/retrieval/hard_negative_mining.py +94 -0
- keras_rs/src/layers/retrieval/remove_accidental_hits.py +97 -0
- keras_rs/src/layers/retrieval/retrieval.py +127 -0
- keras_rs/src/layers/retrieval/sampling_probability_correction.py +63 -0
- keras_rs/src/losses/__init__.py +0 -0
- keras_rs/src/losses/list_mle_loss.py +212 -0
- keras_rs/src/losses/pairwise_hinge_loss.py +90 -0
- keras_rs/src/losses/pairwise_logistic_loss.py +99 -0
- keras_rs/src/losses/pairwise_loss.py +165 -0
- keras_rs/src/losses/pairwise_loss_utils.py +39 -0
- keras_rs/src/losses/pairwise_mean_squared_error.py +133 -0
- keras_rs/src/losses/pairwise_soft_zero_one_loss.py +98 -0
- keras_rs/src/metrics/__init__.py +0 -0
- keras_rs/src/metrics/dcg.py +161 -0
- keras_rs/src/metrics/mean_average_precision.py +130 -0
- keras_rs/src/metrics/mean_reciprocal_rank.py +121 -0
- keras_rs/src/metrics/ndcg.py +197 -0
- keras_rs/src/metrics/precision_at_k.py +117 -0
- keras_rs/src/metrics/ranking_metric.py +260 -0
- keras_rs/src/metrics/ranking_metrics_utils.py +257 -0
- keras_rs/src/metrics/recall_at_k.py +108 -0
- keras_rs/src/metrics/utils.py +70 -0
- keras_rs/src/types.py +43 -14
- keras_rs/src/utils/doc_string_utils.py +53 -0
- keras_rs/src/utils/keras_utils.py +52 -3
- keras_rs/src/utils/tpu_test_utils.py +120 -0
- keras_rs/src/version.py +1 -1
- {keras_rs_nightly-0.0.1.dev2025021903.dist-info → keras_rs_nightly-0.3.1.dev202512130338.dist-info}/METADATA +88 -8
- keras_rs_nightly-0.3.1.dev202512130338.dist-info/RECORD +58 -0
- {keras_rs_nightly-0.0.1.dev2025021903.dist-info → keras_rs_nightly-0.3.1.dev202512130338.dist-info}/WHEEL +1 -1
- keras_rs/api/__init__.py +0 -9
- keras_rs/api/layers/__init__.py +0 -11
- keras_rs_nightly-0.0.1.dev2025021903.dist-info/RECORD +0 -19
- /keras_rs/src/layers/{modeling → embedding}/__init__.py +0 -0
- {keras_rs_nightly-0.0.1.dev2025021903.dist-info → keras_rs_nightly-0.3.1.dev202512130338.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import contextlib
|
|
2
|
+
import os
|
|
3
|
+
import threading
|
|
4
|
+
from typing import Any, Callable, ContextManager, Optional, Tuple, Union
|
|
5
|
+
|
|
6
|
+
import keras
|
|
7
|
+
import tensorflow as tf
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class DummyStrategy:
|
|
11
|
+
def scope(self) -> ContextManager[None]:
|
|
12
|
+
return contextlib.nullcontext()
|
|
13
|
+
|
|
14
|
+
@property
|
|
15
|
+
def num_replicas_in_sync(self) -> int:
|
|
16
|
+
return 1
|
|
17
|
+
|
|
18
|
+
def run(self, fn: Callable[..., Any], args: Tuple[Any, ...]) -> Any:
|
|
19
|
+
return fn(*args)
|
|
20
|
+
|
|
21
|
+
def experimental_distribute_dataset(
|
|
22
|
+
self, dataset: Any, options: Optional[Any] = None
|
|
23
|
+
) -> Any:
|
|
24
|
+
del options
|
|
25
|
+
return dataset
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class JaxDummyStrategy(DummyStrategy):
|
|
29
|
+
@property
|
|
30
|
+
def num_replicas_in_sync(self) -> Any:
|
|
31
|
+
import jax
|
|
32
|
+
|
|
33
|
+
return jax.device_count("tpu")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
StrategyType = Union[tf.distribute.Strategy, DummyStrategy]
|
|
37
|
+
|
|
38
|
+
_shared_strategy: Optional[StrategyType] = None
|
|
39
|
+
_lock = threading.Lock()
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def create_tpu_strategy() -> Optional[StrategyType]:
|
|
43
|
+
"""Initializes the TPU system and returns a TPUStrategy."""
|
|
44
|
+
print("Attempting to create TPUStrategy...")
|
|
45
|
+
try:
|
|
46
|
+
resolver = tf.distribute.cluster_resolver.TPUClusterResolver(tpu="")
|
|
47
|
+
tf.config.experimental_connect_to_cluster(resolver)
|
|
48
|
+
tf.tpu.experimental.initialize_tpu_system(resolver)
|
|
49
|
+
strategy = tf.distribute.TPUStrategy(resolver)
|
|
50
|
+
print(
|
|
51
|
+
"TPUStrategy created successfully."
|
|
52
|
+
"Devices: {strategy.extended.num_replicas_in_sync}"
|
|
53
|
+
)
|
|
54
|
+
return strategy
|
|
55
|
+
except Exception as e:
|
|
56
|
+
print(f"Error creating TPUStrategy: {e}")
|
|
57
|
+
return None
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def get_shared_tpu_strategy() -> Optional[StrategyType]:
|
|
61
|
+
"""
|
|
62
|
+
Returns a session-wide shared TPUStrategy instance.
|
|
63
|
+
Creates the instance on the first call.
|
|
64
|
+
Returns None if not in a TPU environment or if creation fails.
|
|
65
|
+
"""
|
|
66
|
+
global _shared_strategy
|
|
67
|
+
if _shared_strategy is not None:
|
|
68
|
+
return _shared_strategy
|
|
69
|
+
|
|
70
|
+
with _lock:
|
|
71
|
+
if _shared_strategy is None:
|
|
72
|
+
if "TPU_NAME" not in os.environ:
|
|
73
|
+
_shared_strategy = DummyStrategy()
|
|
74
|
+
return _shared_strategy
|
|
75
|
+
if keras.backend.backend() == "tensorflow":
|
|
76
|
+
resolver = tf.distribute.cluster_resolver.TPUClusterResolver()
|
|
77
|
+
tf.config.experimental_connect_to_cluster(resolver)
|
|
78
|
+
topology = tf.tpu.experimental.initialize_tpu_system(resolver)
|
|
79
|
+
tpu_metadata = resolver.get_tpu_system_metadata()
|
|
80
|
+
device_assignment = tf.tpu.experimental.DeviceAssignment.build(
|
|
81
|
+
topology, num_replicas=tpu_metadata.num_hosts
|
|
82
|
+
)
|
|
83
|
+
_shared_strategy = tf.distribute.TPUStrategy(
|
|
84
|
+
resolver, experimental_device_assignment=device_assignment
|
|
85
|
+
)
|
|
86
|
+
print("### num_replicas", _shared_strategy.num_replicas_in_sync)
|
|
87
|
+
elif keras.backend.backend() == "jax":
|
|
88
|
+
_shared_strategy = JaxDummyStrategy()
|
|
89
|
+
print("### num_replicas", _shared_strategy.num_replicas_in_sync)
|
|
90
|
+
else:
|
|
91
|
+
_shared_strategy = DummyStrategy()
|
|
92
|
+
return _shared_strategy
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def run_with_strategy(
|
|
96
|
+
strategy: Any,
|
|
97
|
+
fn: Callable[..., Any],
|
|
98
|
+
*args: Any,
|
|
99
|
+
jit_compile: bool = False,
|
|
100
|
+
**kwargs: Any,
|
|
101
|
+
) -> Any:
|
|
102
|
+
"""
|
|
103
|
+
Final wrapper fix: Flattens allowed kwargs into positional args before
|
|
104
|
+
entering tf.function to guarantee a fixed graph signature.
|
|
105
|
+
"""
|
|
106
|
+
if keras.backend.backend() == "tensorflow":
|
|
107
|
+
all_inputs = (args, kwargs)
|
|
108
|
+
|
|
109
|
+
@tf.function(jit_compile=jit_compile) # type: ignore[untyped-decorator]
|
|
110
|
+
def tf_function_wrapper(input_tuple: Tuple[Any, Any]) -> Any:
|
|
111
|
+
core_args, core_kwargs = input_tuple
|
|
112
|
+
if core_kwargs:
|
|
113
|
+
return strategy.run(fn, args=core_args, kwargs=core_kwargs)
|
|
114
|
+
else:
|
|
115
|
+
return strategy.run(fn, args=core_args)
|
|
116
|
+
|
|
117
|
+
return tf_function_wrapper(all_inputs)
|
|
118
|
+
else:
|
|
119
|
+
assert not jit_compile
|
|
120
|
+
return fn(*args, **kwargs)
|
keras_rs/src/version.py
CHANGED
|
@@ -1,28 +1,34 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: keras-rs-nightly
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1.dev202512130338
|
|
4
4
|
Summary: Multi-backend recommender systems with Keras 3.
|
|
5
|
-
Author-email: Keras
|
|
5
|
+
Author-email: Keras team <keras-users@googlegroups.com>
|
|
6
6
|
License: Apache License 2.0
|
|
7
|
-
Project-URL: Home, https://keras.io/
|
|
7
|
+
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
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
13
11
|
Classifier: Programming Language :: Python :: 3.11
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
14
14
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
15
|
Classifier: Operating System :: Unix
|
|
16
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
16
17
|
Classifier: Operating System :: MacOS
|
|
17
18
|
Classifier: Intended Audience :: Science/Research
|
|
18
19
|
Classifier: Topic :: Scientific/Engineering
|
|
19
20
|
Classifier: Topic :: Software Development
|
|
20
|
-
Requires-Python: >=3.
|
|
21
|
+
Requires-Python: >=3.11
|
|
21
22
|
Description-Content-Type: text/markdown
|
|
22
23
|
Requires-Dist: keras
|
|
24
|
+
Requires-Dist: ml-dtypes
|
|
23
25
|
|
|
24
26
|
# Keras Recommenders
|
|
25
27
|
|
|
28
|
+
<p align="center" width="100%">
|
|
29
|
+
<img src="https://i.imgur.com/m1BX7Zd.png" width="434" height="157" alt="KerasRS">
|
|
30
|
+
</p>
|
|
31
|
+
|
|
26
32
|
Keras Recommenders is a library for building recommender systems on top of
|
|
27
33
|
Keras 3. Keras Recommenders works natively with TensorFlow, JAX, or PyTorch. It
|
|
28
34
|
provides a collection of building blocks which help with the full workflow of
|
|
@@ -34,6 +40,80 @@ This library is an extension of the core Keras API; all high-level modules
|
|
|
34
40
|
receive that same level of polish as core Keras. If you are familiar with Keras,
|
|
35
41
|
congratulations! You already understand most of Keras Recommenders.
|
|
36
42
|
|
|
43
|
+
## Quick Links
|
|
44
|
+
|
|
45
|
+
- [Home page](https://keras.io/keras_rs)
|
|
46
|
+
- [Examples](https://keras.io/keras_rs/examples)
|
|
47
|
+
- [API documentation](https://keras.io/keras_rs/api)
|
|
48
|
+
|
|
49
|
+
## Quickstart
|
|
50
|
+
|
|
51
|
+
### Train your own cross network
|
|
52
|
+
|
|
53
|
+
Choose a backend:
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
import os
|
|
57
|
+
os.environ["KERAS_BACKEND"] = "jax" # Or "tensorflow" or "torch"!
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Import KerasRS and other libraries:
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
import keras
|
|
64
|
+
import keras_rs
|
|
65
|
+
import numpy as np
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Define a simple model using the `FeatureCross` layer:
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
vocabulary_size = 32
|
|
72
|
+
embedding_dim = 6
|
|
73
|
+
|
|
74
|
+
inputs = keras.Input(shape=(), name='indices', dtype="int32")
|
|
75
|
+
x0 = keras.layers.Embedding(
|
|
76
|
+
input_dim=vocabulary_size,
|
|
77
|
+
output_dim=embedding_dim
|
|
78
|
+
)(inputs)
|
|
79
|
+
x1 = keras_rs.layers.FeatureCross()(x0, x0)
|
|
80
|
+
x2 = keras_rs.layers.FeatureCross()(x0, x1)
|
|
81
|
+
output = keras.layers.Dense(units=10)(x2)
|
|
82
|
+
model = keras.Model(inputs, output)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Compile the model:
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
model.compile(
|
|
89
|
+
loss=keras.losses.MeanSquaredError(),
|
|
90
|
+
optimizer=keras.optimizers.Adam(learning_rate=3e-4)
|
|
91
|
+
)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Call `model.fit()` on dummy data:
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
batch_size = 2
|
|
98
|
+
x = np.random.randint(0, vocabulary_size, size=(batch_size,))
|
|
99
|
+
y = np.random.random(size=(batch_size,))
|
|
100
|
+
model.fit(x, y=y)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Use ranking losses and metrics
|
|
104
|
+
|
|
105
|
+
If your task is to rank items in a list, you can make use of the ranking losses
|
|
106
|
+
and metrics which KerasRS provides. Below, we use the pairwise hinge loss and
|
|
107
|
+
track the nDCG metric:
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
model.compile(
|
|
111
|
+
loss=keras_rs.losses.PairwiseHingeLoss(),
|
|
112
|
+
metrics=[keras_rs.metrics.NDCG()],
|
|
113
|
+
optimizer=keras.optimizers.Adam(learning_rate=3e-4),
|
|
114
|
+
)
|
|
115
|
+
```
|
|
116
|
+
|
|
37
117
|
## Installation
|
|
38
118
|
|
|
39
119
|
Keras Recommenders is available on PyPI as `keras-rs`:
|
|
@@ -94,7 +174,7 @@ Here is the BibTeX entry:
|
|
|
94
174
|
```bibtex
|
|
95
175
|
@misc{kerasrecommenders2024,
|
|
96
176
|
title={KerasRecommenders},
|
|
97
|
-
author={Hertschuh, Fabien and Chollet, Fran\c{c}ois and others},
|
|
177
|
+
author={Hertschuh, Fabien and Chollet, Fran\c{c}ois and Sharma, Abheesht and others},
|
|
98
178
|
year={2024},
|
|
99
179
|
howpublished={\url{https://github.com/keras-team/keras-rs}},
|
|
100
180
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
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=WyyrxhWrayt-Hm6gSmZ5CPZifbPx0egDIothGi0Dpjk,646
|
|
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=E7EoQd2LJhzxrYtMh6GLQgtbm2hzCwUNr9AcZw0MOgc,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=RkXZ6notj3Cq6ryR9w30Wb8UlaWjLcUK2Os9ZUQvuhY,45568
|
|
12
|
+
keras_rs/src/layers/embedding/distributed_embedding.py,sha256=94jxUHoGK3Gs9yfV0KxFTuqPo7XFnhgCNlO2FEeiSgM,1072
|
|
13
|
+
keras_rs/src/layers/embedding/distributed_embedding_config.py,sha256=L41x6W1xcXI-3m94nOh_OsHn6OYpoynakKJvNboJnvE,5762
|
|
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/checkpoint_utils.py,sha256=wZ4I5WZVNg5WnrD2j7nhAXgLzDc7xMrUEkSAOx5Sz5c,3495
|
|
17
|
+
keras_rs/src/layers/embedding/jax/config_conversion.py,sha256=Di1UzRwLgGHd7RuWYJMj2mCOr1u9MseFEWaYKnwD9Bs,16742
|
|
18
|
+
keras_rs/src/layers/embedding/jax/distributed_embedding.py,sha256=lY7cwJgVUDpYUH-n7AcA1qlnSzhtckNtD3UqtpAYXz8,32267
|
|
19
|
+
keras_rs/src/layers/embedding/jax/embedding_lookup.py,sha256=a90tWTbU9tkFdESG3xir9PTtcvb1cmYR8vl5dDK9PSY,8703
|
|
20
|
+
keras_rs/src/layers/embedding/jax/embedding_utils.py,sha256=5rQGli4Qflg0BU2-j_-4xbBxSqopqbtjkY2KKYWq64Y,7329
|
|
21
|
+
keras_rs/src/layers/embedding/tensorflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
+
keras_rs/src/layers/embedding/tensorflow/config_conversion.py,sha256=HpuDthRQQ3X0EO8dW6OAdcgTODkujZlx_swgreVwXyk,13220
|
|
23
|
+
keras_rs/src/layers/embedding/tensorflow/distributed_embedding.py,sha256=TBPYV8gP3ZnAFEwtxmWr_Rp3s-Cj0RrKzF6UOALJ4B0,17817
|
|
24
|
+
keras_rs/src/layers/feature_interaction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
+
keras_rs/src/layers/feature_interaction/dot_interaction.py,sha256=Rs8xIHXNWQNiwjp_xzvQRmTSV1AyhJjDgVc3K5pTmrQ,8530
|
|
26
|
+
keras_rs/src/layers/feature_interaction/feature_cross.py,sha256=Wq_eQvO0WTRlep69QbKi8TwY8bnFoF9vreP_j6ZHNFE,8666
|
|
27
|
+
keras_rs/src/layers/retrieval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
+
keras_rs/src/layers/retrieval/brute_force_retrieval.py,sha256=WVH9nHj6mGcK5DAOzYBGfUztPtGtMX4RKLac6GV1vLI,5644
|
|
29
|
+
keras_rs/src/layers/retrieval/hard_negative_mining.py,sha256=n5UftRcuuR7Lh75vOdFdqatpsYqJDHCsraNtAjeWvoM,3575
|
|
30
|
+
keras_rs/src/layers/retrieval/remove_accidental_hits.py,sha256=WKoIhUSc6SvbgLXcSqNvFUnkuyXfxWwsC7nAgYbON_U,3773
|
|
31
|
+
keras_rs/src/layers/retrieval/retrieval.py,sha256=SFxMdooUhZy854SLZbpoyZR1Md4bHnpf7P077oVjjtU,4162
|
|
32
|
+
keras_rs/src/layers/retrieval/sampling_probability_correction.py,sha256=3zD6LInxhyIvyujMleGqiuoPKsna2oaTN6JU6xMnW_M,1977
|
|
33
|
+
keras_rs/src/losses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
|
+
keras_rs/src/losses/list_mle_loss.py,sha256=NKRV_ZJUXFI1qG9_ugqxRyafRHreuUIokA7mbnsogBo,7433
|
|
35
|
+
keras_rs/src/losses/pairwise_hinge_loss.py,sha256=tONOJpcwCw1mybwvyx8dAy5t6dDmlIn00enzWfQLXpQ,3049
|
|
36
|
+
keras_rs/src/losses/pairwise_logistic_loss.py,sha256=40PFdCHDM7CLunT_PE3RbgxROVImw13dgVL3o3nzeNg,3473
|
|
37
|
+
keras_rs/src/losses/pairwise_loss.py,sha256=Oydk8e7AGU0Mc9yvm6ccr_XDDfUe8EZlS4JJgyxKUm4,6197
|
|
38
|
+
keras_rs/src/losses/pairwise_loss_utils.py,sha256=xvdGvdKNkvGvIaWYEQziWTFNa5EJz7rdkVGgrsnDHUk,1246
|
|
39
|
+
keras_rs/src/losses/pairwise_mean_squared_error.py,sha256=sW-S3fUFtLV_cf8Tw9Wluzoe9t7lmXzSIAj6MXOpL2M,4823
|
|
40
|
+
keras_rs/src/losses/pairwise_soft_zero_one_loss.py,sha256=YddVtJS8tKEeb0YrqGzEsr-6IDxH4uRjFrYkZDMWpkk,3492
|
|
41
|
+
keras_rs/src/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
|
+
keras_rs/src/metrics/dcg.py,sha256=rUtWe8VwZ8unXIhPu7fjTiErpK6-IOtcaiuikjtY1VE,5823
|
|
43
|
+
keras_rs/src/metrics/mean_average_precision.py,sha256=yUub4jGnqwTmxf694Z2ymRjMG_vO2HdyqqvDbcEhdSQ,4632
|
|
44
|
+
keras_rs/src/metrics/mean_reciprocal_rank.py,sha256=vr3ZZjpGYy2N-N7stcIm5elfHe9A4W8uY4HADP8icMw,4046
|
|
45
|
+
keras_rs/src/metrics/ndcg.py,sha256=ZBaKqV57K7jlto6ZVMxFNNRLdhzbLhdAR8TgDexjSjg,6922
|
|
46
|
+
keras_rs/src/metrics/precision_at_k.py,sha256=Dj5R-rT_Yd5hAsk4f-BlNMujfgIdPXnFVGOw9u7BIZQ,4038
|
|
47
|
+
keras_rs/src/metrics/ranking_metric.py,sha256=Lcl-Tt6HlI0f2wQpvAJ2M4mm5qCTZm-IgnLjjSEeNXE,10655
|
|
48
|
+
keras_rs/src/metrics/ranking_metrics_utils.py,sha256=rtCy_8T5CbQ4UKr3ykFRaM_wZrQ-IqEJa_VnVMTH8nQ,9644
|
|
49
|
+
keras_rs/src/metrics/recall_at_k.py,sha256=ssnQJC42KLN28cGrmzM-qR4M4iPqiQzWM2MfwYMq4ZE,3701
|
|
50
|
+
keras_rs/src/metrics/utils.py,sha256=fGTo8j0ykVE5Y3yQCS2orSFcHY20Uxt0NazyPsybUsw,2471
|
|
51
|
+
keras_rs/src/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
|
+
keras_rs/src/utils/doc_string_utils.py,sha256=CmqomepmaYcvpACpXEXkrJb8DMnvIgmYK-lJ53lYarY,1675
|
|
53
|
+
keras_rs/src/utils/keras_utils.py,sha256=dc-NFzs3a-qmRw0vBDiMslPLfrm9yymGduLWesXPhuY,2123
|
|
54
|
+
keras_rs/src/utils/tpu_test_utils.py,sha256=mQVBrI-CCBbXwQxBq1yDKGMwYhm4g4k3_AaSy_sCs0U,4028
|
|
55
|
+
keras_rs_nightly-0.3.1.dev202512130338.dist-info/METADATA,sha256=keexSmADAe0Wq2qD1bSC-g8JlUV17XrLU-zldDZ3ozM,5324
|
|
56
|
+
keras_rs_nightly-0.3.1.dev202512130338.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
57
|
+
keras_rs_nightly-0.3.1.dev202512130338.dist-info/top_level.txt,sha256=pWs8X78Z0cn6lfcIb9VYOW5UeJ-TpoaO9dByzo7_FFo,9
|
|
58
|
+
keras_rs_nightly-0.3.1.dev202512130338.dist-info/RECORD,,
|
keras_rs/api/__init__.py
DELETED
keras_rs/api/layers/__init__.py
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"""DO NOT EDIT.
|
|
2
|
-
|
|
3
|
-
This file was autogenerated. Do not edit it by hand,
|
|
4
|
-
since your modifications would be overwritten.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from keras_rs.src.layers.modeling.dot_interaction import DotInteraction
|
|
8
|
-
from keras_rs.src.layers.modeling.feature_cross import FeatureCross
|
|
9
|
-
from keras_rs.src.layers.retrieval.brute_force_retrieval import (
|
|
10
|
-
BruteForceRetrieval,
|
|
11
|
-
)
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
keras_rs/__init__.py,sha256=X3VNKb_6VDEs5GqcbEc_l8mAsefWb5UgSu8krnQdFcM,794
|
|
2
|
-
keras_rs/api/__init__.py,sha256=BU34SgAwrjZh49ppXGxJPxreTOYW0C7vy3_x8nmvHUk,240
|
|
3
|
-
keras_rs/api/layers/__init__.py,sha256=moxzBqnCCQsZiIgEUXn9mdtSALFTU5e0c4Ct8c0bWhg,355
|
|
4
|
-
keras_rs/src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
keras_rs/src/api_export.py,sha256=RsmG-DvO-cdFeAF9W6LRzms0kvtm-Yp9BAA_d-952zI,510
|
|
6
|
-
keras_rs/src/types.py,sha256=UyOdgjqrqg_b58opnY8n6gTiDHKVR8z_bmEruehERBk,514
|
|
7
|
-
keras_rs/src/version.py,sha256=E-6oQfar5RwMDP5djal_81SRlf7inSYWDXk2dTmmAu4,222
|
|
8
|
-
keras_rs/src/layers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
-
keras_rs/src/layers/modeling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
keras_rs/src/layers/modeling/dot_interaction.py,sha256=kzxs9IUI-llDfgqy-JUr-zBez9pA7A3zIG-O0lGxwWY,5097
|
|
11
|
-
keras_rs/src/layers/modeling/feature_cross.py,sha256=nd2SBIe1gXC-vL_BeF3vrq8XqTAb6iLxhQGmtyUl3EM,8105
|
|
12
|
-
keras_rs/src/layers/retrieval/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
-
keras_rs/src/layers/retrieval/brute_force_retrieval.py,sha256=mohILOt6PC6jHBztaowDbj3QBnSetuvkq55FmE39PlY,7321
|
|
14
|
-
keras_rs/src/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
-
keras_rs/src/utils/keras_utils.py,sha256=TUEpKHWDDBmzXJ0g0cTWYwQNjsHkPQ5HMvzNshLDOSU,897
|
|
16
|
-
keras_rs_nightly-0.0.1.dev2025021903.dist-info/METADATA,sha256=MurKLV3gYnjxT2TNV9R3wYuRPfzlda5783DuBLd1S2E,3501
|
|
17
|
-
keras_rs_nightly-0.0.1.dev2025021903.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
18
|
-
keras_rs_nightly-0.0.1.dev2025021903.dist-info/top_level.txt,sha256=pWs8X78Z0cn6lfcIb9VYOW5UeJ-TpoaO9dByzo7_FFo,9
|
|
19
|
-
keras_rs_nightly-0.0.1.dev2025021903.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|