Использование функции Tensorflow feature_column в модели Keras

Как можно использовать функцию Tensorflow feature_column в сочетании с моделью Keras?

Например, для оценки Tensorflow мы можем использовать столбец внедрения из Tensorflow Hub:

embedded_text_feature_column = hub.text_embedding_column(
    key="sentence", 
    module_spec="https://tfhub.dev/google/nnlm-en-dim128/1")

estimator = tf.estimator.DNNClassifier(
hidden_units=[100],
feature_columns=[embedded_text_feature_column],
n_classes=2,
optimizer=tf.train.AdamOptimizer(learning_rate=0.001))

Тем не менее, я хотел бы использовать TF-концентратор text_embedding_column качестве входных данных для модели text_embedding_column. Например

net = tf.keras.layers.Input(...) # use embedding column here
net = tf.keras.layers.Flatten()
net = Dense(100, activation='relu')(net)
net = Dense(2)(net)

Это возможно?

Ответы

Ответ 1

Кажется, ответ таков: вы не используете функциональные столбцы. Keras поставляется с собственным набором функций предварительной обработки изображений и текста, так что вы можете использовать их.

Таким образом, в основном tf.feature_columns зарезервированы для API высокого уровня. Затем функции tf.keras.preprocessing() используются с моделями tf.keras.

Вот ссылка на раздел о предварительной обработке данных в документации keras. https://keras.io/preprocessing/text/

Вот еще один пост Stackoverflow, в котором есть пример такого подхода.

Добавить предварительную обработку Tensorflow к существующей модели Keras (для использования в обслуживании Tensorflow)

Ответ 2

Функциональный API Keras является жизнеспособным способом сделать это, но если вы хотите использовать feature_columns, это руководство покажет вам, как:

https://www.tensorflow.org/beta/tutorials/keras/feature_columns

По сути, именно этот слой DenseFeatures выполняет свою работу:

feature_layer = tf.keras.layers.DenseFeatures(feature_columns)

model = tf.keras.Sequential([
  feature_layer,
  layers.Dense(128, activation='relu'),
  layers.Dense(128, activation='relu'),
  layers.Dense(1, activation='sigmoid')
])