实践作业
本次实践作业目标是使用ResNet进行眼部筛查,通过多次调参数,找到一个最佳的衰减步长,使得loss比原代码中下降的更快。具体代码已经给出,此次实践作业的重点在于修改参数以及绘制loss衰减图。
修改方法
1.使用之前章节学习的多项式学习率动态调节进行改进。
2.定义两个数组用于迭代接收迭代次数和loss,为绘图做准备。
3.修改epoch_num 为 10,获得更明显的loss下降效果
原始代码及结果
首先用原始学习率运行两个epoch,看看loss下降情况。只显示修改部分,代码如下:
# 定义训练过程
def train(model):
with fluid.dygraph.guard():
print('start training ... ')
model.train()
iter_count = 0
iters = []
losses_train = []
epoch_num = 10
# 定义优化器
opt = fluid.optimizer.Momentum(learning_rate=0.001, momentum=0.9, parameter_list=model.parameters())
# 定义数据读取器,训练数据读取器和验证数据读取器
train_loader = data_loader(DATADIR, batch_size=10, mode='train')
valid_loader = valid_data_loader(DATADIR2, CSVFILE)
for epoch in range(epoch_num):
for batch_id, data in enumerate(train_loader()):
x_data, y_data = data
img = fluid.dygraph.to_variable(x_data)
label = fluid.dygraph.to_variable(y_data)
# 运行模型前向计算,得到预测值
logits = model(img)
# 进行loss计算
loss = fluid.layers.sigmoid_cross_entropy_with_logits(logits, label)
avg_loss = fluid.layers.mean(loss)
if batch_id % 10 == 0:
print("epoch: {}, batch_id: {}, loss is: {}".format(epoch, batch_id, avg_loss.numpy()))
iters.append(iter_count)
losses_train.append(avg_loss.numpy())
iter_count += 10
# 反向传播,更新权重,清除梯度
avg_loss.backward()
opt.minimize(avg_loss)
model.clear_gradients()
训练结果如下:
epoch: 0, batch_id: 0, loss is: [0.6597792]
epoch: 0, batch_id: 10, loss is: [0.78281564]
epoch: 0, batch_id: 20, loss is: