Я работаю с M xNet и выясняю модель Seq2Seq. Предположим, что каждый пакет будет обрабатывать 32 последовательности, и каждая последовательность будет иметь длину 20 (временные шаги). Чтобы создать архитектуру для работы с моделями seq2seq, мы собираемся разбить каждую последовательность на две части. Методы расщепления очень произвольны, но давайте предположим, что мы делим пополам последовательность. Первая часть будет называться «вход энкодера» и, действительно, будет входом для энкодера, который будет состоять из последовательности 10 (временных шагов), очевидно, этот вход состоит из N чисел переменной длины 10. Следовательно, мы будет иметь x1,…, x10 для каждой входной последовательности кодирования, умноженной на количество признаков, которые приведут к вектору признаков входов кодирования Xt. Теперь, поскольку выход декодера будет второй половиной последовательности, что должно быть входом декодера? Я устанавливаю вход декодера как вход энкодера, и модель работает довольно хорошо. Это прямая функция:
def forward(self, encoder_input, *args):
state= self.encoder.begin_state(batch_size=encoder_input.shape[0], ctx=mx.cpu())
encoder_output, encoder_state= self.encoder(encoder_input, state)
decoder_output, decoder_state= self.decoder(encoder_input, encoder_state)
output= self.dense(decoder_output)
return output
Есть ли ошибка при использовании входа кодера в качестве входа декодера? Я видел несколько примеров в Keras, где они инициализируют вход декодера как np.array с формой вывода декодера. Я пытался установить вход декодера как массив нулей, но результаты (с точки зрения точности) очень сильно затухают.