免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

前端也能玩 AI,基于 tfjs-node 的高階前端機(jī)器學(xué)習(xí)平臺(tái)

 西北望msm66g9f 2020-05-06

隨著深度學(xué)習(xí)的發(fā)展,智能化已經(jīng)開(kāi)始賦能各行各業(yè),前端作為互聯(lián)網(wǎng)中離用戶(hù)最近的一環(huán),也希望借助 AI 的能力大幅提高效率,減少人力成本,給用戶(hù)創(chuàng)建更好的體驗(yàn)。因此,前端智能化也被看作是前端的未來(lái)的重要發(fā)展方向。

然而,在這條道路上,有幾個(gè)問(wèn)題一直阻礙著智能化的發(fā)展:1. 熟悉機(jī)器學(xué)習(xí)的算法工程師對(duì)前端的業(yè)務(wù)沒(méi)有體感,對(duì)前端所積累的數(shù)據(jù)和這些數(shù)據(jù)可能產(chǎn)生的價(jià)值也并不了解,很難參與到這個(gè)過(guò)程中來(lái)。2. 傳統(tǒng)的前端工程師對(duì)機(jī)器學(xué)習(xí)常用的語(yǔ)言,諸如 python, c++ 等并不了解,學(xué)習(xí)和轉(zhuǎn)換的成本很高。3. 傳統(tǒng)的前端工程師對(duì)深度學(xué)習(xí)本身的算法和原理不了解,導(dǎo)致很難直接使用一些現(xiàn)有的機(jī)器學(xué)習(xí)框架 (tensorflow, pytorch 等)來(lái)進(jìn)行訓(xùn)練。

為了解決這些問(wèn)題,推動(dòng)前端智能化發(fā)展,我們開(kāi)發(fā)了 pipcook。pipcook 使用對(duì)前端友好的 JS 環(huán)境,基于 Tensorflow.js 框架作為底層算法能力并且針對(duì)前端業(yè)務(wù)場(chǎng)景包裝了相應(yīng)算法,從而讓前端工程師可以快速簡(jiǎn)單的運(yùn)用起機(jī)器學(xué)習(xí)的能力。

此篇文章將主要討論 pipcook 是如何和 Tensorflow.js 結(jié)合的,重點(diǎn)探討一下如何利用 tfjs-node 的底層模型和計(jì)算能力搭建一個(gè)高階機(jī)器學(xué)習(xí)流水線。

為什么采用 TensorFlow.js 作為底層算法框架

Tensorflow.js 是 google 在 2018 年發(fā)布的基于 js 的機(jī)器學(xué)習(xí)框架,google 也開(kāi)源了相關(guān)代碼。pipcook 在數(shù)據(jù)處理和模型訓(xùn)練中使用 tfjs-node 作為底層依賴(lài)的框架,在 Tensorflow.js 之上開(kāi)發(fā) pipcook 插件并組裝成流水線。我們使用 Tensorflow.js 主要有以下幾個(gè)原因:

  • pipcook 定位于服務(wù)前端工程師,所以主要采用 JS 語(yǔ)言開(kāi)發(fā),所以我們更傾向于采用 JS 的運(yùn)算框架,避免橋接其他語(yǔ)言等方式帶來(lái)的性能損失和出錯(cuò)風(fēng)險(xiǎn)

  • 相對(duì)于一些其他的 JS 的機(jī)器學(xué)習(xí)框架,Tensorflow 本身在 C++ 和 Python 上非常流行,js 版本也復(fù)用了 C++ 的底層能力和很多算子, 支持大量的網(wǎng)絡(luò)層,激活函數(shù),優(yōu)化器和其他組件,并且具有良好的性能并提供 GPU 支持。

  • 官方提供了 tfjs-converter 等工具,可以將 SavedModel 或者 Keras 等模型轉(zhuǎn)化為 JS 模型,從而可以復(fù)用很多 Python 成熟的模型

  • JS 在對(duì)數(shù)學(xué)運(yùn)算這一方面的生態(tài)并不成熟,沒(méi)有一個(gè)如同 numpy 這樣的科學(xué)計(jì)算庫(kù),一些類(lèi)似的庫(kù)也很難和其他的運(yùn)算框架無(wú)縫結(jié)合。而 tfjs 本身提供了 tensor 的封裝,相當(dāng)于 numpy arary 的能力,并且可以直接傳入到 tfjs 模型中進(jìn)行訓(xùn)練,同時(shí)性能非常高效

  • tfjs 提供了 Dataset API, 可以對(duì)數(shù)據(jù)進(jìn)行抽象,為數(shù)據(jù)封裝了簡(jiǎn)單高效的接口,同時(shí)可以進(jìn)行批數(shù)據(jù)處理。Dataset API 的數(shù)據(jù)流的方式也可以和 pipcook 管道的方式高效結(jié)合。

使用 TensorFlow.js 處理數(shù)據(jù)

對(duì)于機(jī)器學(xué)習(xí),訪問(wèn)和處理大量數(shù)據(jù)是一個(gè)關(guān)鍵問(wèn)題。對(duì)于一些傳統(tǒng)數(shù)據(jù)量不大的場(chǎng)景,我們可以把數(shù)據(jù)一次性讀入內(nèi)存進(jìn)行操作,但是對(duì)于深度學(xué)習(xí)來(lái)說(shuō),很多時(shí)候數(shù)據(jù)遠(yuǎn)遠(yuǎn)超出了內(nèi)存大小,因此,我們需要按需從數(shù)據(jù)源逐段訪問(wèn)數(shù)據(jù)的能力。而 tfjs 提供的 Dataset API 對(duì)這種場(chǎng)景的處理進(jìn)行了包裝。

在一個(gè)標(biāo)準(zhǔn)的 pipcook pipeline 中,我們會(huì)使用 Dataset API 對(duì)數(shù)據(jù)進(jìn)行包裝和處理。如圖所示是一個(gè)典型的數(shù)據(jù)流通的過(guò)程。

  • 一開(kāi)始,原始的訓(xùn)練數(shù)據(jù)會(huì)通過(guò) data collect 插件進(jìn)入到管道中,這種原始數(shù)據(jù)可能是一些本地文件或者存儲(chǔ)在云上的數(shù)據(jù),插件會(huì)把這些數(shù)據(jù)讀進(jìn)管道

  • data collect 插件在讀入這些數(shù)據(jù)之后,會(huì)對(duì)數(shù)據(jù)的格式進(jìn)行判斷,并且封裝成相應(yīng)的 tensor

  • data access 插件負(fù)責(zé)對(duì)這些數(shù)據(jù)進(jìn)行接入,將 tensor 包裝成 tf.Dataset,方便后面進(jìn)行批量數(shù)據(jù)處理和訓(xùn)練

  • 在 data process 插件中,我們將會(huì)對(duì)數(shù)據(jù)做具體的某種處理,包括 shuffle, augment 等操作,這些操作會(huì)用到 Dataset 封裝的一些諸如 map 等操作符,從而在數(shù)據(jù)流中實(shí)時(shí)的進(jìn)行批量處理

  • 隨后,在 model load 中,數(shù)據(jù)會(huì)以 batch 的形式讀入模型進(jìn)行訓(xùn)練

至此,我們可以將數(shù)據(jù)集想象為一組訓(xùn)練數(shù)據(jù)的可迭代集合,如同 Node.js 中的 Stream。每當(dāng)從數(shù)據(jù)集中請(qǐng)求下一個(gè)元素時(shí),內(nèi)部實(shí)現(xiàn)都會(huì)根據(jù)需要進(jìn)行訪問(wèn),并且執(zhí)行預(yù)先設(shè)置好的數(shù)據(jù)處理操作函數(shù)。這種抽象使得模型可以輕松訓(xùn)練大量的數(shù)據(jù)。當(dāng)我們有多個(gè)數(shù)據(jù)集時(shí),Dataset 還便于將數(shù)據(jù)集共享和組織為同一組抽象。

訓(xùn)練模型

TensorFlow.js 分成低階與高階兩組 API。低階的 API 是由 deeplearn.js 衍生,包含搭建模型所需要的 operator (OP), 負(fù)責(zé)處理一些低階如線性代數(shù)的數(shù)據(jù)運(yùn)算等等,來(lái)協(xié)助我們處理機(jī)器學(xué)習(xí)中的數(shù)學(xué)運(yùn)算部分。而高階的 Layers API 則是用來(lái)包裝一些常用的機(jī)器學(xué)習(xí)的算法,同時(shí)允許我們載入訓(xùn)練好的模型,像是由 Keras 學(xué)習(xí)的模型等等。

pipcook 通過(guò)插件的方式開(kāi)發(fā)和運(yùn)行模型,每個(gè) model load 插件會(huì)負(fù)責(zé)加載某一具體的模型,大部分模型基于 tfjs 實(shí)現(xiàn)。同時(shí) tfjs-node 還提供了 gpu 加速等功能,可以提高模型訓(xùn)練的速度。當(dāng)然,現(xiàn)階段由于生態(tài)等原因,對(duì)于一些特定的模型在 tfjs 里面實(shí)現(xiàn)的成本比較高,對(duì)于這一部分問(wèn)題,pipcook 同時(shí)還提供了 python 橋接等方式,可以直接在 js 的運(yùn)行環(huán)境里調(diào)用 python 進(jìn)行訓(xùn)練,對(duì)于這一部分橋接的細(xì)節(jié),我們將會(huì)在后續(xù)的篇章里詳細(xì)介紹。 

部署

對(duì)于一條工業(yè)級(jí)的機(jī)器學(xué)習(xí)流水線,在訓(xùn)練模型完成之后,還需要有一種方式部署您的模型,從而讓模型可以為真實(shí)的業(yè)務(wù)服務(wù),目前 pipcook 部署的方案主要有以下幾種,這些方案都是通過(guò) model deploy 插件完成的:

  • 快速驗(yàn)證方案:很多時(shí)候您可能想要對(duì)您的數(shù)據(jù)和模型進(jìn)行快速的實(shí)驗(yàn),例如使用小批量的數(shù)據(jù)和數(shù)量較少的 epoch,對(duì)于這種場(chǎng)景,我們不需要將模型部署到遠(yuǎn)程再進(jìn)行驗(yàn)證。對(duì)此,pipcook 內(nèi)置了本地部署的插件,在機(jī)器上訓(xùn)練完成之后,pipcook 將會(huì)在本地啟動(dòng)一個(gè)預(yù)測(cè)服務(wù)器,進(jìn)行預(yù)測(cè)服務(wù)

  • 服務(wù)器 docker 鏡像:pipcook 提供了官方鏡像,此官方鏡像包含了 pipcook 訓(xùn)練和預(yù)測(cè)的必要環(huán)境, 您可以直接將此鏡像部署到您的部署主機(jī)上,也可以使用 k8s 等集群解決方案管理 docker 鏡像

  • 云服務(wù)打通:pipcook 將會(huì)在后續(xù)開(kāi)發(fā)中逐漸打通各云服務(wù)廠商的機(jī)器學(xué)習(xí)部署服務(wù),現(xiàn)階段實(shí)際上 Gcloud 已經(jīng)提供了 tfjs 和 automl 的結(jié)合,后續(xù) pipcook 將會(huì)逐漸支持阿里云, AWS 等服務(wù)

和TFX(TensorFlow Extended)的對(duì)比

我們最終的目標(biāo)是一個(gè)成熟的工業(yè)級(jí)的機(jī)器學(xué)習(xí) pipeline,這個(gè) pipeline 可以將出色的模型運(yùn)用于生產(chǎn)環(huán)境,實(shí)際上為了解決這種需求,google 官方基于長(zhǎng)期的實(shí)踐發(fā)布了 TFX,并且開(kāi)源了此項(xiàng)目。那么外界可能會(huì)有一些疑問(wèn),我們所做的事情和 TFX 的區(qū)別是什么,實(shí)際上,pipcook 的核心并不是取代任何其他的框架,尤其是基于 python 生態(tài)的產(chǎn)品,因?yàn)?pipcook 的使命是推動(dòng)前端的智能化發(fā)展,因此,pipcook 所采用的技術(shù)棧以及產(chǎn)品化方式都是面向前端的,像是:

  • TFX 采用的是 DAG 的方式,因?yàn)槠渖婕暗綌?shù)據(jù)生成,對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證,轉(zhuǎn)化數(shù)據(jù)等多種操作,而這些操作可以自由組合,實(shí)際上,對(duì)于很多前端域的場(chǎng)景,我們并不需要很多復(fù)雜的組合操作,因此,pipcook 采用了 pipeline 的方式,對(duì)于數(shù)據(jù)的操作抽象為簡(jiǎn)單的管道中的插件,可以減少前端工程師的使用成本

  • TFX 采用 Apache Airfow 等進(jìn)行調(diào)度,而 pipcook 采用的是前端技術(shù)棧進(jìn)行這類(lèi)操作,例如,我們使用 Rxjs 等響應(yīng)式框架對(duì)不同的 plugin 進(jìn)行響應(yīng)和串聯(lián),方便前端理解和貢獻(xiàn)代碼

  • 同時(shí),我們?cè)O(shè)計(jì)的 API 也是基于 JS 習(xí)慣的,對(duì)前端來(lái)說(shuō)學(xué)習(xí)和上手的成本較低

基于以上這些設(shè)計(jì),我們盡量嘗試去構(gòu)建一個(gè)對(duì)前端友好的機(jī)器學(xué)習(xí)環(huán)境,從而達(dá)到我們的預(yù)期和目標(biāo)。

未來(lái)展望

pipcook 自開(kāi)源以來(lái)已經(jīng)有一段的時(shí)間,期間,也收到了一些用戶(hù)的反饋,同時(shí),根據(jù)我們的規(guī)劃,我們還有很多需要做的事情,我們也期望可以借助開(kāi)源社區(qū)的力量,不斷完善 pipcook,使其可以真正助力前端智能化。

  • 與各云服務(wù)廠商 (阿里云,AWS, Gcloud 等)合作,打通 pipcook 到各個(gè)云服務(wù)機(jī)器學(xué)習(xí)部署鏈路

  • 生態(tài)完善,建立起 pipcook 的試玩廣場(chǎng)等從而降低用戶(hù)的上手成本

  • 更好的支持分布式訓(xùn)練

  • 插件豐富,模型完善,支持更多的 pipeline

未來(lái)我們希望通過(guò)阿里內(nèi)部前端智能化小組和整個(gè)開(kāi)源社區(qū)的力量結(jié)合在一起,不斷完善 pipcook 和 pipcook 背后所代表的前端智能化戰(zhàn)役,讓前端智能化技術(shù)方案普惠化,沉淀更具競(jìng)爭(zhēng)力的樣本和模型,提供準(zhǔn)確度更高、可用度更高的代碼智能生成服務(wù);切實(shí)提高前端研發(fā)效率,減少簡(jiǎn)單的重復(fù)性工作,不加班少加班,一起專(zhuān)注更有挑戰(zhàn)性的工作內(nèi)容!

如何貢獻(xiàn)?

如果您對(duì)我們的項(xiàng)目有興趣并且想要為前端智能化貢獻(xiàn)一份力量,歡迎您前往我們的 github 開(kāi)源倉(cāng)庫(kù)(https://github.com/alibaba/pipcook)


你可能還喜歡????

前端生產(chǎn)方式:過(guò)去10年回顧和未來(lái)10年展望

阿里前端也切圖?不,人工智能幫你做


關(guān)注「Alibaba F2E」

把握阿里巴巴前端新動(dòng)向

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多