Понимание модели внедрения Tensorflow RecommendersPython

Программы на Python
Ответить
Гость
 Понимание модели внедрения Tensorflow Recommenders

Сообщение Гость »


Я пытаюсь понять, как изменить код из руководства по рекомендациям Tensorflow. Специально хотел понять, как изменить ссылки на встраивание переменных в функцию вызова модели фильма

Модель фильма

класс MovieModel(tf.keras.Model): защита __init__(сам): супер().__init__() max_tokens = 10_000 self.title_embedding = tf.keras.Sequential([ tf.keras.layers.StringLookup( словарь = unique_movie_titles, Mask_token = Нет), tf.keras.layers.Embedding(len(unique_movie_titles) + 1, 32) ]) self.title_vectorizer = tf.keras.layers.TextVectorization( max_tokens=max_tokens) self.title_text_embedding = tf.keras.Sequential([ self.title_vectorizer, tf.keras.layers.Embedding(max_tokens, 32, Mask_zero=True), tf.keras.layers.GlobalAveragePooling1D(), ]) self.title_vectorizer.adapt(фильмы) def call(self, title): вернуть tf.concat([ self.title_embedding(заголовки), self.title_text_embedding(заголовки), ], ось=1) Если я изменюсь:

def call(self, titles): вернуть tf.concat([ self.title_embedding(заголовки), self.title_text_embedding(заголовки), ], ось=1) кому:

def call(self, inputs): вернуть tf.concat([ self.title_embedding(inputs["movie_title"]), self.title_text_embedding(inputs["movie_title"]), ], ось=1) Я получаю сообщение об ошибке:

TypeError: действительными индексами являются только целые числа, срезы (`:`), многоточие (`...`), tf.newaxis (`None`) и скалярные тензоры tf.int32/tf.int64, получено 'название фильма' Получены аргументы вызова: • inputs=tf.Tensor(shape=(None,), dtype=string) Когда я запускаю объединенную модель пользователя и фильма:

класс MovielensModel(tfrs.models.Model): def __init__(self, use_timestamps): супер().__init__() self.query_model = tf.keras.Sequential([ UserModel (use_timestamps), tf.keras.layers.Dense(32) ]) self.candidate_model = tf.keras.Sequential([ КиноМодель(), tf.keras.layers.Dense(32) ]) self.task = tfrs.tasks.Извлечение( metrics=tfrs.metrics.FactorizedTopK( кандидаты=movies.batch(128).map(self.candidate_model), ), ) def Compute_loss (self, Features, Training = False): # Мы передаем в модель запроса только идентификатор пользователя и метку времени. Этот # заключается в том, чтобы гарантировать, что обучающие входы будут иметь те же ключи, что и # входные данные запроса. В противном случае несоответствие во входной структуре приведет к # ошибка при загрузке модели запроса после ее сохранения. query_embeddings = self.query_model({ "user_id": функции["user_id"], "метка времени": функции["метка времени"], }) movie_embeddings = self.candidate_model({"movie_title":features["movie_title"]}) вернуть self.task(query_embeddings, movie_embeddings) Я предполагал, что изменение входной переменной в функции вызова на что-то более конкретное не изменит выходные данные, но по какой-то причине это не так. Я отразил его, чтобы он имел структуру, аналогичную UserModel, и не понимаю, почему он не работает так же

Модель пользователя:
класс UserModel(tf.keras.Model): def __init__(self, use_timestamps): супер().__init__() self._use_timestamps = use_timestamps self.user_embedding = tf.keras.Sequential([ tf.keras.layers.StringLookup( словарь = unique_user_ids, маска_токен = нет), tf.keras.layers.Embedding(len(unique_user_ids) + 1, 32), ]) если использовать_timestamps: self.timestamp_embedding = tf.keras.Sequential([ tf.keras.layers.Discretization(timestamp_buckets.tolist()), tf.keras.layers.Embedding(len(timestamp_buckets) + 1, 32), ]) self.normalized_timestamp = tf.keras.layers.Normalization( ось = нет ) self.normalized_timestamp.adapt(временные метки) def call(self, inputs): если не self._use_timestamps: return self.user_embedding(inputs["user_id"]) вернуть tf.concat([ self.user_embedding(inputs["user_id"]), self.timestamp_embedding(inputs["timestamp"]), tf.reshape(self.normalized_timestamp(inputs["timestamp"]), (-1, 1)), ], ось=1)
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»