當(dāng) Tensorflow 遇見 Android

深度學(xué)習(xí)的模型有很多币旧,但是考慮到移動端的硬件限制排拷,并不是所有模型都適合移植,在這里整理一下適合移植的模型咒劲。

圖片


“凍結(jié)”計(jì)算圖

train.py 將計(jì)算圖定義保存在了 .pb 文件當(dāng)中会放。遺憾的是饲齐,大家無法直接將該計(jì)算圖加載至應(yīng)用當(dāng)中。完整的計(jì)算圖中包含的操作目前還不受TensorFlow C++/Java API的支持鸦概。正因?yàn)槿绱寺嵴牛覀儾判枰褂蒙蠄D中的工具。其中 freeze_graph 負(fù)責(zé)獲取 .pb 以及包含有 w 與 b 訓(xùn)練結(jié)果值的 checkpoint 文件窗市。其還會移除一切在移動端之上不受支持的操作先慷。

在 tensorflow 目錄下運(yùn)行該工具:

bazel-bin/tensorflow/python/tools/freeze_graph \ 
--input_graph=/tmp/voice/graph.pb --input_checkpoint=/tmp/voice/model \
--output_node_names=model/y_pred,inference/inference --input_binary \
--output_graph=/tmp/voice/frozen.pb 

以上命令將在 frozen.pb 當(dāng)中創(chuàng)建一套經(jīng)過簡化的計(jì)算圖,其僅具備 y_pred 與 inference 兩個節(jié)點(diǎn)咨察,不包含任何用于訓(xùn)練的計(jì)算圖節(jié)點(diǎn)论熙。

使用 freeze_graph 的好處在于,其還將固定該文件中的權(quán)重值摄狱,這樣大家就無需分別進(jìn)行權(quán)重值加載了:frozen.pb中已經(jīng)包含我們需要的一切脓诡。而 optimize 工具則負(fù)責(zé)對計(jì)算圖進(jìn)行進(jìn)一步簡化。其將作為 grozen.pb 文件的輸入內(nèi)容媒役,并寫入 inference.pb 作為輸出結(jié)果祝谚。我們隨后會將此文件嵌入至應(yīng)用當(dāng)中。使用以下命令運(yùn)行該工具:

bazel-bin/tensorflow/python/tools/optimize_for_inference \ 
--input=/tmp/voice/frozen.pb --output=/tmp/voice/inference.pb \
--input_names=inputs/x --output_names=model/y_pred,inference/inference \
--frozen_graph=True

實(shí)現(xiàn)過程

  • 了解模型結(jié)構(gòu)(LeNet酣衷、AlexNet交惯、VGG、Incetption V3...)
  • 在 pc 端做 遷移學(xué)習(xí) (深度學(xué)習(xí)訓(xùn)練需要數(shù)周時(shí)間、遷移學(xué)習(xí)只需幾小時(shí))席爽,保存為 pb 模型

    注:遷移學(xué)習(xí)是利用已有模型意荤,在最后一層進(jìn)行重新分類訓(xùn)練
  • 在 pc 端進(jìn)行簡單的模型準(zhǔn)確度驗(yàn)證
  • 對 pb 模型進(jìn)行優(yōu)化、壓縮移植到移動端(可以使模型大小減小75%只锻,精度僅略微下降)
  • 在移動端恢復(fù)模型
  • 模型產(chǎn)品化

在移動端要做的事情不多玖像,一般來說,只需完成以下工作:

  • 從.pb文件中加載計(jì)算圖與權(quán)重值
  • 利用此計(jì)算圖創(chuàng)建一項(xiàng)會話
  • 將您的數(shù)據(jù)放置在一個輸入張量內(nèi)
  • 在一個或者多個節(jié)點(diǎn)上運(yùn)行計(jì)算圖
  • 從輸出結(jié)果張量中獲取結(jié)果z

demo: 實(shí)時(shí)識別出是哪一種公仔(coin 存錢罐齐饮、羊年公仔捐寥、猴年公仔)

聲音

訓(xùn)練集 由3,168個聲音樣本組成,并區(qū)分為男聲和女聲祖驱。通過分析聲音的20種聲學(xué)特性上真,可以達(dá)到99%的準(zhǔn)確度。
可以看一下基于這個訓(xùn)練集的 web 應(yīng)用: What is Your Voice Gender?
識別效果圖:



下載該數(shù)據(jù)集并打開 voice.csv 文件之后羹膳,大家會看到其中包含著一排排數(shù)字:

這里列出的并非實(shí)際音頻數(shù)據(jù),這些數(shù)字代表著語音記錄當(dāng)中的不同聲學(xué)特征根竿。這些屬性或者特征由一套腳本自音頻記錄中提取得出陵像,并被轉(zhuǎn)化為這個 CSV 文件。具體提取方式可點(diǎn)擊此處查閱 R 源代碼寇壳。

每一項(xiàng)示例中存在20項(xiàng)聲學(xué)特征醒颖,例如:

  • 以kHz為單位的平均頻率
  • 頻率的標(biāo)準(zhǔn)差
  • 頻譜平坦度
  • 頻譜熵
  • 峰度
  • 聲學(xué)信號中測得的最大基頻
  • 調(diào)制指數(shù)
  • 等等……

在以下示意圖當(dāng)中,大家可以看到這20個數(shù)字全部接入一個名為 sum 的小框壳炎。這些連接擁有不同的 weights(權(quán)重)泞歉,對于分類器而言代表著這20個數(shù)字各自不同的重要程度。

sum = x[0]*w[0] + x[1]*w[1] + x[2]*w[2] + ... + x[19]*w[19] + b

數(shù)組 w 中的權(quán)重與值 b 代表著此分類器所學(xué)習(xí)到的經(jīng)驗(yàn)匿辩。對該分類器進(jìn)行訓(xùn)練的過程腰耙,實(shí)際上是為了幫助其找到與 w 及 b 正確匹配的數(shù)字。最初铲球,我們將首先將全部 w 與 b 設(shè)置為0挺庞。在數(shù)輪訓(xùn)練之后,w 與 b 則將包含一組數(shù)字稼病,分類器將利用這些數(shù)字將輸入語音中的男聲與女聲區(qū)分開來选侨。為了能夠?qū)?sum 轉(zhuǎn)化為一條概率值——其取值在0與1之間——我們在這里使用 sigmoid 函數(shù):

 y_pred = 1 / (1 + exp(-sum))   

如果 sum 是一個較大正數(shù),則 sigmoid 函數(shù)返回1或者概率為100%; 如果 sum 是一個較大負(fù)數(shù)然走,則 sigmoid 函數(shù)返回0援制。因此對于較大的正或者負(fù)數(shù),我們即可得出較為肯定的“是”或者“否”預(yù)測結(jié)論芍瑞。
現(xiàn)在 y_pred 中包含的預(yù)測結(jié)果顯示晨仑,該語音為男聲的可能性更高。如果其概率高于0.5,則我們認(rèn)為語音為男聲; 相反則為女聲寻歧。

決策樹:

移植到安卓端:


floatValues 數(shù)組:這里面保存的是20種聲音聲學(xué)特性

如果大家希望在一款應(yīng)用程序當(dāng)中使用此分類器掌栅,通過錄音或者來自麥克風(fēng)的音頻信息檢測語音性別,則首先需要從此類音頻數(shù)據(jù)中提取聲學(xué)特征码泛。在擁有了這20個數(shù)字之后猾封,大家即可對其分類器加以訓(xùn)練,并利用其判斷語音內(nèi)容為男聲還是女聲噪珊。
更多參考資料:
http://www.primaryobjects.com/2016/06/22/identifying-the-gender-of-a-voice-using-machine-learning
https://github.com/primaryobjects/voice-gender
http://www.infoq.com/cn/articles/getting-started-with-tensorflow-on-ios

char-rnn

char-rnn 是一個字符水平的語言模型晌缘,通過訓(xùn)練文本文件可以預(yù)測序列中下一個出現(xiàn)的字符,并以此來生成完整的文本痢站。

應(yīng)用場景

  • 寫武俠小說
  • 訓(xùn)練汪峰歌詞可以得到汪峰風(fēng)格的歌詞

我在這里中的夜里
就像一場是一種生命的意旪
就像我的生活變得在我一樣
可我們這是一個知道
我只是一天你會怎嗎

可我們這是我們的是不要為你

我們想這有一種生活的時(shí)候

我在哭泣
我不能及你的時(shí)光
我是我們在這是一種無法少得可以沒有一天
我們想這樣
我們遠(yuǎn)在一場我在我一個相多地在此向
可我是個想已經(jīng)把我的時(shí)候
我看到在心悄一種痛定的時(shí)候

我看著我的感覺在飛歌
我不能在這多在心中
就像在我一瞬間
我的生命中的感覺
我在我一次到孤獨(dú)所
我們在這是一看可以是一場我們在這樣
我在這里失命
我不能在這感覺在天里
夜里
夜里
沒有一天 我想心的是不嗎到了

  • 寫古詩

優(yōu)勢:對于大多數(shù)用戶來說磷箕,不在乎詩的平仄、韻律阵难,而在于其中的意境(用戶鐘愛情詩和藏頭詩)

目前在云 GPU 上完成模型的訓(xùn)練岳枷,并在 pc 上實(shí)現(xiàn)自動寫詩功能

奇了了不為
點(diǎn)石上風(fēng)煙
你憑欄干將
好事系在邊

參考文章:
http://www.infoq.com/cn/articles/getting-started-with-tensorflow-on-ios
https://www.zhihu.com/question/21329754
https://github.com/primaryobjects/voice-gender
深度學(xué)習(xí)1--淺談char-rnn三種模型

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市呜叫,隨后出現(xiàn)的幾起案子空繁,更是在濱河造成了極大的恐慌,老刑警劉巖朱庆,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盛泡,死亡現(xiàn)場離奇詭異,居然都是意外死亡娱颊,警方通過查閱死者的電腦和手機(jī)傲诵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箱硕,“玉大人拴竹,你說我怎么就攤上這事÷” “怎么了殖熟?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斑响。 經(jīng)常有香客問我菱属,道長,這世上最難降的妖魔是什么舰罚? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任纽门,我火速辦了婚禮,結(jié)果婚禮上营罢,老公的妹妹穿的比我還像新娘赏陵。我一直安慰自己饼齿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般待牵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上证鸥,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機(jī)與錄音勤晚,去河邊找鬼枉层。 笑死,一個胖子當(dāng)著我的面吹牛赐写,可吹牛的內(nèi)容都是我干的鸟蜡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼挺邀,長吁一口氣:“原來是場噩夢啊……” “哼揉忘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起端铛,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤癌淮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沦补,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咪橙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年夕膀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片美侦。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡产舞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出菠剩,到底是詐尸還是另有隱情易猫,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布具壮,位于F島的核電站准颓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棺妓。R本人自食惡果不足惜攘已,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怜跑。 院中可真熱鬧样勃,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辫樱,卻和暖如春峭拘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搏熄。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工棚唆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人心例。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓宵凌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親止后。 傳聞我的和親對象是個殘疾皇子瞎惫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容