自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Javascript 機(jī)器學(xué)習(xí)的四個(gè)層次

開(kāi)發(fā)
我們要寫(xiě)機(jī)器學(xué)習(xí)算法,需要什么樣的工具呢?

[[419034]]

Atwood定律說(shuō),凡是可以用Javascript實(shí)現(xiàn)的應(yīng)用,最終都會(huì)用Javascript實(shí)現(xiàn)掉。作為最熱門(mén)的機(jī)器學(xué)習(xí)領(lǐng)域,服務(wù)端是Python的主場(chǎng),但是到了手機(jī)端呢?Android和iOS里默認(rèn)都沒(méi)有Python。但是有瀏覽器的地方就有js,現(xiàn)在還有個(gè)新場(chǎng)景 - 小程序。

除此之外,為了可以在不聯(lián)網(wǎng)情況下進(jìn)行訓(xùn)練的,也有支持本地框架比如React Native的。

可以說(shuō),只要有前端的地方,就有機(jī)器學(xué)習(xí)的框架在。

js唯一的問(wèn)題在于,變化太快,每年都有很多新庫(kù)出現(xiàn),但是也有不少老的庫(kù)宣布不維護(hù)了。但是,萬(wàn)變不離其宗,工具本身雖然經(jīng)常有變化,但是它們的類(lèi)型是非常穩(wěn)定的。

選擇機(jī)器學(xué)習(xí)工具的方法論

我們要寫(xiě)機(jī)器學(xué)習(xí)算法,需要什么樣的工具呢?

機(jī)器學(xué)習(xí)工具可以分為以下四個(gè)層次:

 

層次一:直接服務(wù)于具體領(lǐng)域的框架

首先我們需要直接服務(wù)于具體領(lǐng)域的框架,比如處理CV的,NLP的,推薦算法之類(lèi)的。

比如nlp.js,上一個(gè)版本發(fā)布在2020年10月。nlp.js的代碼寫(xiě)起來(lái)是這樣的:

  1. const { NlpManager } = require('node-nlp');const manager = new NlpManager({ languages: ['en'], forceNER: true });// Adds the utterances and intents for the NLPmanager.addDocument('en', 'goodbye for now', 'greetings.bye');manager.addDocument('en', 'bye bye take care', 'greetings.bye');manager.addDocument('en', 'okay see you later', 'greetings.bye');manager.addDocument('en', 'bye for now', 'greetings.bye');manager.addDocument('en', 'i must go', 'greetings.bye');manager.addDocument('en', 'hello', 'greetings.hello');manager.addDocument('en', 'hi', 'greetings.hello');manager.addDocument('en', 'howdy', 'greetings.hello');// Train also the NLGmanager.addAnswer('en', 'greetings.bye', 'Till next time');manager.addAnswer('en', 'greetings.bye', 'see you soon!');manager.addAnswer('en', 'greetings.hello', 'Hey there!');manager.addAnswer('en', 'greetings.hello', 'Greetings!');// Train and save the model.(async() => {    await manager.train();    manager.save();    const response = await manager.process('en', 'I should go now');    console.log(response);})(); 

運(yùn)行起來(lái)很簡(jiǎn)單,裝個(gè)庫(kù)就好:

npm install node-nlp

訓(xùn)練的速度也很快:

  1. Epoch 1 loss 0.4629286907733636 time 1msEpoch 2 loss 0.2818764774939686 time 0msEpoch 3 loss 0.16872372018062168 time 0msEpoch 4 loss 0.11241683507408215 time 0ms...Epoch 31 loss 0.00004645272306535786 time 0ms 

輸出的結(jié)果類(lèi)似這樣:

  1. {  locale: 'en',  utterance: 'I should go now',  settings: undefined,  languageGuessed: false,  localeIso2: 'en',  language: 'English',  nluAnswer: {    classifications: [ [Object] ],    entities: undefined,    explanation: undefined  },  classifications: [ { intent: 'greetings.bye', score: 1 } ],  intent: 'greetings.bye',  score: 1,  domain: 'default',  sourceEntities: [    {      start: 12,      end: 14,      resolution: [Object],      text: 'now',      typeName: 'datetimeV2.datetime'    }  ],  entities: [    {      start: 12,      end: 14,      len: 3,      accuracy: 0.95,      sourceText: 'now',      utteranceText: 'now',      entity: 'datetime',      resolution: [Object]    }  ],  answers: [    { answer: 'Till next time', opts: undefined },    { answer: 'see you soon!', opts: undefined }  ],  answer: 'see you soon!',  actions: [],  sentiment: {    score: 0.5,    numWords: 4,    numHits: 1,    average: 0.125,    type: 'senticon',    locale: 'en',    vote: 'positive'  }} 

層次二:深度學(xué)習(xí)框架

第二是我們的核心內(nèi)容,深度學(xué)習(xí)框架。

說(shuō)到Javascript深度學(xué)習(xí),占統(tǒng)治地位的仍然是Tensorflow.js,我們來(lái)看個(gè)經(jīng)典的強(qiáng)化學(xué)習(xí)的例子:

使用瀏覽器的local storage和indexdb作為存儲(chǔ),邊訓(xùn)練邊展示訓(xùn)練效果的過(guò)程,很有前端的風(fēng)范。

我們?cè)倏戳硪粋€(gè)大廠(chǎng)微軟的例子,支持webGL和wasm,基于瀏覽器不容易:

另外需要強(qiáng)調(diào)的是,用于前端的框架并不是簡(jiǎn)單的把native或者python框架移植過(guò)來(lái)的,比如說(shuō)它要處理兼容性的問(wèn)題:

很多同學(xué)都對(duì)Tensorflow有一定了解,我們就手寫(xiě)一個(gè)網(wǎng)頁(yè),然后在其中調(diào)tf的API就好:

  1. <!DOCTYPE html><html>    <head>        <meta encoding="UTF-8"/>        <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@3.0.0/dist/tf.min.js"></script>    </head>    <body>        <div id="tf-display"></div>        <script>            let a = tf.tensor1d([1.0]);            let d1 = document.getElementById("tf-display");            d1.innerText = a;</script>    </body></html> 

層次三:機(jī)器學(xué)習(xí)框架

第三是機(jī)器學(xué)習(xí)的框架。光了解深度學(xué)習(xí)還不夠,傳統(tǒng)的機(jī)器學(xué)習(xí)在更貼近業(yè)務(wù)的時(shí)候,可能效果更好,還節(jié)省算力資源。比如可以使用mljs庫(kù),地址在:https://github.com/mljs/ml

比如我們想做個(gè)k-means聚類(lèi),可以使用mljs框架的ml-kmeans庫(kù):

  1. const kmeans = require('ml-kmeans');let data = [[111], [121], [-1, -1, -1], [-1, -1, -1.5]];let centers = [[121], [-1, -1, -1]];let ans = kmeans(data, 2, { initialization: centers });console.log(ans); 

裝個(gè)包就可以玩了:

npm i ml-kmeans
運(yùn)行結(jié)果如下:

  1. KMeansResult {  clusters: [ 0011 ],  centroids: [    { centroid: [Array], error: 0.25, size: 2 },    { centroid: [Array], error: 0.0625, size: 2 }  ],  converged: true,  iterations: 2,  [Symbol(distance)]: [Function: squaredEuclidean]} 

我們也可以直接在網(wǎng)頁(yè)中使用,比如我們寫(xiě)個(gè)K近鄰的例子:

  1. <!DOCTYPE html><html>  <head>    <meta encoding="UTF-8" />    <script src="https://www.lactame.com/lib/ml/4.0.0/ml.min.js"></script>  </head>  <body>    <div id="ml-display"></div>    <script>      const train_dataset = [        [000],        [011],        [110],        [222],        [122],        [212],      ];      const train_labels = [000111];      let knn = new ML.KNN(train_dataset, train_labels, { k: 2 }); // consider 2 nearest neighbors      const test_dataset = [        [0.90.90.9],        [1.11.11.1],        [1.11.11.2],        [1.21.21.2],      ];      let ans = knn.predict(test_dataset);      let d1 = document.getElementById("ml-display");      d1.innerText = ans;</script>  </body></html> 

最后我們?cè)賮?lái)個(gè)決策樹(shù)的例子

  1. const irisDataset = require('ml-dataset-iris');const DecisionTreeClassifier = require('ml-cart');const trainingSet = irisDataset.getNumbers();const predictions = irisDataset  .getClasses()  .map((elem) => irisDataset.getDistinctClasses().indexOf(elem));const options = {  gainFunction: 'gini',  maxDepth: 10,  minNumSamples: 3,};const classifier = new DecisionTreeClassifier.DecisionTreeClassifier(options);classifier.train(trainingSet, predictions);const result = classifier.predict(trainingSet);console.log(result); 

輸出結(jié)果如下:

  1. [  000000000000,  000000000000,  000000000000,  000000000000,  001111111111,  111111111121,  111111111111,  111111111111,  1111,  ... 50 more items] 

層次四:數(shù)學(xué)和統(tǒng)計(jì)庫(kù)

第四個(gè)層次是數(shù)學(xué)和統(tǒng)計(jì)庫(kù)。做統(tǒng)計(jì)和數(shù)學(xué)計(jì)算,很多時(shí)候才是理解業(yè)務(wù)的最好手段。這個(gè)時(shí)候我們也不能空手上,也需要工具。

這方面的代表庫(kù)有stdlib: https://stdlib.io/雖然它名字和實(shí)際都是標(biāo)準(zhǔn)庫(kù),但是為了數(shù)學(xué)和統(tǒng)計(jì)提供了很豐富的內(nèi)容,比如150多個(gè)數(shù)學(xué)函數(shù)和35種統(tǒng)計(jì)分布。

我們先安裝一下做后面的實(shí)驗(yàn):

npm install @stdlib/stdlib
比如各種數(shù)學(xué)函數(shù):

再比如各種隨機(jī)分布:

我們以正態(tài)分布為例,看看stdlib是如何描述分布的:

  1. const Normal = require( '@stdlib/stats/base/dists/normal' ).Normal;let dist1 = new Normal( 01 );console.log(dist1);let m1 = dist1.mean;console.log(m1);let v1 = dist1.variance;console.log(v1); 

構(gòu)造Normal時(shí)的兩個(gè)參數(shù)是均值和方差。

輸出如下:

Normal { mu: [Getter/Setter], sigma: [Getter/Setter] }01

這個(gè)無(wú)良的標(biāo)準(zhǔn)庫(kù)竟然還支持50多種數(shù)據(jù)集,看個(gè)小例子,美國(guó)州首府的數(shù)據(jù)集:

  1. const capitals = require( '@stdlib/datasets/us-states-capitals' );const data_c = capitals();console.log(data_c); 

輸出結(jié)果如下:

  1. [  'Montgomery',     'Juneau',         'Phoenix',  'Little Rock',    'Sacramento',     'Denver',  'Hartford',       'Dover',          'Tallahassee',  'Atlanta',        'Honolulu',       'Boise',  'Springfield',    'Indianapolis',   'Des Moines',  'Topeka',         'Frankfort',      'Baton Rouge',  'Augusta',        'Annapolis',      'Boston',  'Lansing',        'Saint Paul',     'Jackson',  'Jefferson City''Helena',         'Lincoln',  'Carson City',    'Concord',        'Trenton',  'Santa Fe',       'Albany',         'Raleigh',  'Bismarck',       'Columbus',       'Oklahoma City',  'Salem',          'Harrisburg',     'Providence',  'Columbia',       'Pierre',         'Nashville',  'Austin',         'Salt Lake City''Montpelier',  'Richmond',       'Olympia',        'Charleston',  'Madison',        'Cheyenne'

總結(jié)

綜上,如果要做從0到1的業(yè)務(wù),盡可能用第一層次的工具,這樣最有助于快速落地。但是如果是要做增量,尤其是困難的增長(zhǎng),第三第四層次是首選,因?yàn)楦兄谏羁汤斫鈹?shù)據(jù)。

責(zé)任編輯:梁菲 來(lái)源: 阿里云云棲號(hào)
相關(guān)推薦

2011-07-01 16:07:18

云應(yīng)用集成云計(jì)算

2022-07-18 17:02:50

數(shù)字化轉(zhuǎn)型數(shù)字技術(shù)人工智能

2022-06-27 23:31:01

JavaScript框架開(kāi)發(fā)

2022-01-12 15:50:24

JavaScript開(kāi)發(fā)循環(huán)

2022-07-01 14:25:27

機(jī)器學(xué)習(xí)人工智能工業(yè)4.0

2023-09-16 17:03:59

DevOps文檔

2009-03-13 09:39:34

JavaScript函數(shù)調(diào)用規(guī)則

2018-08-17 15:17:56

人工智能層次極端

2022-08-02 10:33:11

JavaScript代碼

2023-10-26 07:47:35

JavaScript代碼變量

2023-05-04 09:02:56

2017-04-12 14:33:01

機(jī)器學(xué)習(xí)數(shù)據(jù)分析開(kāi)發(fā)

2011-05-24 11:18:50

2017-12-05 11:25:09

2020-04-14 09:01:19

人工智能勞動(dòng)力經(jīng)濟(jì)

2023-09-06 16:55:33

JavaScript閉包

2022-02-23 15:09:18

數(shù)字化轉(zhuǎn)型國(guó)有企業(yè)數(shù)據(jù)

2024-06-25 12:45:05

2013-03-18 13:31:28

2017-05-27 15:21:38

JavaScript機(jī)器學(xué)習(xí)示例
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)