Этот вопрос довольно абстрактен и не обязательно связан с тензорным потоком или керасом. Скажем, вы хотите обучить языковую модель и хотите использовать входные данные разного размера для своих LSTM. В частности, я слежу за этой статьей: https://www.researchgate.net/publication/317379370_A_Neural_Language_Model_for_Query_Auto-Completion.
Авторы используют, среди прочего, встраивание слов и горячее кодирование символов. Скорее всего, размеры каждого из этих входов разные. Теперь, чтобы передать это в сеть, я вижу несколько альтернатив, но я уверен, что что-то упускаю, и я хотел бы знать, как это должно быть сделано.
- Создайте трехмерный тензор формы (экземпляры, 2, макс (вложения, символы)). То есть заполнение меньшего ввода 0 с.
- Создайте трехмерный тензор формы (экземпляры, вложения + символы, 1)). То есть объединение входных данных.
Мне кажется, что обе альтернативы плохи для эффективного обучения модели. Итак, как лучше всего подойти к этому? Я вижу, что авторы используют для этой цели слой внедрения, но технически, что это значит?
РЕДАКТИРОВАТЬ
Вот более подробная информация. Назовем эти входные данные X (ввод на уровне символов) и E (ввод на уровне слов). Для каждого символа последовательности (текста) я вычисляю метку x, e и y.
x
: однократное кодирование символов. Мой индекс символов имеет размер 38, так что это вектор, заполненный 37 нулями и одной единицей.e
: предварительно вычисленное вложение слова размером 200. Если символ является пробелом, я извлекаю вложение слова предыдущего слова в последовательности. В противном случае я назначаю вектор для неполного слова (INC
, также размером 200). Реальный пример с последовательностью "красная машина":r>INC, e>INC, d>INC, _>embeddings["red"], c>INC, a>INC, r>INC
.y
: предсказуемая метка, которая является следующим символом, закодированным в горячем режиме. Этот вывод имеет ту же размерность, что иx
, потому что он использует тот же индекс символов. В приведенном выше примере для «r»y
является однократным кодированием «e».
e
— это встраивание слова для символа, читаемого во время обучения. Точнее, для каждого слова в словаре это вектор или 200 чисел с плавающей запятой, обученных с помощью Word2Vec. Но поскольку у меня нет полного слова до символа пробела, этот вектор заполняется случайным образом 200 числами с плавающей запятой. Когда читается символ пробела,e
является вложением предыдущего слова в последовательность. Это яснее? - person Johy   schedule 13.09.2017