deeplearnjs框架介紹

為大家介紹一下谷歌去年年中推出的前端js深度學(xué)習(xí)框架:deeplearnjs饿这,可以在瀏覽器上進(jìn)行神經(jīng)網(wǎng)絡(luò)訓(xùn)練與預(yù)測(cè)菩颖,AI框架都有獲取數(shù)據(jù)蔬胯、構(gòu)建網(wǎng)絡(luò)、訓(xùn)練位他、預(yù)測(cè)等氛濒。本文以官方的手寫識(shí)別例子看看deeplearnjs是如何實(shí)現(xiàn)這些的,還有deeplearnjs的性能情況鹅髓。

一.安裝

git clone https://github.com/PAIR-code/deeplearnjs

brew install yarn  【已經(jīng)安裝yarn這里可以忽略】

cd deeplearnjs
yarn prep

安裝vs code:
https://marketplace.visualstudio.com/items?itemName=eg2.tslint
sudo npm install -g clang-format

看手寫識(shí)別demo:
./scripts/watch-demo demos/mnist_eager

二.手寫識(shí)別demo目錄結(jié)構(gòu)

目錄路徑:deeplearnjs-master/demos/mnist_eager
目錄結(jié)構(gòu):(以typescript編寫所以文件名后綴是ts)
入口:mnist_eager.ts
數(shù)據(jù):data.ts
界面顯示:ui.ts
網(wǎng)絡(luò)模型:model.ts

三.手寫識(shí)別demo加載訓(xùn)練數(shù)據(jù)

文件是data.ts舞竿,識(shí)別圖片格式為28x28的灰度圖,labels為對(duì)應(yīng)的結(jié)果:

'data': [
    {
      'name': 'images',
      'path': 'https://storage.googleapis.com/learnjs-data/model-builder/' +
          'mnist_images.png',
      'dataType': 'png',
      'shape': [28, 28, 1]
    },
    {
      'name': 'labels',
      'path': 'https://storage.googleapis.com/learnjs-data/model-builder/' +
          'mnist_labels_uint8',
      'dataType': 'uint8',
      'shape': [10]
    }
  ],

this.dataset = new dl.XhrDataset(mnistConfig);

在網(wǎng)絡(luò)獲取的數(shù)據(jù)圖:
https://storage.googleapis.com/learnjs-data/model-builder/mnist_images.png

手寫識(shí)別數(shù)據(jù)圖集

在數(shù)據(jù)集中獲取訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù):

const [images, labels] =
        this.dataset.getData() as [dl.NDArray[], dl.NDArray[]];

四.手寫識(shí)別demo構(gòu)造網(wǎng)絡(luò)

文件是model.ts
初始化網(wǎng)絡(luò)權(quán)重:

const weights = dl.variable(dl.Array2D.randNormal(
    [IMAGE_SIZE, LABELS_SIZE], 0, 1 / Math.sqrt(IMAGE_SIZE), 'float32'));

構(gòu)造網(wǎng)絡(luò)模型:

const model = (xs: dl.Array2D<'float32'>): dl.Array2D<'float32'> => {
  return math.matMul(xs, weights) as dl.Array2D<'float32'>;
};

構(gòu)造損失函數(shù):

const loss = (labels: dl.Array2D<'float32'>,
              ys: dl.Array2D<'float32'>): dl.Scalar => {
  return math.mean(math.softmaxCrossEntropyWithLogits(labels, ys)) as dl.Scalar;
};

五.手寫識(shí)別demo訓(xùn)練網(wǎng)絡(luò)

放入訓(xùn)練數(shù)據(jù)訓(xùn)練網(wǎng)絡(luò)窿冯,i為學(xué)習(xí)步長(zhǎng):

export async function train(data: MnistData, log: (message: string) => void) {
  const returnCost = true;
  for (let i = 0; i < TRAIN_STEPS; i++) {
    const cost = optimizer.minimize(() => {
      const batch = data.nextTrainBatch(BATCH_SIZE);

      return loss(batch.labels, model(batch.xs));
    }, returnCost);

    log(`loss[${i}]: ${cost.dataSync()}`);

    await dl.util.nextFrame();
  }
}

六.手寫識(shí)別demo預(yù)測(cè)網(wǎng)絡(luò)

export async function test(data: MnistData) {}

// Predict the digit number from a batch of input images.
export function predict(x: dl.Array2D<'float32'>): number[] {
  const pred = math.scope(() => {
    const axis = 1;
    return math.argMax(model(x), axis);
  });
  return Array.from(pred.dataSync());
}

七.手寫識(shí)別demo運(yùn)行結(jié)果與gpu性能

運(yùn)行結(jié)果如下:


運(yùn)行結(jié)果

訓(xùn)練網(wǎng)絡(luò)時(shí)運(yùn)行的js函數(shù):


運(yùn)行函數(shù)情況

訓(xùn)練網(wǎng)絡(luò)時(shí)運(yùn)行的js函數(shù)對(duì)應(yīng)的gpu消耗情況:


gpu消耗情況

總結(jié):

deeplearnjs可以支持es5骗奖,并且可以支持瀏覽器的WebGL2.0、WebGL1.0以及CPU醒串,若瀏覽器支持WebGL2.0框架則優(yōu)先調(diào)用WebGL2.0执桌。市面上的深度學(xué)習(xí)框架大多數(shù)只支持N卡,用deeplearnjs就可以通過(guò)瀏覽器調(diào)用A卡芜赌,缺點(diǎn)是暫時(shí)沒(méi)有支持分布式gpu計(jì)算仰挣。

參考資料

官網(wǎng)地址:
https://deeplearnjs.org/
github地址:
https://github.com/PAIR-code/deeplearnjs
deeplearn.js:瀏覽器端機(jī)器智能框架 @徐進(jìn)
http://www.infoq.com/cn/news/2017/08/deeplearn-js-Browser-machine-int

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缠沈,隨后出現(xiàn)的幾起案子膘壶,更是在濱河造成了極大的恐慌错蝴,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颓芭,死亡現(xiàn)場(chǎng)離奇詭異顷锰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)亡问,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門官紫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人州藕,你說(shuō)我怎么就攤上這事束世。” “怎么了慎框?”我有些...
    開(kāi)封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵良狈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我笨枯,道長(zhǎng)薪丁,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任馅精,我火速辦了婚禮严嗜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洲敢。我一直安慰自己漫玄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布压彭。 她就那樣靜靜地躺著睦优,像睡著了一般。 火紅的嫁衣襯著肌膚如雪壮不。 梳的紋絲不亂的頭發(fā)上汗盘,一...
    開(kāi)封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音询一,去河邊找鬼隐孽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛健蕊,可吹牛的內(nèi)容都是我干的菱阵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼缩功,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼晴及!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起掂之,我...
    開(kāi)封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤抗俄,失蹤者是張志新(化名)和其女友劉穎脆丁,沒(méi)想到半個(gè)月后世舰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體动雹,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年跟压,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胰蝠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡震蒋,死狀恐怖茸塞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情查剖,我是刑警寧澤钾虐,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站笋庄,受9級(jí)特大地震影響效扫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜直砂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一菌仁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧静暂,春花似錦济丘、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至郊供,卻和暖如春峡碉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背颂碘。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工异赫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人头岔。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓塔拳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親峡竣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子靠抑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 機(jī)器學(xué)習(xí)(Machine Learning)&深度學(xué)習(xí)(Deep Learning)資料(Chapter 1) 注...
    Albert陳凱閱讀 22,217評(píng)論 9 476
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,790評(píng)論 25 707
  • 鼓起勇氣,向前适掰。 努力做事颂碧,樂(lè)觀做人荠列。 接受不好的自己。 加油载城!逆境是最好的機(jī)會(huì)肌似!
    斷劍迪恩閱讀 227評(píng)論 0 1
  • 難過(guò)的心情,如果找人分擔(dān)诉瓦,就沒(méi)這么難過(guò)啦川队。 管他是主動(dòng)幫我分擔(dān)還是被動(dòng)的呢。 終于讓我停下來(lái)清理一下自己的生活了睬澡,...
    Ken_E閱讀 486評(píng)論 0 0
  • 又是一天在家工作日固额。 空調(diào)壞了,冰箱里也沒(méi)什么吃的煞聪。 對(duì)著電腦出教案出的頭疼斗躏。 就這樣。
    明月桑閱讀 216評(píng)論 0 0