- Вы пытаетесь внедрить RNN?Потому что я вижу, что вы называете свою модель RNN, но реализация, кажется, не принимает сигналы от предыдущих временных шагов.
- Кажется, что вы не реализуете пакеты и тренируетесь на основе ввода 1 символа, а затем обратного распространенияна что.Это, как известно, вызывает нестабильность.Возможно, вы захотите выполнить итерации по нескольким символам и накапливать потери и усреднять их перед обратным распространением.
При создании текста вы хотите обучить модель, подготовив, например, последовательность данных "лиса перепрыгнула через ленивую собаку ".При прогнозировании на уровне слов ваш ввод будет:
["the","fox","jumped", "over","the","lazy"]
, а цель будет:
["fox","jumped", "over","the","lazy", "dog"]
Что делает модель, пытаясь предсказать следующее слово, исходя из предыдущих слов.На уровне символов, затем просто измените список на каждый символ в предложении.Таким образом, у вас будет модель, которая изучает распределение вероятностей.
Для конкретной реализации PyTorch проверьте здесь: https://pytorch.org/tutorials/intermediate/char_rnn_generation_tutorial.html
Кроме того, вам не нужен retain_graph=True
, поскольку он будет накапливатьсяобъем памяти.Вместо этого просто наберите:
loss.backward()
optimizer.step()
optimizer.zero_grad()