上一个产品经理也可以实践的AI (一)- FastAI的介绍中介绍了为什么选择FastAI,为什么适合做产品经理,为什么这个技能值得学习。 写这篇文章的目标是在阅读后更好地理解教程的内容。
概要
在上例中,核心代码共有三行。
data=图像数据bunch.from _ name _ re (路径_ img、名称、路径、ds _ tfms=获取转换),大小=224 )传输
识别精度为94.3%,2012年宠物识别精度为59%
核心步骤
图像数据databunch object制作学习对象learn object是训练fit one cycle调试保存前的模型数据纠错找出学习率的再训练前三个是训练神经网络所需的代码,之后从各个角度都发现问题
这里有几个重要的概念:
迁移学习传输学习:正如大师已经提供了一套学习方法,我们将据此训练自己的学习方法; 错误率错误率:验证组的数据,是预测错误的百分比; 罗斯(我印象中叫做打脸指数,越自信,但预测越错误。 其损耗为高验证组validation set )数据一般分为训练组和验证组,验证组是为了验证训练过的模型的正确性,验证组的数据是AI从未见过的数据。 过合身(类似于牛肉吃多了。 不管吃什么都像牛肉的味道。 ……举不出更好的例子了。 有想法记得给我留言。 学习率learningrate(1 (一个字一个字读一个字读一个句读,这样一个字一个字读就变小了学习率,更容易发现细微的特点,在大的学习率中可以发现更宏观的特点。 详细说明
这门课的重点是通过一个模型,并且调整到比较好的效果,最终把准确率提高到了95.8%。
由于Jeremy专门用于许多函数,在第一堂课中可以一键导入数据,而不是制造n多故障,所以只要在Jupyter notebook上一步一步地执行就一定会通过。 但是,需要在实践过程中弄清楚每个步骤和每个参数代表什么。 前三个核心步骤基本上看教程就很容易懂,找不懂的文档也很容易懂。
这里的重点是调试部分,首先需要保存现有培训的结果。
learn.save (阶段-1) ) )。
然后,可以创建解释器interpretation,并通过两种方法调整模型:查找和删除异常图像(下一课将介绍如何删除)。 二是找出合适的学习率learning rate进行微调的精细调整。
如果查看解释器,就会发现两个函数: plot_top_loss和most_confused。 第一是发出所有错误的最离谱的图像,第二是发出最错误的类别。 这很容易发现问题。 例如,在打了错误数量最多的狗之后,这两种狗确实很接近,人的情况下不太容易区分,所以可能需要单独进行大量的图像训练。
然后是精细调。 这是重点! 强调一下,要进行微调,需要明确图像识别的原理,或者是CNN(convolutionalneuralnetwork )卷积神经网络的原理。 作者发表了一篇通过视觉化理解Clarify首席执行官发表的卷积网络的论文,详细介绍了其原理。
首先第一层训练是学习率特别低的训练,机器发现了边缘定律,发现这几种颜色的渐变特别常见。
然后,第二层基于第一层找到的边缘,发现这些边缘的连接,例如直角或弧是相对公共的。
然后根据在第三层、第二层发现的线,发现了各种各样的形状。
">
然后第四层第五层,感觉已经可以识别特定的形状和特定的物体了,随着层级的提高,能识别的共性图像的复杂性也在提高,是因为学习率的提高,机器会选择性的忽略细节,反而更多的关注宏观的相似。
第一次训练用的架构叫做ResNet34,是一个基于上百万张图片训练了34层之后得到的一个通用的图片识别模型。之前的训练就是在这个模型之后增加个4个层,训练之后的结果就已经非常不错了,如果想变得更好,就只能将之前的模型解冻unfreeze,然后连贯起来重新训练,并通过
learn.lr_find()learn.recorder.plot()找到loss和lr的关系
这张图可以看到当learning rate超过 10-4之后,loss明显升高,就说明之前默认的0.003的lr偏高了,所以调整lr
learn.fit_one_cycle(2, max_lr=slice(1e-6,1e-4))至于为什么调到这个区间,之后的课程会将,而现在就是一个可以充分实践的机会。
最后得出的准确率94.7%,比之前的94.3%只高了一点点,而95.8%的准确率是通过ResNet50来实现的,因为这个pre-train的模型跑了50层,识别率更高,但非常占用计算机性能。
好了,草草的把介绍写完了,很多东西没法一篇文章写完,一方面得自己多动手尝试去感受,另一方面确实有些概念得逐渐理解,希望这篇文章让你对FastAI运作的模式有了一个清晰的认识。