在Data Collector中如何使用TensorFlow實現(xiàn)實時機器學(xué)習(xí)
譯文
【51CTO.com快譯】
不知您是否已注意到,只有當(dāng)業(yè)務(wù)用戶和應(yīng)用程序能夠訪問到不同來源的原始數(shù)據(jù)和聚合數(shù)據(jù),并及時生成基于數(shù)據(jù)驅(qū)動的洞見時,他們才能真正認識到現(xiàn)代化DataOps平臺的真正價值。憑借著機器學(xué)習(xí)(Machine Learning,ML)技術(shù),數(shù)據(jù)分析師和科學(xué)家們可以利用各種歷史數(shù)據(jù),在離線或?qū)崟r的狀態(tài)下,使用TensorFlow等技術(shù),協(xié)助做出更好的數(shù)據(jù)驅(qū)動類業(yè)務(wù)決策。
在本文中,您將學(xué)習(xí)到:如何使用StreamSets Data Collector 3.5.0(請參見-- https://streamsets.com/products/sdc)和StreamSets Data Collector Edge(請參見-- https://streamsets.com/documentation/datacollector/latest/help/datacollector/UserGuide/Edge_Mode/EdgePipelineTypes.html#concept_c14_m4r_4bb)最新發(fā)布的TensorFlow Evaluator(請參見--https://streamsets.com/documentation/datacollector/latest/help/datacollector/UserGuide/Processors/TensorFlow.html#concept_otg_csh_z2b),將TensorFlow(TF)模型用于各種預(yù)測和分類。
在深入討論細節(jié)之前,我們先一起理清幾個基本概念。
機器學(xué)習(xí)
Arthur Samuel將其描述為:“是一個研究如何讓計算機在無需事先做好明確編程的情況下,自動開展學(xué)習(xí)的領(lǐng)域。”隨著機器學(xué)習(xí)技術(shù)的發(fā)展,如今的電腦已經(jīng)能夠做出與人類相似、甚至更好的預(yù)測。在解決問題的方式上,機器學(xué)習(xí)通常分為兩大類:
監(jiān)督學(xué)習(xí)
維基百科的定義為:監(jiān)督學(xué)習(xí)是一項能夠根據(jù)給定示例中的“輸入輸出對(input-output pair)”,將實際輸入映射到輸出的學(xué)習(xí)任務(wù)。當(dāng)歷史數(shù)據(jù)被根據(jù)其結(jié)果進行了標記之后,它可以通過構(gòu)建一個準確的模型,來預(yù)測各種結(jié)果。
監(jiān)督學(xué)習(xí)能夠解決的常見業(yè)務(wù)問題包括:
- 二選一分類(學(xué)習(xí)預(yù)測分類值)
- 客戶是否會購買某個產(chǎn)品?
- 某種癌癥病例是惡性還是良性?
- 多種分類(學(xué)習(xí)預(yù)測分類值)
- 在給定的文本中是否帶有病毒、或內(nèi)容不健康?
- 給定的花卉屬于哪種科目和種類?
- 回歸(學(xué)習(xí)預(yù)測連續(xù)值)
- 房屋的預(yù)售價格是多少?
- 明天舊金山是幾度?
無監(jiān)督學(xué)習(xí)
無監(jiān)督學(xué)習(xí)處理的是我們幾乎不太了解、或完全不知道輸出的問題。由于需要構(gòu)建的模型無法使用到過往數(shù)據(jù)的標簽,因此它需要根據(jù)數(shù)據(jù)中變量之間的關(guān)系,對數(shù)據(jù)進行聚類以得出結(jié)構(gòu)。
無監(jiān)督學(xué)習(xí)的兩種常見方法分別是:K-means聚類(請參見-- https://en.wikipedia.org/wiki/K-means_clustering)和DBSCAN(請參見-- https://en.wikipedia.org/wiki/DBSCAN)。
值得注意的是:Data Collector和Data Collector Edge中的TensorFlow Evaluator當(dāng)前都僅支持監(jiān)督學(xué)習(xí)模型。
神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)
神經(jīng)網(wǎng)絡(luò)是機器學(xué)習(xí)算法的一種形式,它可以學(xué)習(xí)和使用某種受到人腦結(jié)構(gòu)啟發(fā)而設(shè)計出的計算模型。與其他諸如決策樹、邏輯回歸等機器學(xué)習(xí)算法相比,神經(jīng)網(wǎng)絡(luò)具有很高的準確性。而深度學(xué)習(xí)是神經(jīng)網(wǎng)絡(luò)的子集,它允許網(wǎng)絡(luò)在嵌套的層次結(jié)構(gòu)中,表示出各種各樣的概念。常見的神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)應(yīng)用程序包括:
- 計算機視覺/圖像識別/物體檢測
- 語音識別/自然語言處理(NLP)
- 推薦系統(tǒng)(產(chǎn)品推介、婚介交友等)
- 異常檢測(網(wǎng)絡(luò)安全等)
TensorFlow
由Google Brain團隊創(chuàng)建的TensorFlow,是專為深度神經(jīng)網(wǎng)絡(luò)而設(shè)計的開源式機器學(xué)習(xí)框架。TensorFlow不但能夠在Windows和Mac OS上,也能夠在CPU、GPU和TPU上,支持可擴展、且可移植式的模型訓(xùn)練。目前,它是GitHub上最受歡迎、且最活躍的機器學(xué)習(xí)項目之一。
Data Collector中的TensorFlow
通過TensorFlow Evaluator,您可以創(chuàng)建出承載數(shù)據(jù)/功能的管道,并在包含的環(huán)境中產(chǎn)生各種預(yù)測或分類。您無需通過初始化HTTP或REST API調(diào)用,便可訪問那些被公布為Web服務(wù)的機器學(xué)習(xí)模型。例如,數(shù)據(jù)在被存儲到最終目的地之前,往往會經(jīng)過若干個階段,而Data Collector的各種管道就可以實時地檢測到諸如欺詐性交易、或是通過對文本進行自然語言處理,以采取進一步的處理或決策。
此外,借助Data Collector Edge,您可以在Raspberry Pi(請參見--https://www.raspberrypi.org/)或其他支持此類平臺(請參見--https://streamsets.com/documentation/datacollector/latest/help/datacollector/UserGuide/Edge_Mode/SupportedPlatforms.html#concept_yxr_b5q_4bb)的設(shè)備上,運行啟用TensorFlow機器學(xué)習(xí)的管道。例如,檢測高風(fēng)險地區(qū)的洪水等自然災(zāi)害發(fā)生的概率。
應(yīng)用案例
讓我們來考慮一個如何將乳腺癌腫瘤分類為惡性或良性的用例。通過使用由scikit-learn模型(請參見--http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html)提供的乳腺癌經(jīng)典數(shù)據(jù)集,我使用Python構(gòu)建列一個可用于訓(xùn)練和導(dǎo)出的簡單TF模型。您可以通過鏈接—https://github.com/iamontheinet/datascience/blob/master/Breast_Cancer/breast_cancer_training.py,來查看我在GitHub上的代碼。作為一個最簡單的用例,我在模型的創(chuàng)建和訓(xùn)練中,只用到了幾個隱藏層。不過,您可以留意其中的TensorFlow SavedModelBuilder(請參見--https://www.tensorflow.org/api_docs/python/tf/saved_model/builder/SavedModelBuilder)是如何使用支持的語言(如Python),以及諸如Jupiter Notebook(請參見--http://jupyter.org/)的交互式環(huán)境,來導(dǎo)出和保存模型的。
在TensorFlow SavedModelBuilder訓(xùn)練并導(dǎo)出模型后,您只要將模型保存在Data Collector或Data Collector Edge可以訪問到的位置,就可以非常簡便地在數(shù)據(jù)流管道中進行預(yù)測或分類了。
管道概述
下圖展示了上述用例的管道細節(jié)。其中:
- 目錄來源(Directory Origin):
- 此處會從.csv文件中加載乳腺癌的數(shù)據(jù)記錄。注意:您可以將此處輸入的數(shù)據(jù)源輕松地替換為其他來源,包括:Kafka、AWS S3、MySQL等。
- 場轉(zhuǎn)換器(Field Converter):
- 該處理器將對所有帶有乳腺癌記錄特征的輸入,從字符串到浮點型在均值上進行各種轉(zhuǎn)換。
- TF評估器(TensorFlow Evaluator,其配置如下圖):
- 已保存的模型路徑:指定TF模型的位置,以用于預(yù)訓(xùn)練。
- 模型標簽:在我們的導(dǎo)出模型中,由于元圖(meta graph)旨在用于服務(wù),因此被需要設(shè)置為“serve”。如您想了解更多詳細信息,請參考tag_constants.py(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/tag_constants.py)和相關(guān)的TensorFlow API文檔(https://www.tensorflow.org/api_docs/python/tf/saved_model/tag_constants)。
- 輸入配置:指定在訓(xùn)練和導(dǎo)出模型期間配置的輸入張量(tensor)信息。請參閱訓(xùn)練模型,并使用TensorFlow SavedModelBuilder來保存與導(dǎo)出部分(https://github.com/iamontheinet/datascience/blob/master/Breast_Cancer/neural_networks_with_tensorflow-breast-cancer.ipynb)。
- 輸出配置:指定訓(xùn)練和導(dǎo)出模型期間配置的輸出張量信息(請同樣請參閱上述鏈接)。
- 輸出字段:我們需要存儲分類值的輸出記錄字段。
- 表達式評估器(Expression Evaluator):
- 該處理器評估模型的輸出與分類值是0還是1(通常存儲在輸出字段TF_Model_Classification中),并且據(jù)此分別創(chuàng)建一個具有“良性”或“惡性”特征“條件(Condition)”的新記錄字段。
- 流選擇器(Stream Selector):
- 通評估癌癥的狀況(良性或惡性),它將記錄發(fā)送給各個Kafka生產(chǎn)者(producer)。
- Kafka生產(chǎn)者(Kafka producer):
- 各種輸入記錄連同模型的輸出/分類值,會被有條件地路由到兩個Kafka生產(chǎn)者處,以進一步處理與分析。(請注意:此處的目標可以被輕松地替換為其他目標,包括:AWS S3、MySQL、以及NoSQL等)
值得注意的是:相對于TensorFlow Evaluator產(chǎn)生的模型輸出,該示例的管道階段其實是選配的。您可以根據(jù)用例的要求,與其他處理器和目標進行相互替換。
管道的執(zhí)行
在預(yù)覽(或執(zhí)行)管道時,那些輸入的乳腺癌記錄,會通過上述數(shù)據(jù)流的管道階段進行傳遞,并包含針對TensorFlow模型所提供的服務(wù)。發(fā)送給Kafka生產(chǎn)者的最終輸出記錄(如上圖所示),會包括用于分類乳腺癌的模型特征;在用戶定義的字段TF_Model_Classification中,輸出的模型值(0或1);以及由表達式評估器創(chuàng)建的字段條件,進而表示癌癥狀況是良性還是惡性。
總結(jié)
上面給大家簡單地介紹了由Data Collector 3.5.0新發(fā)布的TensorFlow Evaluator的用法。通過該evaluator,您可以提供出經(jīng)過訓(xùn)練的TF模型,進而在無需額外編寫任何自定義代碼的情況下,生成各種預(yù)測和分類。
原標題:Real-Time Machine Learning With TensorFlow in Data Collector,作者: Dash Desai
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】
































