在深度学习领域,选择合适的训练权重、获取最优的学习率、寻找最佳的超参数以及最适合数据和模型的架构至关重要。然而,数据质量不足和计算强度大等问题,往往会导致资源的大量消耗。幸运的是,像Fast.ai这样的深度学习库为提供了“作弊码”,使能够迅速回到竞争中。
Fast.ai是一个建立在PyTorch之上的流行深度学习框架,旨在通过少量代码快速轻松地构建最先进的模型。它极大地简化了深度学习模型的训练过程,同时不影响训练模型的速度、灵活性和性能。Fast.ai还支持计算机视觉和自然语言处理领域的最新技术和模型。
Fast.ai的高生产力和易用性,以及它提供的灵活性,使能够在不涉及底层的情况下自定义高级API。Fast.ai还包含一些非常酷的功能,使其成为初学者在深度学习领域入门的首选库之一。
图像数据集帮助将训练、验证和测试数据整合在一起,并通过执行所有必需的转换和归一化图像数据来处理数据。
学习率可以影响模型学习的速度和适应问题的能力。低学习率会减慢训练过程的收敛速度,而高学习率可能导致性能上的不良发散。因此,良好的学习率对于模型的满意性能至关重要,而寻找最优学习率就像大海捞针。Fast.ai的“lr_find()”功能就像骑士一样,拯救免于寻找良好学习率的痛苦。
通过使用非常低的初始学习率训练一个小批量,并计算损失,然后训练下一个与前一个小批量相比略有提高的学习率的小批量。这个过程一直持续到模型发散。可以使用recorder.plot()来获取学习率与损失的图表,简化了选择良好学习率的任务。学习率的选择基于哪个学习率为损失提供了最陡的斜率,而不是哪个学习率有最低的损失。
fit_one_cycle方法实现了循环学习率的概念。在这种方法中,使用在最小和最大界限之间波动的学习率,而不是使用固定或指数递减的学习率。每个CLR周期包括两个步骤,一个是从最小到最大界限的学习率增加,反之亦然。假设最优学习率位于所选的最小和最大界限之间。在这里,步长表示用于增加或减少每个步骤的学习率的迭代次数。通过循环学习率来拟合模型的周期数。在学习期间,学习率在每个周期的所选最小学习率到最大学习率之间振荡。使用CLR消除了训练模型陷入鞍点的可能性。
fit_one_cycle方法还实现了学习率退火的概念,使用降低的学习率进行最后几次迭代。这些最后迭代的学习率通常取为所选最小学习率的百分之一。这可以防止在接近最优解时过度射击。
让尝试使用Fast.ai中的预训练Resnet50模型在Imagenets数据集上解决紧急与非紧急车辆分类问题。
首先,使用fit_one_cycle训练模型5个周期,以了解模型的工作情况。然后,解冻预训练模型的层,以便模型学习特定于数据集的特征。再次使用fit_one_cycle拟合模型,看看现在模型的工作情况。
使用lr_find和recorder.plot,可以清楚地了解哪个学习率最适合模型。利用学习率与损失图来选择学习率。然后,再次使用所选的学习率拟合方法并训练它。模型稍后被冻结并导出以供后续使用。