加入收藏 | 设为首页 | 会员中心 | 我要投稿 西双版纳站长网 (https://www.0691zz.com.cn/)- 数据计算、IT业界、服务器、教程、云日志!
当前位置: 首页 > 运营中心 > 建站资源 > 经验 > 正文

10分钟带你打开深度学习大门,代码已开源

发布时间:2019-08-19 19:25:52 所属栏目:经验 来源:沉沉
导读:本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。 深度学习技术的不断普及,越来越多的语言可以用来进行深度学习项目的开发,即使是JavaScript这样曾经只是在浏览器中运行的用于处理轻型任务的脚本语言。 TensorFlow.js是谷歌推出的基
副标题[/!--empirenews.page--]

石头、剪刀、布!10分钟带你打开深度学习大门,代码已开源

本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。

深度学习技术的不断普及,越来越多的语言可以用来进行深度学习项目的开发,即使是JavaScript这样曾经只是在浏览器中运行的用于处理轻型任务的脚本语言。

TensorFlow.js是谷歌推出的基于JavaScript的深度学习框架,它提供的高级API使得开发可以直接在浏览器中运行的深度学习算法变得轻而易举。

这不,美国的一位老哥Gant Laborde使用TensorFlow.js开发了一款是用深度学习技术在浏览器中识别“石头剪刀布”游戏手势的网页应用,放出了demo并将代码开源在了Github上。

对于JavaScript开发者来说,这是打开深度学习大门的极佳入门教材。只需10分钟,你就可以训练一个准确率可观的手势识别模型,并且调用摄像头对实时视频中的手势进行识别。

石头、剪刀、布!10分钟带你打开深度学习大门,代码已开源

△使用运行在浏览器中的深度学习模型识别手势

在一切开始之前

在打开新世界的大门之前,我们总是需要做一些准备工作。

在这里,给大家简单地介绍一下典型的深度学习算法的开发步骤,目的是希望读者们在接下来的操作中明确地知道自己在做什么,而不仅仅是点几个按钮罢了。

这里不会涉及任何艰涩的数学公式,请放心食用。

我们平常所说的深度学习算法,更确切地说,应该是基于深度神经网络的算法(或者说模型)。

这里并不需要知道深度神经网络究竟是个什么东西(你可能需要再花百倍于此的时间才有可能搞明白其具体原理),只需要知道,它可以视作是一个函数f,一个很难用简单公式表达出来的函数。

所谓函数,就要有自变量x和因变量y。

自变量x,我们一般称之为输入(input),在这个问题中就是一张做出“石头”、“剪刀”或“布”手势的手的图像。

而因变量y,我们一般称之为输出(output),在这个问题中是三个取值为0-1的数值,分别对应输入手势是“石头”、“剪刀”和“布”的概率。

我们依靠这个函数f得到我们想要的结果,但是f并不是天上掉下来的,它由人为选取的模型和(大量的)模型参数组成。

其中模型参数往往由大量数据学习得到,这个让模型学习参数的过程我们称之为模型训练(train),是深度学习算法开发中最关键的一步。

在这个问题中,我们需要大量(x,y)数据对来进行训练,也就是大量(图像,手势)数据对,如(图像1,剪刀)、(图像2、石头)、(图像3、布)…… 这些数据对往往需要由人为搜集、标注得到。

我们可以通过一些评估指标来衡量模型的好坏程度,比如在这个问题中,手势识别的准确度。通过这些评估指标我们可以验证(validate)模型是否经过了充分的训练、效果有没有达到我们的预期。如果是,我们可以将其部署投入使用,测试其在现实情况中的表现。

总结来说,一个深度学习算法的开发,需要经过数据准备、模型选择与训练、模型效果评估、模型测试这四个阶段。

现在,正式开始!

数据准备

我们之前提到,需要大量的(图像,手势)数据对来进行模型的训练。搜集这样的数据无疑是一个繁琐的工作,拍照、标注……

幸运的是,谷歌工程师Laurence Moroney为我们提供了这样一个数据集,其中包含了白色背景下的三种手势共2892张图像及对应的手势标签,一些例子:

石头、剪刀、布!10分钟带你打开深度学习大门,代码已开源

△Moroney提供的数据集的一些例子

数据集网址:

http://www.laurencemoroney.com/rock-paper-scissors-dataset/

一切看似都是这么的顺利。等等,我们怎么把这么一坨图像搞进浏览器里去?

在浏览器里执行JavaScript,好像并不能从本地读取文件。

一个显见的想法是,我们把训练数据当做网页中的图片,读进DOM的img元素中。我们先将训练数据中每一张图像“拉直“成1像素高的图像,再将所有图像一行一行堆叠在一起。

比如我们原图大小为64x64,“拉直”之后尺寸为1x4096,训练集的2520张图像堆叠后形成大小为4096x2520的巨大图像(虽然它在视觉上已经失去了意义),像下面这样。

这张巨大图像被称为精灵表单(sprite-sheet),包含了许多小图像。

这个网页应用的作者提供了生成sprite-sheet的Python代码,在github仓库根目录的spritemaker文件夹下。

石头、剪刀、布!10分钟带你打开深度学习大门,代码已开源

△生成的尺寸为4096x2520的sprite-sheet

在demo页面中,点击“Load and Show Examples(读取数据并展示样例)”按钮,等待一阵,我们可以看到数据被读入了浏览器,并且出现了一个侧边栏,其中展示了42张从数据集中随机选取的图像。

这个侧边栏由TensorFlow Visor提供,可以帮助我们直观地观察模型的训练过程,我们可以随时按下键盘左上方的`键切出或隐藏该面板。

石头、剪刀、布!10分钟带你打开深度学习大门,代码已开源

△TensorFlow Visor界面中展示的数据样例

模型选择、训练与效果评估

接下来我们将面临抉择。

两个按钮摆在我们的面前,“Create Simple Model(创建简单模型)”和“Create Advance Model(创建高级模型)”。

石头、剪刀、布!10分钟带你打开深度学习大门,代码已开源

(编辑:西双版纳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读