TensorFlow.js

TensorFlow.js 是Google将机器学习(Machine Learning)TensorFlow框架的JavaScript版本,通过TensorFlow.js,让JavaScript开发人员也有机会加入机器学习的领域。加上前端领域的生态圈支持,让机器学习在浏览器上有了更多发挥的空间!例如结合摄影机、移动设备的陀螺仪等等,只要设备与浏览器支援,都能够发生更多不同的变化,同时借由在客户端浏览器上执行的优势,节省后端学习的成本。

今天我们就来简单介绍一下TensorFlow.js,以及简单的机器学习的学习方式吧!

关于 TensorFlow.js 的基础知识

由于TensorFlow.js是由JavaScript编写而成,因此只要与浏览器相关的应用,都可以与TensorFlow.js直接整合,这意味着我们可以将浏览器功能与机器学习搭配起来,组合成更多元的Web Application。

TensorFlow.js也支持WebGL,因此即使在浏览器上,我们也能使用GPU来加速运算结果,不用担心在浏览器上的性能限制。

TensorFlow.js分成低阶与高阶两组API。

低阶的API是由 deeplearn.js 衍生,负责处理一些低阶如线性代数的数据运算等等,来协助我们处理机器学习中的数学运算部分。

而高阶的API则是用来包装一些常用的机器学习演算法,同时允许我们载入训练好的模型,像是由Keras学习的模型等等。

TensorFlow.js的限制

目前TensorFlow.js不支持Node.js开发,因此我们只能在浏览器上使用,未来会支持Node.js,但时间未定。

开始使用 TensorFlow.js

直接使用CDN

接下来我们就可以开始使用TensorFlow.js啦!由于TensorFlow.js目前只能在浏览器上运行,为了简化前期准备,我们直接建立一个index.html,并加入TensorFlow.js的CDN,如下:

之后我们就能在index.js中开始使用TensorFlow.js进行机器学习啦!

使用 npm 或 yarn

当然,作为熟练的前端工程师,我们也能使用npm或yarn来安装,如下:

之后再用import的方式加入TensorFlow即可

当然,你就需要使用babel或webpack等工具来转换程序啰。

机器学习基本概念

先来简单讲讲一般机器学习是怎么做的,在机器学习中,通常我们会针对一个题目,给予一组学习数据清单,这些数据包含了问题与答案,接着通过机器学习的各种算法,来训练出一个针对这个题目的模型。

这个模型通常就代表了一个公式,只要将题目带进去公式,就能够算出答案,而这个公式怎么来的呢?就是通过机器学习算法,这些算法通常会先随机产生一个公式(也就是模型),接着将学习数据带进去计算出预测值,并与正确答案比较,并通过不断的调整模型内容,不断想办法降低预测值与正确答案的差距,直到预测值与足够接近正确答案为止。

简单来说,就是经验法则啦!刚开始学一项知识的时候,得到的结果会与预期落差很大,借由不断学到正确知识后,就会与预期越来越接近!

有了这样的基本概念后,就让我们来学习一个简单的模型吧!

另外,有时间的话建议可以先看过Core Concepts in TensorFlow.js,对于TensorFlow.js的低阶API有基础的认知,会比较好理解后续的程序。(或是有机会再来简单介绍一个TensorFlow.js的低阶API)

产生第一个待学习模型

首先我们先看一个简单的数学公式代表我们的正确模型。

x 代表输入值,y代表输出结果,2是这个模型的重点参数,也是我们在学习过程中期望达到的目标!

但目前我们还没有任何模型可用,因此我们先在程序中加入一个全局变量,把它当做要被学习的模型参数

上述程序中,tf是载入CDN程序后,用来放入TensorFlow.js相关程序的全局变量。

我们透过tf.scalar()将Math.random()的随机数当作TensorFlow的数值数据,再使用tf.variable()将这个数值当作是一个变量,因此上面程序中我们可以解读为:在TensorFlow中定义一个变量,并赋值给一个随机数值。

接下来,我们再来以这个参数来产生一个模型公式

tf.tidy()是用来避免变数在TensorFlow运算中站用过多内存的一种管理机制,在这里我们不用想太多,大部分情况下,关于运算的都放在tf.tidy()中就对了,剩下的TensorFlow.js会帮我们处理!

.mul(),则是TensorFlow.js低阶运算API的一种,主要用来进行乘法运算。

通过这个predict()函数,我们能运算出目前模式产生出来的预测值

定义损失函式(Loss Function)

损失函式是用来评估模型预测值与真实值的差距,在学习过程中,这个损失函式的输出应该会越来越小,在这边我们使用Mean Square Error函数作为评估的公式,代表的是预测结果与学习数据中所有答案平方差的平均:


定义学习函数

接下来我们要定义学习的方法,TensorFlow.js中提供了几种学习的算法,我们选择使用Stochastic Gradient Descent(SGD)算法,这种算法会根据学习结果来随机调升或调降参数的值,另外我们也需要设定一个学习率(learning rate),这代表学习的跳跃程度,数值越低代表学习速度越慢,越高代表学习速度越快,但也可能会造成太过跳跃式的学习,导致学习成果容易出差错。


参数xs代表学习用问题数据集,ys代表答案数据集,numIterations代表学习次数,理论上学习次数越多,就越接近结果,当然也越花时间,同时在学习率太高的情况下,学习走偏的机率也会增加。

tf.train.sgd(0.5)代表使用SGD学习算法,并以0.5的学习率进行学习。

最后看到optimizer.minimize()方法,来调整参数,方法的callback中,我们将通过损失函数算出误差值并回传,minimize()方法会自动帮助我们调整损失函数中关联到的参数,并通过调整参数把误差值降到最低。

执行学习

有了损失函数与学习函数后,我们就可以将这些内容组合起来执行学习啦!

前两行是利用正确的模型产生学习数据,现实中则可能是准备好文字档并读取进来generateData内容如下:

接着通过学习函数,把问题、答案和学习次数传进去,让学习函数去把结果学习出来,就可以得到一个正确的模型啦!

我们可以试着打开浏览器的console看一下执行结果:

参考文章:

tensorflow.js官网

人工智能实现自动编写HTML与CSS

在浏览器中实现人脸识别接口---face-api.js

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

推荐阅读更多精彩内容