Вопрос или проблема
У меня есть следующий код для усреднения встраиваний для списка идентификаторов элементов.
(Встраивание обучено на review_meta_id_input и используется для поиска priors_input и получения среднего встраивания)
review_meta_id_input = tf.keras.layers.Input(shape=(1,), dtype="int32", name="review_meta_id")
priors_input = tf.keras.layers.Input(shape=(None,), dtype="int32", name="priors") # массив идентификаторов
item_embedding_layer = tf.keras.layers.Embedding(
input_dim=100, # максимальное количество
output_dim=self.item_embedding_size,
name="item")
review_meta_id_embedding = item_embedding_layer(review_meta_id_input)
selected = tf.nn.embedding_lookup(review_meta_id_embedding, priors_input)
non_zero_count = tf.cast(tf.math.count_nonzero(priors_input, axis=1), tf.float32)
embedding_sum = tf.reduce_sum(selected, axis=1)
item_average = tf.math.divide(embedding_sum, non_zero_count)
У меня также есть некоторые столбцы признаков, такие как…
(Я просто подумал, что feature_column смотрится круто, но не так много документов, чтобы изучать…)
kid_youngest_month = feature_column.numeric_column("kid_youngest_month")
kid_age_youngest_buckets = feature_column.bucketized_column(kid_youngest_month, boundaries=[12, 24, 36, 72, 96])
Я хотел бы определить [review_meta_id_iput, priors_input, (тензоры из feature_columns)]
как вход для модели keras.
Что-то вроде:
inputs = [review_meta_id_input, priors_input] + feature_layer
model = tf.keras.models.Model(inputs=inputs, outputs=o)
Чтобы получить тензоры из столбцов признаков, ближайший вариант, который у меня сейчас есть, это
fc_to_tensor = {fc: input_layer(features, [fc]) for fc in feature_columns}
из https://github.com/tensorflow/tensorflow/issues/17170
Однако я не уверен, что такое features
в коде.
На https://www.tensorflow.org/api_docs/python/tf/feature_column/input_layer также нет четкого примера.
Как мне следует построить переменную features
для fc_to_tensor
?
Или есть ли способ использовать keras.layers.Input
и feature_column
одновременно?
Или есть альтернатива tf.feature_column для выполнения бинирования, как указано выше? Тогда я просто отложу feature_column на сейчас;
Я думаю, что мой ответ там https://stackoverflow.com/questions/56693937/tensorflow-how-to-convert-feature-column-to-vector может помочь вам.
Смотрите на
feature_layer = tf.keras.layers.DenseFeatures(feature_columns)
Ответ или решение
Для интеграции tf.feature_column
в модель Keras и преобразования этих колонок в тензоры входных данных, необходимо учитывать несколько ключевых аспектов. Ранее приведенный код предоставляет хороший старт для построения модели, но важно правильно подготовить входные данные для колонок признаков.
I. Введение в работу с feature columns
Feature columns в TensorFlow позволяют нам преобразовывать данные в формат, удобный для обучения модели. Они могут работать с различными типами данных, такими как числовые признаки, категории и текст. Использование feature columns может помочь в удобном и эффективном управлении данными, а также в их подготовке к последующему обучению в Keras.
II. Подготовка входных данных
-
Создание Input Layers:
Для каждого типа данных, который вы планируете использовать в вашем модели, создайте соответствующийInput
слой. У вас уже есть слоиreview_meta_id_input
иpriors_input
. Теперь нам нужно создать слой для вашихfeature_columns
. -
Создание Feature Layer:
В Keras предполагается использованиеtf.keras.layers.DenseFeatures
для преобразования feature columns в тензоры. Вот как это можно реализовать:import tensorflow as tf # Предполагаем, что feature_columns уже определены feature_layer = tf.keras.layers.DenseFeatures(feature_columns)
-
Объединение всех входных данных:
Объявите список входных данных, в который будут входить как ваши заранее определенныеInput
слои, так иfeature_layer
.inputs = [review_meta_id_input, priors_input] # Здесь мы предполагаем, что feature_layer принимает различные входные данные
Однако, чтобы объединить
feature_layer
с вашими другими входами, вам нужно будет создать какой-то словарь, который связывает признаки с входными данными дляDenseFeatures
. -
Создание словаря features:
Для этого создайте словарь, который будет представлять ваши входные данные:# features - это словарь, который должен содержать имена ваших признаков и соответствующие тензоры features = { 'kid_youngest_month': kid_youngest_month_tensor, # Это тензор для kid_youngest_month # Добавьте любые другие входные данные по тому же принципу }
Важным является знание, что
kid_youngest_month_tensor
должен быть тензором, представляющий соответствующий параметр.
III. Полный пример
Для наглядности, вот полный код, показывающий, как объединить все компоненты:
import tensorflow as tf
# Определение Input слоев
review_meta_id_input = tf.keras.layers.Input(shape=(1,), dtype="int32", name="review_meta_id")
priors_input = tf.keras.layers.Input(shape=(None,), dtype="int32", name="priors")
# Определение feature_columns
kid_youngest_month = tf.feature_column.numeric_column("kid_youngest_month")
kid_age_youngest_buckets = tf.feature_column.bucketized_column(kid_youngest_month, boundaries=[12, 24, 36, 72, 96])
feature_columns = [kid_youngest_month, kid_age_youngest_buckets]
# Создание DenseFeatures слоя
feature_layer = tf.keras.layers.DenseFeatures(feature_columns)
# Объединение входов
inputs = [review_meta_id_input, priors_input]
features = { # Дополните это соответствующими тензорами
'kid_youngest_month': tf.keras.layers.Input(shape=(1,), name='kid_youngest_month'),
}
# Создание модели с объединенными входами
all_inputs = inputs + [features['kid_youngest_month']]
outputs = ... # Здесь укажите вашу логику для создания выходов модели
model = tf.keras.models.Model(inputs=all_inputs, outputs=outputs)
IV. Заключение
Integrating TensorFlow feature columns into a Keras model may initially seem challenging, but with structured approaches, you can efficiently fuse various data types into a cohesive training framework. Убедитесь, что вы правильно связали все тензоры с их соответствующими признаками и методами обработки данных. Если вы решите отказаться от feature_columns
, рассмотрите альтернативные способы ведения данных, такие как использование tf.keras.layers
для категоризации. Это обеспечит гибкость в обработке и подготовке данных к обучению вашей модели.