tensorflow / tensorflow/recommenders
TensorFlow nightly: ValueError: Cannot convert '('c', 'o', 'u', 'n', 't', 'e', 'r')' to a shape. Found invalid entry 'c' of type '<class 'str'>'
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 2k
- Forks
- 300
- PR merge metrics
- No merged PRs in 30d
Description
I follow this guide https://www.tensorflow.org/recommenders and https://colab.research.google.com/github/tensorflow/recommenders/blob/main/docs/examples/quickstart.ipynb#scrollTo=4FyfuZX-gTKS
My environment: Windows 11 x64, PyCharm 2024.3.5 (Professional Edition), Jupyter notebook inside PyCharm, TensorFlow nightly, CUDA 12.8 .
Microsoft Windows [Version 10.0.26100.3476]
(c) Microsoft Corporation. All rights reserved.
C:\Users\ADMIN>nvidia-smi
Thu Apr 3 21:03:07 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 572.83 Driver Version: 572.83 CUDA Version: 12.8 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Driver-Model | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 5090 WDDM | 00000000:01:00.0 On | N/A |
| 0% 36C P8 27W / 575W | 1471MiB / 32607MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 2584 C+G ...Chrome\Application\chrome.exe N/A |
| 0 N/A N/A 3208 C+G ...rm 2024.3.5\bin\pycharm64.exe N/A |
| 0 N/A N/A 4412 C+G ...4__8wekyb3d8bbwe\ms-teams.exe N/A |
| 0 N/A N/A 6588 C+G ...xyewy\ShellExperienceHost.exe N/A |
| 0 N/A N/A 6708 C+G ...adeonsoftware\AMDRSSrcExt.exe N/A |
| 0 N/A N/A 7548 C+G ...crosoft OneDrive\OneDrive.exe N/A |
| 0 N/A N/A 9988 C+G ...IA app\CEF\NVIDIA Overlay.exe N/A |
| 0 N/A N/A 10140 C+G ....0.3124.93\msedgewebview2.exe N/A |
| 0 N/A N/A 10576 C+G ...Chrome\Application\chrome.exe N/A |
| 0 N/A N/A 14612 C+G ....0.3124.93\msedgewebview2.exe N/A |
| 0 N/A N/A 17040 C+G ...ntrolPanel\SystemSettings.exe N/A |
| 0 N/A N/A 20456 C+G ....0.3124.93\msedgewebview2.exe N/A |
| 0 N/A N/A 23296 C+G ...8bbwe\PhoneExperienceHost.exe N/A |
| 0 N/A N/A 25528 C+G ...8bbwe\Microsoft.CmdPal.UI.exe N/A |
| 0 N/A N/A 26808 C+G ...indows\System32\ShellHost.exe N/A |
| 0 N/A N/A 28164 C+G C:\Windows\explorer.exe N/A |
| 0 N/A N/A 29748 C+G ...IA app\CEF\NVIDIA Overlay.exe N/A |
| 0 N/A N/A 31764 C+G ...s\PowerToys.PowerLauncher.exe N/A |
| 0 N/A N/A 32252 C+G ...em32\ApplicationFrameHost.exe N/A |
| 0 N/A N/A 36836 C+G ...y\StartMenuExperienceHost.exe N/A |
| 0 N/A N/A 37448 C+G ...yb3d8bbwe\WindowsTerminal.exe N/A |
| 0 N/A N/A 37464 C+G ..._cw5n1h2txyewy\SearchHost.exe N/A |
| 0 N/A N/A 38692 C+G ...4__8wekyb3d8bbwe\ms-teams.exe N/A |
+-----------------------------------------------------------------------------------------+
C:\Users\ADMIN>
I have
!pip install --upgrade tensorflow_hub
import tensorflow_hub as hub
model = hub.KerasLayer("https://tfhub.dev/google/nnlm-en-dim128/2")
embeddings = model(["The rain in Spain.", "falls", "mainly", "In the plain!"])
print(embeddings.shape)
!pip install -q tensorflow-recommenders
!pip install -q --upgrade tensorflow-datasets
!pip install tensorflow-recommenders
!pip install --upgrade tensorflow-datasets
from typing import Dict, Text
import numpy as np
import tensorflow as tf
import tensorflow_datasets as tfds
import tensorflow_recommenders as tfrs
ratings = tfds.load('movielens/100k-ratings', split="train")
movies = tfds.load('movielens/100k-movies', split="train")
ratings = ratings.map(lambda x: {"movie_title": x["movie_title"], "user_id": x["user_id"]})
movies = movies.map(lambda x: x["movie_title"])
user_ids_vocabulary = tf.keras.layers.StringLookup(mask_token=None)
user_ids_vocabulary.adapt(ratings.map(lambda x: x["user_id"]))
movie_titles_vocabulary = tf.keras.layers.StringLookup(mask_token=None)
movie_titles_vocabulary.adapt(movies)
class MovieLensModel(tfrs.Model):
def __init__(self, user_model: tf.keras.Model, movie_model: tf.keras.Model, task: tfrs.tasks.Retrieval):
super().__init__()
self.user_model = user_model
self.movie_model = movie_model
self.task = task
def compute_loss(self, features: Dict[Text, tf.Tensor], training=False) -> tf.Tensor:
user_embeddings = self.user_model(features["user_id"])
movie_embeddings = self.movie_model(features["movie_title"])
return self.task(user_embeddings, movie_embeddings)
user_model = tf.keras.Sequential([user_ids_vocabulary, tf.keras.layers.Embedding(user_ids_vocabulary.vocabulary_size(), 64)])
movie_model = tf.keras.Sequential([movie_titles_vocabulary, tf.keras.layers.Embedding(movie_titles_vocabulary.vocabulary_size(), 64)])
!pip show tensorflow
import tensorflow as tf
print(tf.__version__)
print(user_ids_vocabulary.get_vocabulary())
print(movie_titles_vocabulary.get_vocabulary())
task = tfrs.tasks.Retrieval(metrics=tfrs.metrics.FactorizedTopK(movies.batch(128).map(movie_model)))
error
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[1], line 55
52 print(user_ids_vocabulary.get_vocabulary())
53 print(movie_titles_vocabulary.get_vocabulary())
---> 55 task = tfrs.tasks.Retrieval(metrics=tfrs.metrics.FactorizedTopK(movies.batch(128).map(movie_model)))
File ~\PyCharmMiscProject\.venv\Lib\site-packages\tensorflow_recommenders\metrics\factorized_top_k.py:79, in FactorizedTopK.__init__(self, candidates, ks, name)
75 super().__init__(name=name)
77 if isinstance(candidates, tf.data.Dataset):
78 candidates = (
---> 79 layers.factorized_top_k.Streaming(k=max(ks))
80 .index_from_dataset(candidates)
81 )
83 self._ks = ks
84 self._candidates = candidates
File ~\PyCharmMiscProject\.venv\Lib\site-packages\tensorflow_recommenders\layers\factorized_top_k.py:376, in Streaming.__init__(self, query_model, k, handle_incomplete_batches, num_parallel_calls, sorted_order)
373 self._num_parallel_calls = num_parallel_calls
374 self._sorted = sorted_order
--> 376 self._counter = self.add_weight("counter", dtype=tf.int32, trainable=False)
File ~\PyCharmMiscProject\.venv\Lib\site-packages\keras\src\layers\layer.py:547, in Layer.add_weight(self, shape, initializer, dtype, trainable, autocast, regularizer, constraint, aggregation, name)
545 initializer = initializers.get(initializer)
546 with backend.name_scope(self.name, caller=self):
--> 547 variable = backend.Variable(
548 initializer=initializer,
549 shape=shape,
550 dtype=dtype,
551 trainable=trainable,
552 autocast=autocast,
553 aggregation=aggregation,
554 name=name,
555 )
556 # Will be added to layer.losses
557 variable.regularizer = regularizers.get(regularizer)
File ~\PyCharmMiscProject\.venv\Lib\site-packages\keras\src\backend\common\variables.py:185, in Variable.__init__(self, initializer, shape, dtype, trainable, autocast, aggregation, name)
183 else:
184 if callable(initializer):
--> 185 self._shape = self._validate_shape(shape)
186 self._initialize_with_initializer(initializer)
187 else:
File ~\PyCharmMiscProject\.venv\Lib\site-packages\keras\src\backend\common\variables.py:207, in Variable._validate_shape(self, shape)
206 def _validate_shape(self, shape):
--> 207 shape = standardize_shape(shape)
208 if None in shape:
209 raise ValueError(
210 "Shapes used to initialize variables must be "
211 "fully-defined (no `None` dimensions). Received: "
212 f"shape={shape} for variable path='{self.path}'"
213 )
File ~\PyCharmMiscProject\.venv\Lib\site-packages\keras\src\backend\common\variables.py:582, in standardize_shape(shape)
580 continue
581 if not is_int_dtype(type(e)):
--> 582 raise ValueError(
583 f"Cannot convert '{shape}' to a shape. "
584 f"Found invalid entry '{e}' of type '{type(e)}'. "
585 )
586 if e < 0:
587 raise ValueError(
588 f"Cannot convert '{shape}' to a shape. "
589 "Negative dimensions are not allowed."
590 )
ValueError: Cannot convert '('c', 'o', 'u', 'n', 't', 'e', 'r')' to a shape. Found invalid entry 'c' of type '<class 'str'>'.
My Jupyter notebook https://gist.github.com/donhuvy/9447a2aea4cd182007198f28d4b7b413 . How to fix it?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the notebook from the linked gist with the TensorFlow nightly and TensorFlow Recommenders versions shown in the report. Start at tensorflow_recommenders/metrics/factorized_top_k.py and layers/factorized_top_k.py, especially the Retrieval and FactorizedTopK entry points around Streaming.add_weight. Done means the reported retrieval setup runs without the shape-conversion ValueError.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- jupyter-notebook, python, tensorflow
- Domain
- machine-learning
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100
