Я пытаюсь построить модель LSTM для генерации текста.В керасе моя модель выглядела бы примерно так:
model= Sequential()
model.add( Embedding(vocab_size, embedding_dim) )
model.add( LSTM( units=embedding_dim, input_shape=(None, embedding_dim), return_sequences=True) )
model.add( LSTM( units=embedding_dim, input_shape=(None, embedding_dim), return_sequences=True) )
model.add( Dense(vocab_size, activation='softmax') )
model.compile( optimizer='adam', loss='categorical_crossentropy')
Я понимаю преимущества слоя внедрения для моделей LSTM: уменьшенный объем памяти входного массива, аналогичные переменные отображаются в закрытые области в скрытом пространствеи т. д. Это позволяет мне передавать массив категорий непосредственно в мой LSTM без необходимости в одном горячем кодировании.Рассмотрим следующий категориальный набор данных с vocab_size = 9:
X= [ [1,2,3], [4,5,6], [7,8,9] ]
Мой вклад в слой внедрения будет
X= [ [1,2], [4,5], [7,8] ]
Мой вопрос касается формы целевого вектора Y.категориальная перекрестная потеря энтропии, я все еще вынужден один горячий кодировать Y. Непосредственно, мне нужно один горячий кодировать следующий вектор:
Y= [ [2,3], [5,6], [8,9] ]
Мне странно, что я могу обойтись безодно горячее кодирование X, но все еще нужно одно горячее кодирование Y. Это, кажется, идет вразрез с аргументами использования памяти, которые я прочитал для использования слоя встраивания, поскольку я все еще вынужден использовать одно горячее кодирование Y, которое теоретически может быть очень большимдля большого vocab_size.
Верно ли мое понимание необходимости правильного горячего кодирования Y, или есть другие приемы, которые я могу использовать, чтобы избежать этой ситуации?