在浏览器训练个剪刀石头布探测器你的小电脑也可以

放大字体  缩小字体 2019-08-23 16:46:16  阅读:7086 作者:责任编辑NO。魏云龙0298

选自Heartbeat

作者:Gant Laborde

机器之心编译

参加:韩放

你知道怎样在浏览器中练习并测验机器学习模型吗?本文带你快速练习一个「剪刀石头布」的辨认模型,你能够在家向朋友演示你的模型作用。

假定你回到两年前,现在要让我写一个算法,拍照一只手的图画,并确认它是石头、剪刀仍是布。我会说这有或许完结,但需求给我 6 个月时刻。

现在,假如你再问我这个问题,我能够引导你拜访 https://rps-tfjs.netlify.com/,并说:「您能够 10 分钟内涵浏览器中练习一个模型。」

什么是网页版「石头剪刀布」

经过这个网站,咱们能够在浏览器中精确得完结辨认石头剪刀布这一使命,一切核算都在本地完结,速度将取决于本地硬件的好坏。因为该项目运用了 TensorFlow.js,一切深重的作业都发生在浏览器和 Javascript 中!

机器学习需求数据来练习模型,咱们等待经过一段时刻的练习后,这个模型变得满足聪明,然后辨认曾经从未见过的石头、剪刀和布的相片。

首要,咱们需求一些「石头、剪刀、布」图画的练习数据。先不要急着给一切的朋友打电话搜集数据,咱们能够运用谷歌 Laurence Moroney 供给的一些优异数据。

数据集地址:http:///rock-paper-scissors-dataset/

浏览器怎样加载练习数据

在正常的机器学习作业流程中,咱们能够按文件夹安排图画文件,并经过简略的全局变量获取。可是在浏览器中,体系对内存中加载的内容进行了沙盒处理,假如咱们要加载 10MB 的图画,那么就会遇到妨碍。

走运的是,咱们能够运用一个经典的技巧将一组图画传输到浏览器:sprite 表。咱们把一组图画粘在一同构成独自的图画。在这种情况下,每一个小图都展开成一个向量,这些向量堆叠在一同便是一张「大图」。经过这种方法,咱们就能够创立 10MB 的大图画来保存一切小图画。

将二维图画展开成一维向量的作用图。

我编写了自己的 sprite 表生成器,并在「石头剪刀布」数据集上运转它。成果看起来很张狂。您能够看到这样的图画:

转换成这样的调集:

单张小图缩小到 64x64,上图总共 2520 张,发生的图画是(4096x2520)。

Python 源代码在这个项意图 spritemaker 文件夹中,因而假如你要对彻底不同的数据集履行类似的操作,能够用它创立自己的 sprite 表。

已然一切图画都被组合成单一的图画,咱们就能够将图画切割开来进行练习和验证。

单击按钮-预备练习

或许需求一秒钟的时刻来加载并解析大图画,而且当你按下网站上的按钮时,信息将被填充到 TensorFlow Visor。它基本上是一个小的滑动菜单,协助咱们在练习时显现信息。

在 visor 上,咱们将看到从数据会集随机抽取了 42 张图画作为测验数据。一切图画数据是 RGB 的,可是假如咱们翻开 constants.js,能够将通道数削减到 1。

加载 42 张随机样本并显现在 vis 中。

此外,咱们将在此侧菜单中看到模型层、未经练习的成果、练习计算信息和练习成果。

你创立模型的界面如下:

我得到了一个适用于简略数据的简略模型,还有一个高档模型。其间高档模型对多个视点和布景的数据更有用,它的鲁棒性更强。

什么样的「石头剪刀布」模型才算好

你或许会想,咱们应该运用高档的模型,这是一个常见的圈套。假如你挑选高档模型,你或许会遇到一些常见的问题。首要,它需求更长的时刻来练习,第二,它乃至或许练习地欠好。第三,假如练习时刻过长,高档模型将呈现过度拟合现象。

过度拟合意味着该模型在猜测练习数据方面十分超卓,可是对从未见过的数据十分糟糕,一个好的机器学习模型应该是能够泛化的。

在练习模型时,每一次迭代更新一张作用图表,在本例中为 512 个图画迭代一次。而且每个 epoch 更新一次图标(一切 2100 个练习图画)。杰出的练习迭代意味着丢失削减,精确度进步。

精确率图表中的橙色线是在验证集上的体现,即模型在未经练习的 420 张图画上精确度怎么。能够看到橙色线的练习精确率很高!咱们的模型应该很好地泛化(只需新的图画在复杂性和款式上与练习数据类似)。

正如你所看到的,剪刀总是精确的,而咱们最差的类是布,只要 95% 的精确率。因为练习是随机初始化的,所以每次成果会略有不同。为了进一步发掘辨认作用,咱们也得到了一个混杂矩阵。

正如在这里看到的,布被意外地归类为剪刀 6 次。这是有道理的,有时候布看起来有点像剪刀。像上面这样的混杂矩阵能够协助咱们找出需求处理的问题。

最终看看作用吧

现在咱们总算能够在实际国际中测验咱们的模型了。运用网络摄像头,咱们能够查看咱们自己的手是否有石头剪刀布!请记住,咱们期望咱们的相片与咱们的练习图画类似,以便正常运转(无旋转和白色布景)。

网络摄像头将拍照并转换为 64x64 图画。

你现已在你的浏览器中练习了一个模型,验证测验了它,乃至在实际场景中测验了它。很少有人能做到这一点,在浏览器中完结这一切的人乃至更少。

最终本项意图一些资源:

源代码:https://github.com/GantMan/rps_tfjs_demo

Demo:https://rps-tfjs.netlify.com/

本文为机器之心编译,转载请联络本大众号取得授权。

------------------------------------------------

“如果发现本网站发布的资讯影响到您的版权,可以联系本站!同时欢迎来本站投稿!