Как создать встраивание для столбца, являющегося списком категориальных значений - PullRequest
2 голосов
/ 12 мая 2019

У меня возникли проблемы с решением, как создать вложения для категориальной функции для моей модели DNN.Функция состоит из нефиксированного набора тегов.

Функция выглядит так:

column = [['Adventure','Animation','Comedy'],
          ['Adventure','Comedy'],
          ['Adventure','Children','Comedy']

Я хотел бы сделать это с tensorflow, поэтому я знаю tf.feature_column модуль должен работать, я просто не знаю, какую версию использовать.

Спасибо!

1 Ответ

1 голос
/ 12 мая 2019

Сначала вам нужно заполнить ваши объекты на ту же длину.

import itertools
import numpy as np

column = np.array(list(itertools.zip_longest(*column, fillvalue='UNK'))).T
print(column)

[['Adventure' 'Animation' 'Comedy']
 ['Adventure' 'Comedy' 'UNK']
 ['Adventure' 'Children' 'Comedy']]

Затем вы можете использовать tf.feature_column.embedding_column для создания вложений для категориальной функции.Входы embedding_column должны быть CategoricalColumn, созданными любой из функций categorical_column_*.

# if you have big vocabulary list in files, you can use tf.feature_column.categorical_column_with_vocabulary_file
cat_fc = tf.feature_column.categorical_column_with_vocabulary_list(
    'cat_data', # identifying the input feature
    ['Adventure', 'Animation', 'Comedy', 'Children'], # vocabulary list
    dtype=tf.string,
    default_value=-1)

cat_column = tf.feature_column.embedding_column(
    categorical_column =cat_fc,
    dimension = 5,
    combiner='mean')

categorical_column_with_vocabulary_list будет игнорировать 'UNK', поскольку в списке словаря нет 'UNK'.dimension указание размерности встраивания и combiner указание, как уменьшить, если в одной строке несколько записей со значением по умолчанию «1018».

Результат:

tensor = tf.feature_column.input_layer({'cat_data':column}, [cat_column])

with tf.Session() as session:
    session.run(tf.global_variables_initializer())
    session.run(tf.tables_initializer())
    print(session.run(tensor))

[[-0.694761   -0.0711766   0.05720187  0.01770079 -0.09884425]
 [-0.8362482   0.11640486 -0.01767573 -0.00548441 -0.05738768]
 [-0.71162754 -0.03012567  0.15568805  0.00752804 -0.1422816 ]]
...