Tensorflow/Keras, как преобразовать tf.feature_column в входные тензоры?

Вопрос или проблема

У меня есть следующий код для усреднения встраиваний для списка идентификаторов элементов.
(Встраивание обучено на 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. Подготовка входных данных

  1. Создание Input Layers:
    Для каждого типа данных, который вы планируете использовать в вашем модели, создайте соответствующий Input слой. У вас уже есть слои review_meta_id_input и priors_input. Теперь нам нужно создать слой для ваших feature_columns.

  2. Создание Feature Layer:
    В Keras предполагается использование tf.keras.layers.DenseFeatures для преобразования feature columns в тензоры. Вот как это можно реализовать:

    import tensorflow as tf
    
    # Предполагаем, что feature_columns уже определены
    feature_layer = tf.keras.layers.DenseFeatures(feature_columns)
  3. Объединение всех входных данных:
    Объявите список входных данных, в который будут входить как ваши заранее определенные Input слои, так и feature_layer.

    inputs = [review_meta_id_input, priors_input]
    # Здесь мы предполагаем, что feature_layer принимает различные входные данные

    Однако, чтобы объединить feature_layer с вашими другими входами, вам нужно будет создать какой-то словарь, который связывает признаки с входными данными для DenseFeatures.

  4. Создание словаря 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 для категоризации. Это обеспечит гибкость в обработке и подготовке данных к обучению вашей модели.

Оцените материал
Добавить комментарий

Капча загружается...