你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS 開發迎來機器學習的春天

iOS 開發迎來機器學習的春天

編輯:IOS開發基礎

logo.jpg

人工智能、機器學習都已走進了我們的日常,尤其是愈演愈熱的大數據更是跟我們的生活息息相關,做 人工智能、數據挖掘的人在其他人眼中感覺是很高大上的,總有一種遙不可及的感覺,在我司也經常會聽到數據科學部的同事們提到 機器學習、數據挖掘 之類的詞。但這些名詞真的跟我們移動開發就沒直接關系了嗎?  
作為移動開發者來說,無時無刻不被這些名詞狠狠地敲打著脆弱的內心。???? ???? ???? 何時才能夠將機器學習、深度學習應用在移動端,敲響移動端機器學習工業化的大門呢?

想象一下,某一天你身處一個完全陌生的環境,周圍都是陌生的事物,而運行在iPhone的某個APP卻對這個環境了如指掌,你要做的就是打開這個APP,輸入你需要了解的事物,iPhone告訴你這個事物的信息,你也就沒有了陌生事物了。世界就在眼前!

如下圖:   

image02.png

上面物體的識別准確率還是蠻不錯的,基本識別出了鍵盤(49%的概率)、鼠標(46%的概率)和水杯(24%的概率)。

但是在某些事物的識別准確度方便卻差強人意,比如下圖:

image01.png

Phone 6被識別成了iPod(59%的概率),而iPod的卻是不怎麼敢認(10%的概率)。想想最崩潰的估計是iPhone 6了,身價直接被降了好幾個等級。

  

wq.jpg

上面的例子來自於TensorFlow官方iOSDemo,暫且不評述TensorFlow的識別准確度如何,畢竟它還年輕,但是僅憑其識別能力的體現,也給機器學習在移動端的運用帶來了無限的可能。

一、TensorFlow(簡稱TF)

去年,Google資深系統專家Jeff Dean在灣區機器學習大會上隆重介紹了其第二代深度學習系統TensorFlow,一時間網絡上針對TensorFlow的文章鋪天蓋地,揭秘TensorFlow:Google開源到底開的是什麼?、Google開源TensorFlow系統,這背後都有什麼門道?、如何評價Google發布的第二代深度學習系統TensorFlow?等等文章,TensorFlow的燎原之火一直在燃燒蔓延著,其GitHub上的開源庫在此文撰寫時,也已經被star:27550,fork:11054了。???? ???? ???? ???? ????

不負眾望,Google一直宣稱平台移植性非常好的TensorFlow,終於在2016年6月27日,發布0.9版本,宣布移動端支持。TensorFlow v0.9 now available with improved mobile support( 有牆???? ),同時也給出了移動端的Demo,對於代碼為生的程序員,身處大數據處理為主導的TalkingData,也小試身手了一把,下載TensorFlow源碼,查看編譯指南,開始跳坑、填坑之路,也成就了此篇拙文的產生。

二、從TensorFlow到iOS靜態庫

對於iOS平台下如何使用TensorFlow,TensorFlow給出了詳細的編譯腳本命令,詳情請查看官方文檔的命令。

第一步. 工具准備

工欲善其事必先利其器,在開始編譯工作之前,需要准備一些編譯所必須的工具:

Homebrew: Mac os x 上包管理工具,具體使用方法可參考Doc。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Homebrew安裝好之後,依次安裝三個輔助性編譯工具:

$ brew install libtool   
$ brew install autoconf   
$ brew install automake

三個工具的含義,請參考:https://en.wikipedia.org/wiki/GNU_Libtool

第二步. 克隆TensorFlow

Google以Apache 2.0開源協議將TensorFlow開源在GitHub上,我們可以直接使用TensorFlow源碼。

在任意你想存放TensorFlow源碼的地方(建議不要放在桌面。^_^),clone項目。

$ git clone https://github.com/tensorflow/tensorflow

第三步. 編譯前准備

在TensorFlow的tensorflow/contrib/makefile/目錄下,有很多可使用的編譯腳本,其中build_all_ios.sh腳本專門用來一鍵編譯TensorFlow iOS靜態庫。雖然可以直接使用此腳本進行一鍵編譯,但是因為有牆,某些依賴需要提前做處理。

 1、下載protobuf

        protobuf 是編譯前唯一需要特殊處理的依賴庫,點擊下載,下載protobuf之後,解壓,備用。

  2、下載googlemock

        雖然protobuf編譯腳本autogen.sh中的googlemock鏈接地址https://googlemock.googlecode.com/files/gmock-1.7.0.zip無法直接下載到,但是細心的人會發現,在浏覽器中輸入                  https://googlemock.googlecode.com/地址後,會跳轉到https://github.com/google/googlemock地址,google在GiHub上的倉庫地址。而GitHub上的倉庫,我們可以直接的下載,克隆等。

我們直接在GitHub上下載googlemock(點擊下載),下載完成後,修改壓縮包名字為gmock-1.7.0.zip,修改後將此壓縮包移至上一步protobuf文件夾目錄下,備用。

 3、修改下載依賴腳本,移除protobuf的下載

在tensorflow/contrib/makefile/目錄下,download_dependencies.sh腳本用來下載相關依賴,打開此腳本文件,注釋掉或者直接刪掉git clone https://github.com/google/protobuf.git ${DOWNLOADS_DIR}/protobuf部分,目的是不讓腳本去下載protobuf。

上面三步准備好後,接下來就進入靜態庫編譯了。

第四步. 一鍵編譯

前面已經知道在TensorFlow文件夾tensorflow/contrib/makefile/目錄下的build_all_ios.sh腳本是用來編譯iOS靜態庫的腳本,因此可以直接執行此腳本,開始靜態庫的編譯工作了。

但是有一個問題大家可能會發現,由於編譯TensorFlow需要用到protobuf,但是protobuf使我們自己手動下載的,該怎麼讓手動下載的protobuf能夠直接讓build_all_ios.sh腳本使用呢?

答案是復制、粘貼。可能有些low,但是有效。執行命令 build_all_ios.sh之後,立即把之前手動下載的protobuf文件夾拷貝進tensorflow/contrib/makefile/downloads目錄。(放心,你拷貝的速度會很快,不會影響編譯的執行的。^_^)

$ build_all_ios.sh

一切准備就緒,接下來就是靜靜的等待編譯完成了。在Mac編譯的過程中,建議插上電源,最好不要讓設備休眠斷電,也最好不要去干別的東西,出去溜達一圈,回來後就看到戰果了。

編譯完成之後,會在tensorflow/contrib/makefile/gen/目錄下看到編譯的結果,關於這些靜態庫該如何使用,自己的項目如何應用,請參考TensorFlow iOS Examples。

三、遇到的問題

1、googlecode.com被牆了,需要翻牆!(目前測試掛了VPN也沒用),這也是上面編譯前准備為什麼要那麼做的原因。

curl: (7) Failed to connect to googlemock.googlecode.com port 443: Operation timed out

解決: 請參考 『第三步. 編譯前准備』。

2、沒有Xcode。

xcrun: error: SDK "iphoneos" cannot be located
xcrun: error: SDK "iphoneos" cannot be located
xcrun: error: unable to lookup item 'PlatformPath' in SDK 'iphoneos'
+ IPHONEOS_PLATFORM=

解決:安裝Xcode,從上面報錯的命令中可以看到,在編譯靜態庫的過程中使用了xcrun,而此命令是xCode本身具有的能力。

3、你的Xcode版本不是7.3或以後,或者你有多個Xcode,而默認的安裝路徑版本不是7.3或以後。

``` error: Xcode 7.3.0 or later is required.

exit 1 ```/

解決:更新Xcode至最新版本,並且保證默認路徑下是最新/版本。

如果Xcode是7.3,並且沒有條件更新Xcode,你可以修改tensorflow/contrib/makefile/compile_ios_tensorflow.sh 裡的REQUIRED_XCODE_VERSION=7.3.0,為REQUIRED_XCODE_VERSION=7.3。(這樣修改,目前還不確定會不會帶來一些其他影響,最好是升級你的Xcode)

想了解TensorFlow在Android平台的使用可以,看看 TalkingData SDK Team 另一篇的技術博客Tensorflow 在 Android 平台的移植

四、參考鏈接

  • TensorFlow 中文社區

  • TensorFlow for Mobile

  • Caffe、TensorFlow、MXnet三個開源庫對比

  • 如何評價Tensorflow和其它深度學習系統

  • 深度學習框架大戰正在進行,誰將奪取“深度學習工業標准”的榮耀?


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved