#python #machine-learning #deep-learning #pytorch
#python #машинное обучение #глубокое обучение #pytorch
Вопрос:
Я обучаю модель для задачи шумоподавления.
Каждый раз, когда я ее тренирую, первая потеря в новой тренировочной сессии намного выше, чем потеря, с которой я закончил предыдущую. например, после первого обучения:
Затем, когда я захотел обучить ее еще на 100 эпох:
20x
более высокие потери.
Почему это происходит?
Редактировать: Вот график потерь. Вы можете ясно видеть, что после эпохи 2500 наблюдается значительное увеличение потерь:
Добавлен цикл обучения здесь:
num_epochs = 500
criterion = torch.nn.MSELoss()
sgd_params = {
"lr": 0.30,
"momentum": 0.9
}
lin_optimizer = torch.optim.SGD(lin_model.parameters(), lr=0.30, momentum=0.9)
sta_optimizer = torch.optim.SGD(sta_model.parameters(), lr=0.30, momentum=0.9)
ref_optimizer = torch.optim.SGD(ref_model.parameters(), lr=0.30, momentum=0.9)
_, val_clean, val_noisy = util.lincomb_generate_data(batch_size*10, B, K, functions, sample_offset=sample_offset, noise_type="gaussian", noise_mean=noise_mean, noise_std=noise_std)
print("STARTED TRAINING")
for epoch in range(num_epochs):
print("Current epoch {}r".format(epoch), end="")
# generate data returns the x-axis used for plotting as well as the clean and noisy data
_, t_clean, t_noisy = util.lincomb_generate_data(batch_size, B, K, functions, sample_offset=sample_offset, noise_type="gaussian", noise_mean=noise_mean, noise_std=noise_std)
# ===================forward=====================
lin_output = lin_model(t_noisy.float())
sta_output = sta_model(t_noisy.float())
ref_output = ref_model(t_noisy.float())
lin_loss = criterion(lin_output.float(), t_clean.float())
sta_loss = criterion(sta_output.float(), t_clean.float())
ref_loss = criterion(ref_output.float(), t_clean.float())
lin_loss_list.append(lin_loss.data)
sta_loss_list.append(sta_loss.data)
ref_loss_list.append(ref_loss.data)
# ===================backward====================
lin_optimizer.zero_grad()
sta_optimizer.zero_grad()
ref_optimizer.zero_grad()
lin_loss.backward()
sta_loss.backward()
ref_loss.backward()
lin_optimizer.step()
sta_optimizer.step()
ref_optimizer.step()
val_lin_loss = F.mse_loss(lin_model(val_noisy.float()), val_clean.float())
val_sta_loss = F.mse_loss(sta_model(val_noisy.float()), val_clean.float())
val_ref_loss = F.mse_loss(ref_model(val_noisy.float()), val_clean.float())
print("DONE TRAINING")
правка 2: удар
Комментарии:
1. Не могли бы вы показать свой код для сохранения / загрузки вашей модели и / или код, который вы используете для обучения / переобучения модели? Существует ряд факторов, которые могут вызывать эту проблему. Сложно строить предположения, не видя, как вы реализовали свое обучение / переподготовку и сохранение / загрузку модели
2. Используете ли вы какие-либо планировщики скорости обучения (т. Е.
ReduceLROnPlateau
)? Похоже, что вы начинаете с высокой скорости обучения, которая расходится, а затем скорость обучения регулируется, и потери сходятся.3. @BobsBurgers Я использую jupyter notebook, поэтому на самом деле я не сохраняю и не загружаю, а просто перезапускаю тот же блок с другим количеством эпох.
4. @DominikFicek Я не использовал никаких планировщиков LR