神经网络第2次迭代loss不变的问题

新手搭建自己的神经网络后,在训练过程中可能会遇到以下问题:

第一次epoch训练结束损失降低,在之后的每个epoch训练结束后模型的loss不发生变化。

除了网上的常见的原因外,对于新手还有一个极其难以察觉的代码bug,如下所示

opt_adam = optim.AdamW(model.parameters(), lr=0.1)
lr_sch = optim.lr_scheduler.StepLR(opt_adam, step_size=5, gamma=0.1)
for epoch in range(epochs):
	for batch in dataloader:
		loss.backward()
		opt_adam.step()
		epoch_loss += loss.item()
		#---------------
		lr_sch.step()
		#---------------

lr_sch是间隔调整学习率(Step LR)策略,每次调用step(),优化器的last_epoch会+1,当last_epoch%step_size==0的时候,opt_adam的学习率lr就会衰减至原来的0.1倍。
上述代码中,lr_sch.step()会使得lr在每个batch后就会衰减,经过一整个epoch之后,lr已经非常的小了,所以在第二个epoch之后,loss不变,因为lr非常小,导致模型的参数几乎不变。
更正的代码:

opt_adam = optim.AdamW(model.parameters(), lr=0.1)
lr_sch = optim.lr_scheduler.StepLR(opt_adam, step_size=5, gamma=0.1)
for epoch in range(epochs):
	for batch in dataloader:
		loss.backward()
		opt_adam.step()
		epoch_loss += loss.item()
		#---------------
	lr_sch.step()
		#---------------

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年3月23日
下一篇 2022年3月23日

相关推荐