一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機編程>

iOS11中關(guān)于機器學(xué)習(xí)開發(fā)的新應(yīng)用分析

大?。?/span>0.16 MB 人氣: 2017-09-25 需要積分:1

  WWDC 2017 使一件事情變得非常清楚,那就是:Apple 正在全力以赴地支持「設(shè)備上的機器學(xué)習(xí)」了。

  他們希望 App 的開發(fā)者們能夠盡可能的簡單的加入他們的行列中。

  Apple 去年發(fā)布了可以用于創(chuàng)建基本的卷積神經(jīng)網(wǎng)的 Metal CNN 和 BNNS 框架。今年,Metal 得到了進一步擴展,增加了一個全新的計算機視覺框架,以及 Core ML:一個能夠輕松地將機器學(xué)習(xí)集成到 App 中的工具包。

  

  Core ML framework

  在這片文章中,我將就 iOS 11 和 macOS 10.13 中這些新推出的機器學(xué)習(xí)的內(nèi)容,分享我自己的一些想法和經(jīng)驗。

  Core ML

  Core ML 在 WWDC 上獲得了極大的關(guān)注度,原因很簡單:大部分開發(fā)者希望能夠在他們的 App 中使用這個框架。

  Core ML 的 API 非常簡單。你只能用它做這些事情:

  加載一個訓(xùn)練好的模型

  做出預(yù)測

  收益?。?!

  這看起來好像很有限,但實際上你一般只會在 App 中加載模型和做出預(yù)測這兩件事。

  在 Core ML 之前,加載訓(xùn)練好的模型是非常困難的 —— 實際上,我寫過一個框架來減輕這種痛苦。所以現(xiàn)在我對這一個簡單的兩步過程感到非常高興。

  模型被包含在了一個.mlmodel 的文件中。這是一種新的開源文件格式,用于描述模型中的 layer、輸入輸出、標簽,以及需要在數(shù)據(jù)上產(chǎn)生的任何預(yù)處理過程。它還包括了所有的學(xué)習(xí)參數(shù)(權(quán)重和偏置)。

  使用模型所需的一切都在這一個文件里面了。

  你只需要將 mlmodel 文件放入你的項目中,Xcode 將會自動生成一個 Swift 或 Objective-C 的包裝類,使你能簡單的使用這個模型。

  舉個例子,如果你把文件ResNet50.mlmodel 添加到你的 Xcode 項目中,那么你就可以這么寫來實例化這個模型:

  let model = ResNet50()

  然后做出預(yù)測:

  let pixelBuffer: CVPixelBuffer = /* your image */if let prediction = try? model.prediction(image: pixelBuffer) {

  print(prediction.classLabel)

  }

  這差不多就是所有要寫的東西了。你不需要編寫任何代碼來加載模型,或者將其輸出轉(zhuǎn)換成可以從 Swift 直接使用的內(nèi)容 —— 這一切都將由 Core ML 和 Xcode 來處理。

  注意: 要了解背后發(fā)生了什么,可以在 Project Navigator 里選擇 mlmodel 文件,然后點擊 Swift generated source 右邊的箭頭按鈕,就能夠查看生成的幫助代碼了。

  Core ML 將決定自己到底是在 CPU 上運行還是 GPU 上運行。這使得它能夠充分的利用可以用的資源。Core ML 甚至可以將模型分割成僅在 GPU 上執(zhí)行的部分(需要大量計算的任務(wù))以及 CPU 上的其他部分(需要大量內(nèi)存的任務(wù))。

  Core ML 使用 CPU 的能力對于我們開發(fā)者來說另一個很大的好處是:你可以從 iOS 模擬器運行它,從而運行那些對于 Metal 來說做不到,同時在單元測試中也不太好的任務(wù)。

  Core ML 支持什么模型?

  上面的 ResNet50 例子展示的是一個圖像分類器,但是 Core ML 可以處理幾種不同類型的模型,如:

  支持向量機 SVM

  諸如隨機森林和提升樹的決策樹集成

  線性回歸和 logistic 回歸

  前饋神經(jīng)網(wǎng)、卷積神經(jīng)網(wǎng)、遞歸神經(jīng)網(wǎng)

  所有這些模型都可以用于回歸問題和分類問題。此外,你的模型可以包含這些典型的機器學(xué)習(xí)預(yù)處理操作,例如獨熱編碼(one-hot encoding)、特征縮放(feature scaling)、缺失值處理等等。

  Apple 提供了很多已經(jīng)訓(xùn)練好的模型,例如 Inception v3、ResNet50 和 VGG16 等,但你也可以使用 這個 Python 庫來轉(zhuǎn)換自己的模型。

  目前,你可以轉(zhuǎn)換使用 Keras、Caffe、scikit-learn、XGBoost 和 libSVM 訓(xùn)練的模型。轉(zhuǎn)換工具只會支持具體指定的版本,比如 Keras 支持 1.2.2 但不支持 2.0。辛運的是,該工具是開源的,所以毫無疑問它將來會支持更多的訓(xùn)練工具包。

  如果這些都不行,你還是可以隨時編寫自己的轉(zhuǎn)換器。mlmodel 文件格式是開源且可以直接使用的(由 Apple 制定發(fā)布的一種 protobuf 格式)

  局限

  如果你想在你的 App 上馬上運行一個模型, Core ML 很不錯。然而使用這樣一個簡單的 API 一定會有一些限制。

  僅支持有監(jiān)督學(xué)習(xí)的模型,無監(jiān)督學(xué)習(xí)和增強學(xué)習(xí)都是不行的。(不過有一個「通用」的神經(jīng)網(wǎng)絡(luò)類型支持,因此你可以使用它)

  設(shè)備上不能進行訓(xùn)練。你需要使用離線工具包來進行訓(xùn)練,然后將它們轉(zhuǎn)換到 Core ML 格式。

  如果 Core ML 不支持某種類型的 layer,那么你就不能使用它。在這一點上,你不能使用自己的 kernel 來擴展 Core ML。在使用 TensorFlow 這樣的工具來構(gòu)建通用計算圖模型時,mlmodel 文件格式可能就不那么靈活了。

  Core ML 轉(zhuǎn)換工具只支持特定版本的數(shù)量有限的訓(xùn)練工具。例如,如果你在 TensorFLow 中訓(xùn)練了一個模型,則無法使用此工具,你必須編寫自己的轉(zhuǎn)換腳本。正如我剛才提到的:如果你的 TensorFlow 模型具有一些 mlmodel 不支持的特性,那么你就不能在 Core ML 上使用你的模型。

  你不能查看中間層的輸出,只能獲得最后一層網(wǎng)絡(luò)的預(yù)測值。

  我感覺下載模型更新會造成一些問題,如果你不想每次重新訓(xùn)練模型的時候都重寫一個新版本的 App,那么 Core ML 不適合你。

  Core ML 對外屏蔽了它是運行在 CPU 上還是 GPU 上的細節(jié) —— 這很方便 —— 但你必須相信它對你的 App 能做出正確的事情。即便你真的需要,你也不能強迫 Core ML 運行在 GPU 上。

  如果你能夠忍受這些限制,那么 Core ML 對你來說就是正確的選擇。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?