Итак, здесь есть две проблемы.
Использование CuDNNLSTM
и parameter tuning
.
По сути, сетевые перегрузки в вашем наборе данных приводят к тому, что выводом является только одно предложение для каждого ввода. Это не вина CuDNNLSTM
и LSTM
.
Во-первых,
CuDNN
имеет немного отличную математику от обычной LSTM
, что делает его совместимым с Cuda и работает быстрее. LSTM
занимает 11 секунд для запуска на англ. Файле для того же кода, который вы использовали, а CuDNNLSTM
- 1 секунда для каждой эпохи.
В CuDNNLSTM time_major
параметр установлен на false
. По этой причине сеть перегружается. Вы можете проверить это здесь .
Для небольших наборов данных, таких как анг-хин или анг-маратхи, ясно видно, что val-loss
увеличивается после 30 эпох. Нет смысла управлять сетью больше, когда ваш network loss
уменьшается, а val_loss
увеличивается. Случай с LSTM
такой же.
Здесь вам нужно param tuning
для небольших наборов данных.
Вот несколько ссылок, которые могут помочь:
- Eng-Mar
- Руководство по переводу Pytorch
- Аналогичный вопрос 2 и Аналогичный вопрос 2
- NMT-keras