Я тренировал модель LSTM-MDN, используя Адама, потери на тренировку сначала уменьшились, но после нескольких сотен эпох она увеличилась и превысила Начальное значение.Затем я переобучился с того момента, когда потери были наименьшими, и снизил скорость обучения в 10 раз (с 1e-3 до 1e-4).
Сначала потери тренировок снизились, а позже увеличились. Сначала я думал, что некоторыеошибки в коде, но я не нашел никаких ошибок.Затем я заменил Адама на SGD (импульс = 0), потеря тренировки не увеличилась, но она приблизилась к относительно большой величине, которая была выше, чем потеря от Адама, поэтому я подумал, что в Адаме было что-то не так.
Я так и не нашел причину, надеюсь, кто-нибудь поможет мне найти причину.потеря (адам)
функция потерь
def mdn_loss_function(out_pi, out_sigma, out_mu, y):
y = y.view(-1, SEQUENCE, 1, LATENT_VEC)
result = Normal(loc=out_mu, scale=out_sigma)
result = torch.exp(result.log_prob(y))
result = torch.sum(result * out_pi, dim=2)
result = -torch.log(EPSILON + result)
return torch.mean(result)