新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > DeepDetect――機器學習框架的API統一

        DeepDetect――機器學習框架的API統一

        作者: 時間:2016-10-15 來源:網絡 收藏

        ,一個專為深度學習的開源API和服務。 的API 簡單直觀、易用、通用和易擴展。

        本文引用地址:http://www.104case.com/article/201610/307675.htm

        在其他貢獻者的幫助下,他集成了 Caffe , XGBoost 和 Tensorflow (很快將完成),并且未對原服務或者API修改。

        XGBoost梯度提升法樹是深度模型常用的算法。Tensorflow支持分布式訓練模型和數據,并且能很好的支持LSTM和RNNs神經網絡算法。Caffe擅長處理圖像和文本數據。讓你在這些深度學習框架間自由轉換。

        下面將介紹實現通用深度學習API的主要原則。同時也期待大家貢獻出一些想法和評價來提高DeepDetect。

        創業公司期待構建一個可認證的深度學習的SaaS API,可擴展,并能快速市場化、產品化;

        企業期待與已有系統可以無縫銜接,剛開始數據流比較慢,后續模型需要隨著數據的增加而進行優化。并且對應的技術可以復制到其他項目中或者部門。

        符合上述兩個要求的開源項目有搜索引擎 Elasticsearch ,可擴展搜索引擎,清晰的REST風格API和完全JSON化的輸入/輸出數據結構。

        那深度學習API集成服務該怎樣實現呢?下面給出幾點:

        無需重寫:深度學習()就像密碼學,只需生成一次。無需重寫對存在多種深度學習庫是非要重要的;

        無縫轉換:開發和產品發布具有相同的環境會加快測試和發布周期,避免出現bug;

        簡化命令行:簡單、人性化的輸入/輸出格式,比如JSON格式。簡單即是王道;

        產品化:專業的服務生命周期更期待在數據預測,而不是訓練模型。

        如果有一種通用服務能融合以上的點,簡單且強悍的API,它將會同時滿足開發人員和企業訴求,并且在開發和產品之間無縫切換。它將會采用JSON數據格式,用單一框架和其他深度學習和機器學習開發庫,并隱藏各代碼間的內部復雜性。

        DeepDetect機器學習API核心部分是資源和數據輸入/輸出格式。資源過去是指服務器資源,而不是指機器學習服務。此種設計的原因是GPU和內存在POST機器學習服務作業時是緊缺資源。讓他們看看有哪些核心資源:

        服務器信息:通過GET目錄/info獲取服務器信息;

        機器學習服務管理:通過PUT(創建一個機器學習服務)、GET(獲得一個機器學習服務狀態)和POST(更新一個機器學習服務)目錄/services進行機器學習服務的管理;

        模型訓練:通過POST(創建一個新的訓練作業)、GET(獲取一個訓練作業的狀態)和DELETE(取消一個訓練作業)目錄/train進行模型訓練;

        數據預測:通過POST(發送數據到服務)目錄/predict進行數據預測。

        所以服務包括機器學習服務、模型訓練和數據預測,這些服務資源是統計模型上兩種主要操作。在這個階段監督學習服務和無監督學習服務沒什么區別。

        機器學習的主要參數是輸入或預處理、統計學習和最終輸出,映入腦海里的是:input,mllib和output三種。mllib指定支持的機器學習庫,input和output不寫自明。下面是一個例子,創建一個圖像分類的服務:

        PUT /services/imageserv

        {

        “description”: “image classification service”,

        “mllib”: “caffe”,

        “model”: {

        “repository”: “/path/to/models/imgnet”,

        “templates”: “../templates/caffe/”

        },

        “parameters”: {

        “input”: {

        “connector”: “image”

        },

        “mllib”: {

        “nclasses”: 1000,

        “template”: “googlenet”

        },

        “output”: {

        }

        },

        “type”: “supervised”

        }

        參數一般包括input,mllib和output,監督學習服務和無監督學習服務通過調整輸出connector設置。input connector處理輸入格式,支持CSV、libsvm和text等格式,包括圖像和特征。mllib部件指定的是服務創建、訓練和預測模型的機器學習庫,非常方便的引用各機器學習庫的參數,并且保留了參數標志。

        下面給出一個CSV格式的input connector例子:

        “input”: {

        “id”: “Id”,

        “label”: “Cover”,

        “separator”: “,”,

        “shuffle”: true,

        “test_split”: 0.1

        }

        下面是一個典型訓練模型的output connector:

        “output”: {

        “measure”: [

        “acc”,

        “mcll”,

        “f1”

        ]

        }

        接下來給出一個復雜點的輸出,Mustache格式的輸出模版(標準化的JSON格式可以轉化成任意其他的格式):

        {

        “network”: {

        “http_method”: “POST”,

        “url”: “http://localhost:9200/images/img

        },

        “template”: “{ {{#body}}{{#predictions}} ”uri”:”{{uri}}”,

        ”categories”: [ {{#classes}} { ”category”:”{{cat}}”,”score”:

        {{prob}} } {{^last}},{{/last}}{{/classes}} ] {{/predictions}}

        {{/body}} }”

        }

        上述模版可以使監督學習分類結果直接輸入Elasticsearch并生成索引,詳情見http://www.deepdetect.com/tutorials/es-image-classifier 。注意到network對象,其POST到輸出服務器,這個對象也可以用在input connector連接遠程輸入源。

        上面的模版是一個典型的DeepDetect服務器監督分類JSON輸出:

        “body”: {

        “predictions”: {

        “classes”: [

        {

        “cat”: “n03868863 oxygen mask”,

        “prob”: 0.24278657138347626

        },

        ],

        “loss”: 0.0,

        “uri”: “http://i.ytimg.com/vi/0vxOhd4qlnA/maxresdefault.jpg”

        }

        上述的例子在集成到已存項目管道是不需要“膠水”代碼,這很好的滿足了許多企業的需求。

        下面快速瀏覽下mllib組件,包括Caffe和XGBoost:

        // Caffe

        “mllib”:{

        gpu:true,

        net:{

        batch_size:128

        },

        solver: {

        test_interval:1000,

        iterations:16000,

        base_lr:0.01,

        solver_type:SGD

        }

        }

        // XGBoost

        mllib: {

        iterations: 100,

        objective: multi:softprob

        }

        對于Caffe的例子,服務器使用了GPU,其他參數包括solver和learning rate等。對于XGBoost例子,參數iterations和objective被設置。

        接下來重要的部分是數據預測,觀察機器學習服務生命周期重要的是基于數據進行預測:

        curl -X POST 'http://localhost:8080/predict' -d

        '{service:covert,parameters:{input:

        {id:Id,”separator”:,}},data:[test.csv]}'

        這里mllib部分省略掉了,有時在深度網絡中抽取特征時mllib是有用的。在非監督學習中是相似的,輸出是一個張量,而不是一個類或者回歸對象:

        mllib:{extract_layer:pool5/7x7_s1}

        最后總結,這歌機器學習API的核心點:

        可讀性:所有的數據結構是簡單、人性化的;

        通用性:監督學習服務和無監督學習服務的通用API;

        REST風格和可編程的API:這個API通過網絡獲取,但保留C++原有標志;

        “虛構”性;能夠很容易的學習增加的特征和資源,比如,為多個預測實現服務鏈。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 凤台县| 赤城县| 太白县| 汾西县| 广东省| 威远县| 教育| 屏东市| 洞头县| 淮北市| 乌审旗| 额济纳旗| 锡林郭勒盟| 洪湖市| 通山县| 通化市| 柳州市| 南汇区| 共和县| 鄢陵县| 布尔津县| 许昌市| 基隆市| 都昌县| 泸水县| 遵化市| 休宁县| 治县。| 理塘县| 巧家县| 北京市| 磴口县| 辽阳市| 高邮市| 仙游县| 龙海市| 阿拉善盟| 邯郸县| 新疆| 金华市| 涟水县|