Несколько слоев встраивания для последовательной модели Keras - PullRequest
0 голосов
/ 12 июня 2018

Я использую Keras (бэкэнд тензор потока) и мне интересно, как добавить несколько слоев Embedding в последовательную модель Keras.

В частности, в моем наборе данных есть несколько столбцов, которые имеют категориальные значения, и я рассмотрелиспользуя горячее кодирование, но определили, что количество категориальных элементов исчисляется сотнями, что приводит к большому и слишком редкому набору столбцов.После поиска решений я обнаружил, что слой Keras 'Embedding, кажется, решает проблему очень элегантно.Тем не менее, большинство примеров (и документация Keras) иллюстрируют очень простую ситуацию с одним слоем Embedded.

К сожалению, я не знаю, как интегрировать несколько слоев Embedding в качестве входных данных в одну модель.

Мой код выглядит так, но он не работает, и я предполагаю, чтонесколько слоев внедрения действуют последовательно (первый слой внедрения является вторым и т. д.), а не являются несколькими входными источниками для модели:

model = Sequential()
model.add(Embedding(500, 64, input_length=10))  # categorical col 1
model.add(Embedding(100, 64, input_length=10))  # categorical col 2
model.add(Embedding(500, 64, input_length=10))  # categorical col 3
model.add(Flatten... 
model.add(Dense...

Мой вопрос заключается в том, как мне установить модель Keras Sequential, такуючто я смогу использовать три слоя Embedded, показанные выше.Что конкретно находится между первым и последним слоями:

model = Sequential()
#
# What goes here?
#
model.add(Dense...

Я на правильном пути, или мой подход неверен, и мне нужно установить модель другим способом?Любые предложения / примеры приветствуются!

1 Ответ

0 голосов
/ 12 июня 2018

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

col1, col2, col3 = Input(shape=(10,)), Input(shape=(10,)), ...
col1_embeded = Embedding(500, 64)(col1)
col2_embedded = Embedding(100, 64)(col2)
# ...

Суть этого слоя - это вызываемые объекты, которые строят граф вычислений.Например, вы также можете совместно использовать слои встраивания между столбцами, просто используя один и тот же слой встраивания.

...