如何解决重新训练模型的损失要比上一次会话结束时的损失高
我正在训练去噪任务的模型。
每次我训练它时,新训练中的第一次损失都比我之前完成的损失高得多。例如在第一次训练后:
然后,当我想再训练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(),momentum=0.9)
ref_optimizer = torch.optim.SGD(ref_model.parameters(),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,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:碰碰
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。