Core ML 機器學習

来源:http://www.cnblogs.com/jukaiit/archive/2017/06/09/6973063.html
-Advertisement-
Play Games

在WWDC 2017開發者大會上,蘋果宣佈了一系列新的面向開發者的機器學習 API,包括面部識別的視覺 API、自然語言處理 API,這些 API 集成了蘋果所謂的 Core ML 框架。Core ML 的核心是加速在 iPhone、iPad、Apple Watch 上的人工智慧任務,支持深度神經網 ...


在WWDC 2017開發者大會上,蘋果宣佈了一系列新的面向開發者的機器學習 API,包括面部識別的視覺 API、自然語言處理 API,這些 API 集成了蘋果所謂的 Core ML 框架。Core ML 的核心是加速在 iPhone、iPad、Apple Watch 上的人工智慧任務,支持深度神經網路、迴圈神經網路、捲積神經網路、支持向量機、樹集成、線性模型等。

概覽

藉助 Core ML,您可以將已訓練好的機器學習模型,集成到自己的應用當中。

支持操作系統:iOS 、macOS 、tvOS 、watchOS

 

 

所謂已訓練模型 (trained model),指的是對一組訓練數據應用了某個機器學習演算法後,所生成的一組結果。舉個例子,通過某個地區的歷史房價來訓練出一個模型,那麼只要指定房間有幾卧幾衛,就有可能對未來該房間的房價做出預測。

 

Core ML 是領域特定 (domain-specific) 框架和功能的基礎所在。Core ML 為 Vision 提供了圖像處理的支持,為 Foundation 提供了自然語言處理的支持(例如 NSLinguisticTagger 類),為 GameplayKit 提供了對學習決策樹 (learned decision tree) 進行分析的支持。Core ML 本身是基於底層基本類型而建立的,包括 AccelerateBNNS 以及 Metal Performance Shaders 等。

 

 

Core ML 針對設備的性能進行了優化,最大限度地減少記憶體占用和功耗。通過在設備上運行的嚴格要求,不僅保護了用戶數據隱私,而且當網路連接丟失的時候,還能夠保證應用能正常工作和響應。

 

獲取 Core ML 模型

 

獲取 Core ML 模型,以便能在您的應用當中使用。

 

Core ML 支持多種機器學習模型,其中包括了神經網路 (Neural Network)、組合樹 (Tree Ensemble)、支持向量機 (Support Vector Machine) 以及廣義線性模型 (Generalized Linear Model)。Core ML 的運行需要使用 Core ML 模型格式(也就是以 .mlmodel 擴展名結尾的模型)。

 

Apple 提供了一些常見的開源模型供大家使用,這些模型已經使用了 Core ML 模型格式。您可以自行下載這些模型,然後就可以開始在應用中使用它們了。此外,其他的研究機構和大學都發佈了不少機器學習模型和訓練數據,這些往往都不是以 Core ML 模型格式發佈出來的。如果您打算使用這些模型的話,需要對它們進行轉換,具體內容詳見「將已訓練模型轉換為 Core ML」。

 

將 Core ML 模型集成到應用中

 

嚮應用中添加一個簡單的模型,然後向模型中傳入輸入數據,並對模型的預測值進行處理。

 

點擊此處下載示例應用。

 

概述

 

本示例應用使用了一個已訓練模型 MarsHabitatPricer.mlmodel,用以預測火星上的殖民地價值。

 

將模型添加到 Xcode 項目中

 

要想將模型添加到 Xcode 項目當中,只需要將模型拖曳進項目導航器 (project navigator) 當中即可。

 

您可以通過在 Xcode 中打開這個模型,從而來查看它的相關信息,其中包括有模型類型以及其預期輸入和輸出。模型的輸入為太陽能板和溫室的數量,以及殖民地的規模大小(以英畝為單位)。模型的輸出則是對這個殖民地價值的預測。

 

 

用代碼創建模型

 

Xcode 同樣也會使用模型的輸入輸出信息,來自動為模型生成一個自定義的編程介面,從而就可以在代碼當中與模型進行交互。對於這個 MarsHabitatPricer.mlmodel 而言,Xcode 會生成相應的介面,來分別表示模型本身(MarsHabitatPricer)、模型輸入 (MarsHabitatPricerInput) 以及模型輸出 (MarsHabitatPricerOutput)。

 

使用所生成的 MarsHabitatPricer 類的構造器,便可以創建這個模型:

 

let model = MarsHabitatPricer()

 

獲取輸入值以傳遞給模型

 

示例應用使用了 UIPickerView,以便從用戶那裡獲取模型的輸入值。

 

func selectedRow(for feature: Feature) -> Int {

    return pickerView.selectedRow(inComponent: feature.rawValue)

}

 

let solarPanels = pickerDataSource.value(for: selectedRow(for: .solarPanels), feature: .solarPanels)

let greenhouses = pickerDataSource.value(for: selectedRow(for: .greenhouses), feature: .greenhouses)

let size = pickerDataSource.value(for: selectedRow(for: .size), feature: .size)

 

使用模型來進行預測

 

MarsHabitatPricer 類會生成一個名為 prediction(solarPanels:greenhouses:size:) 方法,從而就可以根據模型的輸入值來預測價值,在本例當中,輸入值為太陽能板的數量、溫室的數量以及殖民地的規模大小(以英畝為單位)。這個方法的結果為一個 MarsHabitatPricerOutput 實例,這裡我們將其取名為 marsHabitatPricerOutput。

 

guard let marsHabitatPricerOutput = try? model.prediction(solarPanels: solarPanels, greenhouses: greenhouses, size: size) else {

    fatalError("Unexpected runtime error.")

}

 

通過讀取 marsHabitatPricerOutput 的 price 屬性,就可以獲取所預測的價值,然後就可以在應用的 UI 當中對這個結果進行展示。

 

let price = marsHabitatPricerOutput.price

priceLabel.text = priceFormatter.string(for: price)

 

註意

所生成的 prediction(solarPanels:greenhouses:size:) 方法會拋出異常。在使用 Core ML 的時候,您大多數時候遇到的錯誤通常是:傳遞給方法的輸入數據類型與模型預期的輸入類型不同——例如,用錯誤格式表示的圖片類型。在示例應用當中,預期的輸入類型為 Double。所有的類型不匹配錯誤都會在編譯時被捕獲,如果遇到了某種錯誤,那麼示例應用就會彈出一個致命錯誤。

 

構建並運行 Core ML 應用

 

Xcode 會將 Core ML 模型編譯到資源當中,從而進行優化並能夠在設備上運行。優化過的模型表徵會包含在您的應用程式包當中,在應用在設備上運行的時候,就可以用之來進行預測。

 

將已訓練模型轉換為 Core ML

 

將由第三方機器學習工具所創建的已訓練模型,轉換為 Core ML 模型格式。

 

概述

 

如果您已經使用了第三方機器學習工具來創建和訓練模型,只要這個工具是受支持的,那麼就可以使用 Core ML Tools 來將這些模型轉換為 Core ML 模型格式。表 1 列出了我們支持的模型和第三方工具。

 

註意

Core ML Tools 是一個 Python 包 (coremltools),並掛載在 Python Package Index (PyPI) 上。要瞭解關於 Python 包的更多信息,請參閱 Python Packaging User Guide

 

 

模型轉換

 

您可以使用 Core ML 轉換器,並根據對應的模型第三方工具,來對模型進行轉換。通過調用轉換器的 convert 方法,然後再將結果保存為 Core ML 模型格式 (.mlmodel)。

 

例如,如果您的模型是使用 Caffe 來創建的,您可以將 Caffe 模型 (.caffemodel) 傳遞給 coremltools.converters.caffe.convert 方法。

 

import coremltools

coreml_model = coremltools.converters.caffe.convert('my_caffe_model.caffemodel')

 

然後將結果保存為 Core ML 模型格式。

 

coreml_model.save('my_model.mlmodel')

 

根據您模型的不同,您可能會需要更新輸入、輸出以及相關的參數標簽,或者您還可能會需要聲明圖片名稱、類型以及格式。轉換工具內置了更詳細的文檔,因為可用的選項因工具而異。

 

或者,還可以編寫自定義的轉換工具

 

如果您需要轉換的格式不在表 1 當中,那麼您可以創建自己的轉換工具。

 

編寫自定義的轉換工具,包括了將模型的輸入、輸出和架構表示轉換為 Core ML 模型格式。您可以通過將每一層模型架構,以及層之間的連接關係進行定義,來實現這個操作。您可以通過 Core ML Tools 所提供的轉換工具作為參考;它們演示瞭如何將各種第三方工具創建的模型類型,轉換為 Core ML 模型格式。

 

註意

Core ML 模型格式由一系列 Protocol Buffer 文件所定義,具體信息請參見 Core ML Model Specification

 

Core ML API

 

直接使用 Core ML API,從而支持自定義工作流以及更為高級的用例。

 

在絕大多數情況下,您只需要與模型動態生成的介面進行交互即可,也就是說當您將模型添加到 Xcode 項目當中的時候,這個介面就由 Xcode 自動創建完畢了。您可以直接使用 Core ML API,以便支持自定義工作流或者更為高級的用例。舉個例子,如果您需要將輸入數據非同步收集到自定義結構體,從而來執行預測的話,那麼您就可以讓這個結構體實現 MLFeatureProvider 協議,從而來為模型提供輸入功能。

 

具體的 API 列表請參見 Core ML API


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • iOS CAShapeLayer、CADisplayLink 實現波浪動畫效果 效果圖 代碼已上傳 GitHub:https://github.com/Silence GitHub/CoreAnimationDemo 可以自定義波浪高度、寬度、速度、方向、漸變速度、水的深度等參數。 實現原理 波浪的 ...
  • 作者:Antonio Leiva 時間:Jun 6, 2017 原文鏈接:https://antonioleiva.com/interfaces-kotlin/ 與Java相比,Kotlin介面允許你重用更多的代碼。 原因非常簡單:你能夠向你的介面加代碼。如果你已經試用過Java8,這非常類似。 能 ...
  • 瞭解這一章節,需要先瞭解LayoutInflater這個工具類,我以前分析過:http://www.cnblogs.com/kezhuang/p/6978783.html Window是Activity類中的一個全局變數,Window的作用是輔助Activity(也有可能是其他組件,本章拿Activ ...
  • LayoutInflater是用來解析XML佈局文件,然後生成對象的ViewTree的工具類。是這個工具類的存在,才能讓我們寫起Layout來那麼省勁。 我們接下來進去刨析,看看裡邊的奧秘 我們在使用這個類的時候,通常都是像上面這樣寫,首先通過from函數獲取對象,在調用inflate方法,來生成相 ...
  • Android中整個的View的組裝是採用組合模式。 ViewGroup就相當與樹根,各種Layout就相當於枝幹,各種子View,就相當於樹葉。 至於View類。我們就當它是個種子吧。哈哈! ViewGroup屬於樹根,可以生長數很多枝幹(繼承自定義Layout)而枝幹上有可以長出很多葉子(Tex ...
  • Runtime學習 應用源碼學習   Runtime源碼分析,帶你瞭解OC實現過程。其中參考了大量的大神的代碼以及文獻,裡面也有個人的見解,歡迎拍磚,歡迎交流。 兩種常見使用場景 根據調試信息,發現兩者的區別是: 第一種進入到 第二種繞一個遠路,先初始化 兩者最終進入到如下方法 ...
  • Android實現定時任務一般會使用以上(Handler Timer Thread AlarmManager CountDownTimer)五種方式。當然還有很多組合使用(比如Handler+Thread 比如Handler類自帶的postDelyed 比如Handler+Timer+TimerTa ...
  • 簡單的說,就是當dispatchTouchEvent在進行事件分發的時候,只有前一個事件(如ACTION_DOWN)返回true,才會收到ACTION_MOVE和ACTION_UP的事件。 dispatchTouchEvent 和 onTouchEvent 可以通過return true 消費事件, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...