Пока я пытался переопределить keras seq2seq как с официального сайта.
https://keras.io/examples/lstm_seq2seq/
Причина:
Проблема в том, что некоторые языки содержат слишком много символов, поэтому модели требуется слишком много памяти; поскольку в этом примере используется один горячий преобразованный индекс символов в качестве входных и выходных данных.
Мое решение:
Поэтому я пытался использовать сам индекс и использовать слой Embedding после encoder_inputs
и decoder_inputs
& decoder_outputs
.
Проблема:
Я пытаюсь скормить ввод и вывод обоих индексов, которые будут иметь форму [num_samples x sequence_length]
, а слой Embedding будет излучать [num_samples x sequence_length x embedding_dimension]
.
Модель будет иметь форму, подобную приведенной ниже:
Model(inputs=[encoder_inputs, decoder_inputs], outputs=[decoder_outputs])
и есть два отдельных слоя для встраивания
Embedding(...)(encoder_inputs) # Embedding layer for encoder - language A
Embedding(...)(decoder_inputs) # Embedding layer for decoder - language B
Embedding(...)(decoder_outputs) # Embedding layer for decoder - language B
Заметьте, что то, что пытается сделать backprop, - это индексы в последовательностях, а не встроенные, поскольку я кормлю только индексами! Но я хочу поддержать данные выходов встроенного декодера, чтобы слой Embedded также мог тренироваться полностью.
Проще говоря, я хочу получить обратное распространение от шага + 1 к слою, в который выводятся выходные данные.
Как я могу сделать это, чтобы выполнить такую вещь в Керасе?