TensorFlow,從一個 Android Demo 開始

TensorFlow Android Demo 項目地址html

Machine Learning

既然提到了 TensorFlow,那是否是得神經網絡、機器學習瞭解下?java

若是你能堅持把 機器學習速成課程 給啃完了,以爲還挺有興趣的,那能夠考慮更深刻的展開。這份 機器學習速成課程 是 Google 特別爲中國開發者提供的學習教程,此次就沒理由再抱怨 GFW 阻礙了咱們學習的步伐了。android

可是,想要深刻學習這塊得花大功夫,雖然說是速成教程,但對我而言,就算是前提條件其實也要挺多花時間才能達到吧。因此只能是簡單地整理下相關基本概念,至少得對機器學習的一些概念和大體流程的有必定的瞭解。git

機器學習的基本概念github

簡單概括來講,機器學習分爲兩個階段:算法

  1. 訓練階段:經過對有標籤的樣本數據進行訓練獲得合適的最佳模型api

  2. 推測階段:根據模型對無標籤的樣本數據進行推段獲得結果(標籤)網絡

在對模型的進行訓練的過程當中,要考慮特徵跟標籤的關係推斷所形成的偏差,經過計算損失來反覆調整計算參數來獲得最佳模型。這個過程有不少方式進行,好比下圖的機器學習算法訓練過程用的是迭代試錯方法:框架

迭代試錯方法過程機器學習

想要自行設計訓練一個全新的模型,對開發人員掌握的基礎知識仍是不少的,可是咱們能夠利用現有的開源模型,經過新的樣本數據集來 retrain 一個屬於本身的模型。

在具備一個合適的模型之後,就能夠進入推斷階段了。好比能夠考慮在 Android 平臺上經過 TensorFlow 框架來實現對模型的實際應用。咱們能夠找到一個識別花朵類型的模型,而後就能夠實現一個屬於本身的拍照識花的應用了。想一想是否是以爲還不錯,趕忙乾了這碗雞湯。

步子邁太大很差,下面就從 Google 爲咱們提供的 TensorFlow Demo 開始,先了解一些實際的應用場景。

1. 下載 TensorFlow 源代碼

git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git

使用 --recurse-submodules clone 項目是 Google 的建議,能夠防止 protobuf 編譯出現一些問題。

2. 安裝 Bazel

Bazel 是 Google 開源的構建工具,Bazel 聽說是數倍於 maven 的性能,快速的增量構建是它的特點,目前支持 java、cpp、Go 等語言。TensorFlow 項目的構建依賴於它來構建,更多關於 Bazel 的相關內容能夠了解Bazel 官網

  1. 經過 Homebrew 安裝 Bazel
brew install bazel
  1. 安裝完成後驗證是否能正常運行
bazel version
  1. 若是要檢查版本更新
brew upgrade bazel

其餘平臺安裝 Bazel 按照可參考:Installing Bazel

3. 設置 WORKSPACE 中 NDK 和 SDK 的路徑配置

找到從 GitHub 下載的 TensorFlow 源碼文件夾 tensorflow,修改 WORKSPACE 文件

找到 WORKSPACE 文件中 NDK 和 SDK 的配置部分,反註釋掉原有代碼後,按照版本要求填寫本身本地環境配置。
注意:NDK 版本要設置爲 14b ,若是選擇 NDK 16 版本編譯會出現未知問題!

# Uncomment and update the paths in these entries to build the Android demo.
android_sdk_repository(
     name = "androidsdk",
     api_level = 26,
     # Ensure that you have the build_tools_version below installed in the
     # SDK manager as it updates periodically.
     build_tools_version = "26.0.2",
     # Replace with path to Android SDK on your system
     path = "/Users/baishixian/Library/Android/sdk",
 )
#
android_ndk_repository(
    name="androidndk",
    path="/Users/baishixian/Library/Android/sdk/android-ndk-r14b",
    # This needs to be 14 or higher to compile TensorFlow.
    # Please specify API level to >= 21 to build for 64-bit
    # archtectures or the Android NDK will automatically select biggest
    # API level that it supports without notice.
    # Note that the NDK version is not the API level.
    api_level=25)

Google 對於此問題的相關說明:The Android NDK is required to build the native (C/C++) TensorFlow code. The current recommended version is 14b, which may be found here.
NDK 16, the revision released in November 2017, is incompatible with Bazel. See here.

4. 編譯運行 example 項目

找到下載的 tensorflow 目錄,其中 tensorflow/tensorflow/examples/android 路徑下,是 Google 提供的 example 項目 for Android,咱們能夠經過編譯運行該項目瞭解在 Android 平臺上實現的幾個典型的應用場景實力。

經過 Android Studio 進行編譯

使用 Android Studio 找到對應的項目目錄打開,修改 ndk 的環境配置後,點擊編譯運行便可。

經過命令行進行

經過命令行進入 tensorflow 目錄,也就在 WORKSPACE 所在的項目根目錄。

1. 編譯項目

bazel build -c opt //tensorflow/examples/android:tensorflow_demo

2. 安裝應用

adb install -r bazel-bin/tensorflow/examples/android/tensorflow_demo.apk

具體可參照項目 GitHub 上的 doc for Android examples 文檔。

這是我編譯好的安裝文件: TensorFlow Demo

運行效果

Demo

在使用 demo 過程當中以爲這個實時分析相機圖像數據幀來識別物品類別的演示效果挺不錯的。

TensorFlower Classify

後面將利用這個已有的數據模型,從一個應用開發者的角度使用 TensorFlow 來構建一個簡單的應用。

接下來請看個人另一篇文章:基於現有 TensorFlow 模型構建 Android 應用

做者:石先 連接:https://www.jianshu.com/p/834bf90036c3 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。

相關文章
相關標籤/搜索