飞桨深度学习第二周作业讲解
跟着飞桨学习的第二周,本周主要建好了各种卷积网络,并通过paddle来实现。
一、作业要求
本代码旨在于使用ResNet进行眼睑筛查,代码已经完成,可以直接运行。有以下要求:
1.通过查阅API,使用衰减学习率,通过多次调参数,找到一个最佳的衰减步长,使得loss比原代码中下降的更快
2.请自行绘制修改学习率前后的loss衰减图
注:
完整代码我就不复制了,这篇文章主要讲下如何使用衰减学习率以及绘制loss衰减图。
二、实现过程
1.衰减学习率的使用
代码如下(示例):
total_steps = (int(400/batch_size)+1)*epoch_num
#这一句确定步长。其中400是数据集图片数量。由于作业要求一个最佳的衰减步长,后续可通过不断减小这个步长来试探得到最佳结果。
lr = fluid.dygraph.PolynomialDecay(0.001,total_steps,0.0005)
#我设置的学习率衰减范围为0.0005-0.001,读者也可以试下其他范围。
2.loss图的绘制
代码如下(示例):
def train(model):
with fluid.dygraph.guard():
iters=[]
losses1=[]
#这两个用于保存loss图的横纵变量
...#这里省略部分可以去官网对照着看,本文不引入过多其他代码
for epoch in range(epoch_num):
for batch_id, data in enumerate(train_loader()):
...
if batch_id % 10 == 0:
print("epoch: {}, batch_id: {}, loss is: {}".format(epoch, batch_id, avg_loss.numpy()))
iters.append(iter)
losses1.append(avg_loss.numpy())#记录损失
iter = iter + 10 #记录次数
...
plt.figure()
plt.title("lr 0.0005-0.001 total_steps=82", fontsize=24)
plt.xlabel("iter", fontsize=14)
plt.ylabel("loss", fontsize=14)
plt.plot(iters, losses1,color='red',label='train loss')
plt.grid()
plt.show()
#训练完成后将loss图画出来
结果
以上两组代码便是本次作业核心内容,将其嵌入已给代码中,再更改步长,找到最合适步长,便可完成要求。或者读者可以试一下其他范围的学习率,看能否有更好地的效果。接下来展示一组实验结果给大家参考。