廣東一哥再生資源科技有限公司
結(jié)業(yè)安排用到了tensorflow, 邇來在看其github庫時創(chuàng)造tf 不妨在大哥大上運轉(zhuǎn)。 官方的鏈接
所以就依照官方的教程用Bazel 編寫翻譯 Tensorflow 情況,并參考這一篇教程, 演練一個分門別類本人數(shù)據(jù)匯合的模子(fine tuning Inception net)并把它安置在了安卓大哥大上。
截止如次:
底下我會引見下怎樣實行此操縱。
試驗情況
Ubuntu 16.04 LTS (Win10 也不妨,但基礎(chǔ)是Bazel 要勝利地安置,而且本子在4.5之上)
Tensorflow 1.0 (此時的tf本子仍舊革新到了1.2)
安卓大哥大(魅族)
擺設(shè)情況
1,安置Bazel
這個不妨參考官方教程。Ubuntu 安置Bazel 很簡單, 但倡導(dǎo)先安置和擺設(shè)Java
1.1 安置Java 8 你不妨參考這個教程
1.2 以此實行如次吩咐:
echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.listcurl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -sudo apt-get update && sudo apt-get install bazelsudo apt-get upgrade bazel提防確定要提防Bazel 的本子. 輸出 bazel version 去檢查。
2, 載入Tensorflow源碼和 Android studio 以及 Android ndk, 運轉(zhuǎn)官方的demo
2.1 載入tensorflow (事前安置好git東西,要不 cmd 輸出 sudo apt-get install git )
cmd下輸出
git clone https://github.com/tensorflow/tensorflow提防用 git checkout origin/r1.0 切換到本子1.0 (也不妨不實行此操縱然而有一點各別的場合,在作品結(jié)束指明)
2.2 載入 Android studio 和Android ndk
提防sdk 的本子要在23.0.3之上,最佳是24或 25。 (最新的是25.0.3)用Android studio 內(nèi)里自帶的 SDK manager 革新下SDK的本子。
ndk 不妨到官方網(wǎng)站載入。 以次是載入截止。載入后解壓。
2.3 擺設(shè)tensorflow代碼根目次下的 WORKSPACE文獻
廢除解釋,竄改你對應(yīng)的sdk和ndk的本子號以及path
# Uncomment and update the paths in these entries to build the Android demo.android_sdk_repository( name = "androidsdk", api_level = 25, build_tools_version = "25.0.3", # Replace with path to Android SDK on your system path = "/home/lxt-bupt/Android/Sdk", #)#android_ndk_repository( name="androidndk", path="/home/lxt-bupt/Android/android-ndk-r12b",# api_level=21)3 用Bazel 編寫翻譯Tensorflow 的Android 情況在編寫翻譯之前,先載入妥協(xié)壓 demo的model文獻(Imagenet dataset演練出來的)
curl -L https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip -o /tmp/inception5h.zipcurl -L https://storage.googleapis.com/download.tensorflow.org/models/mobile_multibox_v1.zip -o /tmp/mobile_multibox_v1.zipunzip /tmp/inception5h.zip -d tensorflow/examples/android/assets/unzip /tmp/mobile_multibox_v1.zip -d tensorflow/examples/android/assets/而后運轉(zhuǎn)
bazel build -c opt //tensorflow/examples/android:tensorflow_demo運轉(zhuǎn)時報protocol 的缺點時,運轉(zhuǎn) git submodule update --init 吩咐,從新編寫翻譯。
這個編寫翻譯功夫很長,功夫會展示很多的warning 即使勝利的話,會得出如次截止。
此時在tensorflow代碼根目次/bazel-bin/tensorflow/examples/android下,會有 tensorflow_demo.apk 此時不妨把該文獻挪動得手機上安置,
會有3個app 天生如次圖, 這3個app即是tensorflow 官方的demo。辨別用來分門別類,檢驗和測定,和變動圖片的作風(fēng)。
3,用本人的數(shù)據(jù)finetuning Inception模子。
1,籌備本人的數(shù)據(jù)。
本人的數(shù)據(jù)集有5個類型, 可樂,可樂,芬達,農(nóng)民山泉,怡寶, 新創(chuàng)造一個data目次
2,Bazel 編寫翻譯retrain 模塊
在根目次下輸出:
bazel build tensorflow/examples/image_retraining:retrain編寫翻譯功夫很長,細心等候, 提防大概要安置少許Python的依附庫numpy mock 之類
3, 演練本人的模子
在tensorflow根目次下興建model目次(寄存演練后的模子)和retrain_logs目次(記載演練進程,再不于用tensorboard可視化),接著輸出如次吩咐:
note: 再有其余的參數(shù)不妨采用,不妨看 tensorflow/examples/image_retraining/retrain.py 文獻中有哪些不妨采用.
bazel-bin/tensorflow/examples/image_retraining/retrain\ --bottleneck_dir=./model/bottlenecks \ --how_many_training_steps 4000 \ --model_dir=./model/inception \ --output_graph=./model/retrained_graph.pb \ --output_labels=./model/retrained_labels.txt \ --image_dir ./data/ \ --summaries_dir ./retrain_logs/發(fā)端了演練進程(先創(chuàng)造bottlenecks,再發(fā)端演練4000次迭代,注企圖片方法是jpeg,要不會報錯)
演練結(jié)束后會在model目次下有retrained_graph.pb (模子) 和 retrain_labels.txt (標簽) 兩個文獻
4,優(yōu)化和嘗試模子
必需要舉行如次build操縱, 在根目次順序輸出如次Bazel吩咐: (仍舊是長久的等候進程)
bazel build tensorflow/python/tools:optimize_for_inferencebazel build tensorflow/examples/label_image:label_image4.1 優(yōu)化模子
在根目次下輸出如次吩咐:
bazel-bin/tensorflow/python/tools/optimize_for_inference \--input=./model/retrained_graph.pb \--output=./model/optimized_graph.pb \--input_names=Mul \--output_names=final_result4.2用優(yōu)化后的模子嘗試圖片
取一張可樂的圖片放到model目次下嘗試,輸出如次吩咐: 你也不妨嘗試其余的圖片:)
bazel-bin/tensorflow/examples/label_image/label_image \--output_layer=final_result \--labels=./model/retrained_labels.txt \--image=./model/img28.jpg \--graph=./model/optimized_graph.pb截止如次圖:
4.3 竄改關(guān)系的java文獻, /tensorflow/tensorflow/examples/android/src/org/tensorflow/demo 目次下的ClassifierActivity.java文獻
竄改關(guān)系行
依照下圖去每個值的巨細:
并把上述兩個文獻移(optimized_graph.pb 和 retrained_labels.txt)動到 /tensorflow/tensorflow/examples/android/assets 目次下
5,安置模子到安卓大哥大
5.1 從新編寫翻譯Android 情況
根目次輸出:
bazel build -c opt //tensorflow/examples/android:tensorflow_demo
5.2 把新的apk文獻放到安卓大哥大上安置,結(jié)果運轉(zhuǎn)tf_classify ,功效如次圖
專題推薦: