产品经理也能动手实践的AI(二)- 做个识别宠物的AI

上一篇《产品经理也能动手实践的AI(一)- FastAI介绍》,介绍了为什么选择FastAI,为什么适合产品经理,为什么值得学习这项技能。而写这篇文章的目标是,看完了之后可以更好的看懂教程中的内容。

概览

直接上例子,核心代码一共3行:

data = ImageDataBunch.from_name_re(path_img, fnames, pat, ds_tfms=get_transforms(),size=224) learn = cnn_learner(data, models.resnet34, metrics=error_rate)learn.fit_one_cycle(4)

识别准确率是94.3%,在2012年,宠物识别的准确率才59%

核心步骤

  1. 创建图像数据 databunch object

  2. 创建学习对象 learn object

  3. 开始训练 fit one cycle

  4. 调试

    1. 保存之前的模型

    2. 数据纠错

    3. 找到学习率

    4. 重新训练

前3个就是训练一个神经网络必要的代码,而之后的那些都是从各个角度去发现问题,然后提高准确率。

这里还有几个重要概念:

  1. 迁移学习 transfer learning:类似于大师已经提供了一套学习方法,我们在这基础上训练自己的学习方法;

  2. 错误率 error rate:就是验证组数据,预测错误的百分比;

  3. 损失 loss:我形象的称为打脸指数,就是越自信,但是却预测错误,那loss就高

  4. 验证组 validation set:数据一般分为训练组和验证组,验证组就是用来验证训练好的模型的准确度,验证组的数据是AI没有见过的数据;

  5. 过度拟合 overfit:有点类似于牛肉吃多了,吃什么都觉得像牛肉味……我举不出更好的例子了,有想法记得给我留言;

  6. 学习率 learning rate:就类似于1个字1个字读→一个个词读→一句句话读,1个个字读就属于小的学习率,比较容易发现更细节的特征点,而大的学习率会发现更宏观的特征点;

详细讲解

这节课的重点是跑通一个模型,并且调试到比较好的效果,最终将准确率提高到了95.8%。

Jeremy专门做了很多函数,可以一键导入数据,而不是在第一节课就制造N多阻碍,所以只要在Jupyter notebook里一步步运行就一定可以跑通,但是每一步或者每一个参数代表什么,是需要在实践的过程中搞清楚的,前3个核心步骤基本看教程都很容易搞懂,不懂的查找文档也很好理解。

这里重点说下调试部分,首先需要保存一下现有训练的结果:

learn.save('stage-1')

然后可以通过2种方式去调节模型,一是创建 解释器interpretation,找到异常图片,然后删掉它(下节课才讲如何删);二是找到合适的 学习率learning rate进行 微调fine-tuning。

先看解释器,提到了2个函数:plot_top_loss 和 most_confused,第一个是把错的最离谱的图片都打出来,第二个是把猜错次数最多的类别给打出来。这样就非常容易发现问题,比如把出错次数最多的打出来之后,发现这2种狗确实很接近,人的话也不是特别容易区分,这就可能需要单独的大量的图片训练。

然后是fine-tuning,这里是重点!!多强调一下,要想微调,就要搞清楚图像识别的原理,或者叫CNN(convolutional neural network)卷积神经网络的原理,作者拿出了Clarify的CEO发表的一片通过视觉化理解卷积网络的论文,详细介绍了其中的原理。

首先第一层的训练,属于学习率特别低的训练,机器找到了边缘的规律,发现这几种颜色的渐变是特别常见的。

然后第二层,基于第一层找到的边缘,发现这些边缘的连接,比如直角或者一个弧形是比较有共性的东西。

然后第三层,基于第二层发现的线条,发现了各种形状。

然后第四层第五层,感觉已经可以识别特定的形状和特定的物体了,随着层级的提高,能识别的共性图像的复杂性也在提高,是因为学习率的提高,机器会选择性的忽略细节,反而更多的关注宏观的相似。

第一次训练用的架构叫做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运作的模式有了一个清晰的认识。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容