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

利用一點(diǎn)機(jī)器學(xué)習(xí)來(lái)加速你的網(wǎng)站

開(kāi)發(fā) 前端 機(jī)器學(xué)習(xí)
最近,我發(fā)現(xiàn)自己對(duì) web 性能的定義可能太狹隘了,從用戶的角度上來(lái)說(shuō),這些只是 web 性能中的一些小插曲。所以我打開(kāi)了我經(jīng)常去的網(wǎng)站,嘗試了所有的用戶可能的操作,并記錄操作所花費(fèi)的時(shí)間。(我們需要一些用戶操作時(shí)光軸工具),之后,我發(fā)現(xiàn)了一個(gè)可行的提升性能的方案。

在生活中,我有 73% 的時(shí)間在考慮 web 性能-在低配手機(jī)上達(dá)到 60 FPS、 有序加載資源、離線緩存任何能緩存的資源。還有一些其他的優(yōu)化。

最近,我發(fā)現(xiàn)自己對(duì) web 性能的定義可能太狹隘了,從用戶的角度上來(lái)說(shuō),這些只是 web 性能中的一些小插曲。

所以我打開(kāi)了我經(jīng)常去的網(wǎng)站,嘗試了所有的用戶可能的操作,并記錄操作所花費(fèi)的時(shí)間。(我們需要一些用戶操作時(shí)光軸工具)

之后,我發(fā)現(xiàn)了一個(gè)可行的提升性能的方案。

下面的文章內(nèi)容聚焦在某個(gè)具體網(wǎng)站的具體操作步驟。但是我覺(jué)得這個(gè)解決方案(嗯,沒(méi)錯(cuò)!就是機(jī)器學(xué)習(xí))可以應(yīng)用到很多其他類型的網(wǎng)站上去。

問(wèn)題,如何才能節(jié)約時(shí)間

這個(gè)網(wǎng)站,用于賣家出售沒(méi)用的東西,買(mǎi)家通過(guò)購(gòu)買(mǎi)這些東西來(lái)淘一些有價(jià)值的東西。

當(dāng)賣家要在網(wǎng)站上出售東西時(shí)候,要先選擇分類, 再選擇對(duì)應(yīng)的模版,然后填寫(xiě)細(xì)節(jié)信息,預(yù)覽,最后發(fā)布。

然而第一步 — 選擇分類 — 就把我?guī)нM(jìn)了一條彎路

首先,一共有674個(gè)類別,我根本不知道我你破舊的皮劃艇屬于哪個(gè)類別( Steve Krug 說(shuō)的好, 不要讓用戶去思考 )

第二步,即使我知道商品所屬的類別 — 子類別 — 子子類別,我也要至少花費(fèi)12秒的時(shí)間。

如果我跟你說(shuō),我能把你的頁(yè)面的加載時(shí)間減少12秒,你一定覺(jué)得我瘋了。那么為什么不在一些別的地方來(lái)節(jié)約這12秒呢。

正如凱撒大帝所說(shuō),時(shí)間很寶貴的呢。

我一直認(rèn)為用戶無(wú)知是福。我如果把商品的標(biāo)題、描述、價(jià)格放到機(jī)器學(xué)習(xí)的模型里面,系統(tǒng)應(yīng)該能自動(dòng)計(jì)算出商品所屬的分類。

這樣子用戶選類別的時(shí)間就能省下來(lái)了。他們就可以開(kāi)心的把這些時(shí)間拿來(lái)去 reddit 找 DIY 的雙層床了。

機(jī)器學(xué)習(xí)-你不該逃避它,你要去擁抱它

一開(kāi)始的時(shí)候,我對(duì)機(jī)器學(xué)習(xí)一點(diǎn)概念都沒(méi)有。我是在游戲 AI ,以及 Alpha 狗戰(zhàn)勝人類頂級(jí)圍棋棋手之后才有所了解的。

因此我打算開(kāi)始去了解它,下面的幾步一個(gè)小時(shí)都不需要。

  1. Google 搜索 'machine learning'
  2. 查看大量的關(guān)于機(jī)器學(xué)習(xí)的文章
  3. 發(fā)現(xiàn)了亞馬遜發(fā)布的 機(jī)器學(xué)習(xí) 相關(guān)的服務(wù)
  4. 我開(kāi)始意識(shí)到我不需要知道太多的關(guān)于機(jī)器學(xué)習(xí)的東西
  5. 嗯。好開(kāi)心

(作者注: 因?yàn)闆](méi)有去系統(tǒng)的學(xué)習(xí)機(jī)器學(xué)習(xí),所以文章的一些專業(yè)術(shù)語(yǔ)可能被亂用。。)

一個(gè)簡(jiǎn)單的實(shí)現(xiàn)流程

亞馬遜發(fā)布了他的機(jī)器學(xué)習(xí)文檔 。如果你不是對(duì)這個(gè)文檔很感興趣,打算花5個(gè)小時(shí)去閱讀,那么就來(lái)看下我寫(xiě)的一些總結(jié)吧。

整理如下:

  • 獲取一些 CSV 數(shù)據(jù)文件,每行都是一個(gè)商品項(xiàng)(^_^我的皮劃艇),列名是標(biāo)題、描述、價(jià)格、所屬分類。
  • 把數(shù)據(jù)傳送到亞馬遜的 AWS S3 bucket 里面
  • 用數(shù)據(jù)去訓(xùn)練機(jī)器。這樣子,這個(gè)小小云機(jī)器人就能通過(guò)商品的標(biāo)題,描述和價(jià)格去預(yù)測(cè)他的分類了。
  • 在前端頁(yè)面上,寫(xiě)一些代碼,獲取用戶輸入的 標(biāo)題/描述/價(jià)格,發(fā)給這個(gè)云機(jī)器人,經(jīng)過(guò)計(jì)算,就能向預(yù)測(cè)這個(gè)商品所屬的分類了。

實(shí)戰(zhàn)模擬

下面是我寫(xiě)的一個(gè)表單,模擬了賣家發(fā)布信息的幾個(gè)關(guān)鍵流程。

下面的結(jié)果一定會(huì)讓你對(duì)機(jī)器學(xué)習(xí)保持興趣。你只要相信我,建議類別是由深度學(xué)習(xí)模擬預(yù)測(cè)出來(lái)的。

讓我們?nèi)ベu一個(gè)冰箱

利用一點(diǎn)機(jī)器學(xué)習(xí)來(lái)加速你的網(wǎng)站

再來(lái)試一下賣個(gè)水族館:

利用一點(diǎn)機(jī)器學(xué)習(xí)來(lái)加速你的網(wǎng)站

這個(gè)云機(jī)器人居然能識(shí)別出水族館!

當(dāng)我看到這個(gè)結(jié)果的時(shí)候,手舞足蹈,是不是棒棒噠?

(我偷偷的告訴你我是怎么實(shí)現(xiàn)的:React, Redux, JQuery, Mox, RxJs, BlueBird, Bootstrap, Sass, Compass, NodeJs, Express, Loadsh。項(xiàng)目是使用 webpack 打包。最后生成的文件在1M左右)

嗯。不 BB 了。開(kāi)始講正經(jīng)事。

一開(kāi)始為了拿到機(jī)器學(xué)習(xí)用的數(shù)據(jù)。我也是想破了頭。我大概需要10K條數(shù)據(jù)。后來(lái)是在一個(gè)當(dāng)?shù)氐慕灰拙W(wǎng)站上面發(fā)現(xiàn)有這些數(shù)據(jù)??戳艘幌?URL 和 DOM 結(jié)構(gòu)之后,我用 Google Scraper 插件提取了一些數(shù)據(jù)。導(dǎo)出成 CSV 文件。在這些數(shù)據(jù)上我大概花費(fèi)了四個(gè)小時(shí)。將近整個(gè)項(xiàng)目時(shí)間的一半了。

數(shù)據(jù)整理好之后,上傳到了 Amazon S3 上,配置了一下機(jī)器學(xué)習(xí)的參數(shù),設(shè)置了數(shù)據(jù)模型。整個(gè)學(xué)習(xí)的 CPU 耗時(shí)才3分鐘。

界面上還有一個(gè)實(shí)時(shí)預(yù)測(cè)功能,所以我打算用一些參數(shù)測(cè)試一下。

利用一點(diǎn)機(jī)器學(xué)習(xí)來(lái)加速你的網(wǎng)站

嗯。還挺好用的。

為了不在瀏覽器里面暴露出我的 Amazon API ,所以我把 API 放到了 Node 服務(wù)器上。

后臺(tái)代碼(Node)

使用方式很簡(jiǎn)單。接口參數(shù)為 modelId, 服務(wù)器返回一個(gè) prediction :

 

  1. const AWS = require('aws-sdk');  
  2. const machineLearning = new AWS.MachineLearning();  
  3. const params = {  
  4. MLModelId: 'some-model-id' 
  5. PredictEndpoint: 'some-endpoint' 
  6. Record: {},  
  7. };  
  8. machineLearning.predict(params, (err, prediction) => { // we have a prediction!}); 

這里參數(shù)用大寫(xiě)字母開(kāi)頭,本來(lái)打算改掉的。后來(lái)想想還是算了。

Record, 是一個(gè)JSON對(duì)象。屬性值是(title, description, price)

我不想只提供一些代碼片段。為了幫助大家更好的理解。我把所有的服務(wù)端代碼都貼上來(lái)了。

server.js:

 

  1. const express = require('express'); 
  2. const bodyParser = require('body-parser'); 
  3. const AWS = require('aws-sdk'); 
  4. const app = express(); 
  5. app.use(express.static('public')); 
  6. app.use(bodyParser.json());  
  7. AWS.config.loadFromPath('./private/aws-credentials.json'); 
  8. const machineLearning = new AWS.MachineLearning();  
  9. app.post('/predict', (req, res) => {  const params = { 
  10.     MLModelId: 'my-model-id'
  11.     PredictEndpoint: 'https://realtime.machinelearning.us-east-1.amazonaws.com'
  12.     Record: req.body, 
  13.   };  
  14.   machineLearning.predict(params, (err, data) => {    if (err) { 
  15.       console.log(err); 
  16.     } else { 
  17.       res.json({ category: data.Prediction.predictedLabel }); 
  18.     } 
  19.   }); 
  20. });  
  21. app.listen(8080); 

aws-credentials.json:

 

  1.   "accessKeyId""my-access-key-id"
  2.   "secretAccessKey""shhh-secret-squirrel",  "region""us-east-1" 

(在.gitignore 中忽略 /private 文件夾)

上面就是所有的后臺(tái)代碼。

前端代碼

表單里面的代碼功能比較簡(jiǎn)單。

  • 監(jiān)聽(tīng)?zhēng)讉€(gè)輸入框的 blur 事件
  • 讀取表單里面的字段值
  • POST 給 API 端
  • 把 API 端返回的 prediction 顯示在頁(yè)面上

 

  1. (function() { 
  2.   const titleEl = document.getElementById('title-input'); 
  3.   const descriptionEl = document.getElementById('desc-input'); 
  4.   const priceEl = document.getElementById('price-input'); 
  5.   const catSuggestionsEl = document.getElementById('cat-suggestions'); 
  6.   const catSuggestionEl = document.getElementById('suggested-category'); 
  7.    function predictCategory() {     
  8.     const fetchOptions = { 
  9.       method: 'POST'
  10.       headers: {        'Content-Type''application/json'
  11.       }, 
  12.       body: JSON.stringify({ 
  13.         title: titleEl.value, 
  14.         description: descriptionEl.value, 
  15.         price: priceEl.value, 
  16.       }) 
  17.     };  
  18.     fetch('/predict', fetchOptions) 
  19.       .then(response => response.json()) 
  20.       .then(prediction => { 
  21.         catSuggestionEl.textContent = prediction.category; 
  22.         catSuggestionsEl.style.display = 'block'
  23.       }); 
  24.   }  
  25.   document.querySelectorAll('.user-input').forEach(el => { 
  26.     el.addEventListener('blur', predictCategory); 
  27.   }); 
  28. })(); 

上面就是全部的前端代碼了。

啊啊啊……云服務(wù)還要收費(fèi)呢

別忙著收起你的帽子,魔術(shù)表演怎么可能是免費(fèi)呢。

我上面用到的 model 數(shù)據(jù)(10K行/4列)有6.3MB. 云端在等待接受請(qǐng)求的時(shí)候,消耗了6.3MB的內(nèi)存。這些資源的開(kāi)銷是每小時(shí)0.0001刀?;蛘呙磕?刀。 我在手套上面花的錢(qián)都比它多。

每次進(jìn)行 prediction 的時(shí)候,也要0.0001刀。所有就不要隨隨便便就調(diào)用這個(gè) API 了。

雖然目前不僅僅是 Amazon 提供了這個(gè)服務(wù),但是我還是沒(méi)有找到另外兩個(gè)大廠家的價(jià)目表。

Google 有 TensorFlow , 但是我看了一下 入門(mén)教程 就跑了。

Microsoft 有 Machine Learning offering , 但是IE6還是讓我有點(diǎn)耿耿于懷 (可能不久后,Amazon 和 Microsoft 之間會(huì)有一場(chǎng)大戰(zhàn)吧)。

一些總結(jié)

或許只是我感到有些許驚訝(我還記得當(dāng)我意識(shí)到‘news’是‘new’的復(fù)數(shù)的時(shí)候),我認(rèn)為這些都十分讓人驚訝。它允許像你我這樣的普通人(對(duì)發(fā)展影響的程度較小的人)在機(jī)器學(xué)習(xí)中進(jìn)行挖掘,可能會(huì)促成那些用戶很大的改進(jìn)。

下一步在哪?

上面的例子顯然是進(jìn)行過(guò)設(shè)計(jì)的,并且,我承認(rèn),我省略了一些話題。

如果我可以的話,我應(yīng)該列出所有問(wèn)題,但要是你自己去做你自己發(fā)現(xiàn)問(wèn)題那也是很有趣的。

因此,去做吧,如果你取得了一些成功,我將樂(lè)于在評(píng)論中看到它們。

責(zé)任編輯:未麗燕 來(lái)源: 開(kāi)源中國(guó)翻譯文章
相關(guān)推薦

2013-10-30 09:37:19

LinuxLinux命令

2010-05-20 15:29:43

優(yōu)化IIS

2009-09-14 20:17:05

并行LINQ

2016-01-06 09:49:59

青云/SDN

2009-09-14 16:00:51

LINQ基本操作LINQ

2015-12-08 16:14:04

2009-08-13 17:52:13

C#構(gòu)造函數(shù)

2009-08-27 17:50:09

interface接口

2009-09-09 10:53:25

C# MessageB

2018-11-15 09:00:00

機(jī)器學(xué)習(xí)人工智能數(shù)據(jù)中心

2020-12-22 09:58:45

機(jī)器學(xué)習(xí)工業(yè)運(yùn)營(yíng)工業(yè)傳感器

2011-01-13 14:38:00

JavascriptCSSWeb

2021-09-17 08:04:28

Hooks函數(shù)組件架構(gòu)

2019-10-17 09:57:08

Python設(shè)計(jì)電腦

2009-06-17 14:36:02

學(xué)習(xí)Java心得

2009-08-28 16:30:24

C#線程

2009-08-14 11:29:28

C#創(chuàng)建Windows

2019-06-17 06:18:27

邊緣計(jì)算物聯(lián)網(wǎng)霧計(jì)算

2019-11-28 14:07:46

技術(shù)架構(gòu)代碼

2018-11-26 11:57:33

NVIDIARAPIDSGPU
點(diǎn)贊
收藏

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