2016-08-06 7 views
4

Я иду через учебник по методу тензорного потока tensorflow. Я хотел бы найти описание в следующей строке:tf.contrib.layers.embedding_column от тензорного потока

tf.contrib.layers.embedding_column 

Интересно, если он использует word2vec или что-нибудь еще, или, может быть, я имею в виду совершенно неправильном направлении. Я попытался щелкнуть по GibHub, но ничего не нашел. Я предполагаю, что поиск GitHub не будет легким, поскольку python может ссылаться на некоторые библиотеки C++. Может ли кто-нибудь указать мне в правильном направлении?

ответ

5

Мне тоже интересно об этом. Мне не совсем ясно, что они делают, но это то, что я нашел.

В paper on wide and deep learning они описывают векторы внедрения как случайно инициализированные, а затем корректируются во время обучения, чтобы минимизировать ошибку.

Обычно, когда вы делаете вложения, вы произвольно произвольное векторное представление данных (таких как однострунные векторы), а затем умножаете его на матрицу, представляющую вложение. Эта матрица может быть найдена с помощью PCA или во время обучения чем-то вроде t-SNE или word2vec.

Фактический код для embedding_column: here, и он реализован как класс под названием _EmbeddingColumn, который является подклассом _FeatureColumn. Он хранит матрицу внедрения внутри атрибута sparse_id_column. Затем метод to_dnn_input_layer применяет эту матрицу встраивания для создания вложений для следующего слоя.

def to_dnn_input_layer(self, 
         input_tensor, 
         weight_collections=None, 
         trainable=True): 
    output, embedding_weights = _create_embedding_lookup(
     input_tensor=self.sparse_id_column.id_tensor(input_tensor), 
     weight_tensor=self.sparse_id_column.weight_tensor(input_tensor), 
     vocab_size=self.length, 
     dimension=self.dimension, 
     weight_collections=_add_variable_collection(weight_collections), 
     initializer=self.initializer, 
     combiner=self.combiner, 
     trainable=trainable) 

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

1

У меня было такое же сомнение в отношении вложений.

Здесь главное:

Способность добавления слоя вложения наряду с традицией широких линейных моделей позволяет точные прогнозы за счет снижения разреженный размерности до низкой размерности.

enter image description here

Вот good post об этом!

И вот simple example, объединяющий слои внедрения. Используя данные Titanic Kaggle, чтобы предсказать, выживет ли пассажир на основе определенных атрибутов, таких как «Имя», «Пол», какой билет у них был, тариф, который они заплатили за каюту, в которой они останавливались, и т. Д.

Смежные вопросы