встраивание порядка индекса слоя в Keras Tensorflow - PullRequest
0 голосов
/ 20 октября 2019

Я использую Keras Tensorflow для подгонки моделей Deep Learning к смешанному вводу данных (как числовому, так и категориальному). Категориальные ковариаты были закодированы как числовые с использованием scikit-learn LabelEncoder и введены в DL с использованием слоя Input (одномерного). Затем я установил Embedding Слои, используя, например, переменную с 6 различными уровнями:

variable_emb = Embedding(input_dim=6,output_dim=1,input_shape=(1,),name='variable_emb_emb')(variable_tensor_input)

Мой вопрос заключается в том, каков порядок следования строкам встраиваемой матрицы. Соответствует ли i-ая строка индексации LabelEncoder или она назначается различным исходным уровням переменных в соответствии с последовательностью их появления во входном наборе данных?

1 Ответ

0 голосов
/ 20 октября 2019

Я считаю, что выходные строки просто индексируются от 0 до input_dim-1, и любое целое число, сгенерированное вашим LabelEncoder для каждого категориального варианта, будет соответствовать соответствующей строке. Например, если у вас есть 3 категориальные переменные: «яблоко», «груша», «апельсин» и LabelEncoder назначает грушу = 2, апельсин = 0, яблоко = 1, то строка 0 матрицы внедрения будет связана с «оранжевым»", строка 1 будет" яблоком ", а строка 2 будет" грушей ".
Приведенный ниже фрагмент рабочего кода демонстрирует идею. Надеюсь, это поможет.

import numpy as np
from keras import Sequential
from keras.layers import Embedding

model = Sequential()
model.add(Embedding(5, 2))

model.compile('rmsprop', 'mse')
#model.summary()

input_array = np.array([[1, 1, 1],
                        [1, 2, 2]])
output_array = model.predict(input_array)

print('model.get_weights():')
print(model.get_weights())

print('output_array:')
print(output_array)
...