機(jī)械雞的雞友經(jīng)常問:如何開始入門深度學(xué)習(xí)語音和其他音頻識(shí)別,例如關(guān)鍵字檢測(cè)或語音命令。 雖然有一些偉大的開源語音識(shí)別系統(tǒng),如Kaldi可以使用神經(jīng)網(wǎng)絡(luò)作為一個(gè)組件,但它們的復(fù)雜性,使得它們難以被用來作簡(jiǎn)單任務(wù)的指南。 目前,找不到免費(fèi)且公開的數(shù)據(jù)集及教程,讓初學(xué)者入門(許多需要在神經(jīng)網(wǎng)絡(luò)模型可以構(gòu)建之前進(jìn)行預(yù)處理),或者非常適合簡(jiǎn)單的關(guān)鍵字檢測(cè)。 為了解決這個(gè)問題,TensorFlow和AIY團(tuán)隊(duì)創(chuàng)建了語音命令數(shù)據(jù)集,并用于將訓(xùn)練*和推理示例代碼在TensorFlow中運(yùn)行。(https://aiyprojects./) 該數(shù)據(jù)集在AIY網(wǎng)站,由成千上萬的用戶,上傳了包含30個(gè)詞的65000條語音數(shù)據(jù),每條數(shù)據(jù)長(zhǎng)度為一秒。數(shù)據(jù)集可以為應(yīng)用程序構(gòu)建基本但有用的語音界面,其中包含“yes”、“no”,'up'和'left'等常用單詞。 想要練手的雞友,要下載預(yù)先構(gòu)建的TensorFlow Android應(yīng)用程序演示,并開啟“TF語音”。你將被要求訪問麥克風(fēng)的權(quán)限,然后查看一個(gè)十個(gè)單詞的列表,每個(gè)單詞應(yīng)該對(duì)應(yīng)你說的話。 結(jié)果將取決于你的語音模式是否被數(shù)據(jù)集覆蓋,因此可能不完美 - 商業(yè)語音識(shí)別系統(tǒng)比此教學(xué)示例復(fù)雜得多。但是,我們希望隨著更多的變化被添加到數(shù)據(jù)集中,隨著社區(qū)對(duì)TensorFlow的改進(jìn),我們將繼續(xù)看到改進(jìn)和擴(kuò)展。 ▍教程 本教程將向你展示如何構(gòu)建識(shí)別十個(gè)不同單詞的基本語音識(shí)別網(wǎng)絡(luò)。 重要的是要知道,真正的語音和音頻識(shí)別系統(tǒng)要復(fù)雜得多,但是像MNIST(入門級(jí)的CV數(shù)據(jù)集)一樣,它應(yīng)該會(huì)讓你對(duì)所涉技術(shù)有一個(gè)基本的了解。 完成本教程后,你將可以嘗試創(chuàng)建一個(gè)模型,將一秒鐘的音頻剪輯去噪,識(shí)別單詞有“yes”,“no”,“up”,“down”,'left','right','on','off','stop',or 'go'。 你也可以在Android應(yīng)用程序中運(yùn)行該模型。 準(zhǔn)備 你要確保已經(jīng)安裝了TensorFlow,由于該版本下載了超過1GB的訓(xùn)練數(shù)據(jù),因此你需要電腦有足夠的內(nèi)存,另外網(wǎng)速要快,訓(xùn)練過程可能需要幾個(gè)小時(shí)。 訓(xùn)練 要開始訓(xùn)練過程,請(qǐng)?jiān)L問TensorFlow源代碼樹并運(yùn)行: python tensorflow/examples/speech_commands/train.py 訓(xùn)練過程將從下載“ 語音命令”數(shù)據(jù)集開始,該數(shù)據(jù)集由65000個(gè)WAVE音頻文件組成,其中有30個(gè)不同的單詞。 這些數(shù)據(jù)是由Google收集的,并根據(jù)CCBY許可證發(fā)布。存檔超過1GB,所以下載可能需要一段時(shí)間,但你應(yīng)該能看到進(jìn)度日志,一旦下載完成,你就不用再次執(zhí)行此步驟了。 下載完成后,你將看到如下所示的日志記錄信息: I0730 16:53:44.766740 55030 train.py:176] Training from step: 1 I0730 16:53:47.289078 55030 train.py:217] Step #1: rate 0.001000, accuracy 7.0%, cross entropy 2.611571 這表明初始化過程已經(jīng)完成,循環(huán)訓(xùn)練已經(jīng)開始。你會(huì)看到它輸出每個(gè)訓(xùn)練步驟的信息。 步驟分解: Step #1表明我們正在循環(huán)訓(xùn)練的第一步。在這種情況下,總共將有18000個(gè)步驟,所以你可以查看步驟號(hào)碼,了解其完成程度有多接近。 rate 0.001000是控制網(wǎng)絡(luò)權(quán)重更新速度的學(xué)習(xí)率。早期的這個(gè)數(shù)字是相對(duì)較高的(0.001),但是對(duì)于后來的訓(xùn)練周期,它會(huì)減少10倍到0.0001。 accuracy 7.0%在這個(gè)訓(xùn)練步驟中正確地預(yù)測(cè)了有多少classes。value函數(shù)往往波動(dòng)很大,但隨著訓(xùn)練的進(jìn)行,平均值會(huì)增加。該模型輸出一個(gè)數(shù)字?jǐn)?shù)組,每個(gè)標(biāo)簽一個(gè),每個(gè)數(shù)字是該類輸入的預(yù)測(cè)可能性。 通過選擇具有最高分?jǐn)?shù)的條目來選擇預(yù)測(cè)的標(biāo)簽,分?jǐn)?shù)總是在零和一之間。 cross entropy 2.611571是我們用來指導(dǎo)培訓(xùn)過程的損失功能的結(jié)果。這是通過比較當(dāng)前訓(xùn)練運(yùn)動(dòng)與正確標(biāo)簽的分?jǐn)?shù)向量獲得的分?jǐn)?shù),這在訓(xùn)練期間應(yīng)該向下傾斜。 經(jīng)過一百步,你應(yīng)該看到這樣的一行: 這是將當(dāng)前訓(xùn)練的權(quán)重保存到checkpoint文件中。如果你的訓(xùn)練腳本中斷,可以查找最后保存的checkpoint,然后: --start_checkpoint=/tmp/speech_commands_train/conv.ckpt-100使用命令行參數(shù)重新 啟動(dòng)腳本, 從那里開始。 混淆矩陣: 四百步后,將記錄以下信息: I0730 16:57:38.073667 55030 train.py:243] ConfusionMatrix: 第一部分是混淆矩陣。要了解這是什么意思,你首先需要知道正在使用的標(biāo)簽,在這種情況下,它們分別表示為靜音、未知yes、no、up、down、left、right、on、off、stop、go。 第一行是所有的靜音剪輯,第二個(gè)剪輯是未知的單詞,第三個(gè)“yes”等。 該矩陣可以比單個(gè)準(zhǔn)確率得分更有用,因?yàn)樗梢院芎玫乜偨Y(jié)出網(wǎng)絡(luò)發(fā)生的錯(cuò)誤。在此示例中,你可以看到除了初始條目之外,第一行中的所有條目都為零。 因?yàn)榈谝恍袑?shí)際上都是靜音的片段,所以這意味著它們都沒有被錯(cuò)誤的標(biāo)注為文字,所以我們沒有任何靜音的否定。這表明網(wǎng)絡(luò)已經(jīng)越來越好地區(qū)分了靜音與談話。 一個(gè)完美的模型將產(chǎn)生一個(gè)混淆矩陣,其中所有的條目都是從對(duì)角線穿過中心的零點(diǎn)。一旦你確定了可以通過添加更多數(shù)據(jù)來解決問題,該模型的方差可以幫助你了解模型怎樣最容易混淆。 驗(yàn)證 混淆矩陣之后,你會(huì)看到如下一行: 將數(shù)據(jù)集分為三類是很好的做法。最大的(大約是數(shù)據(jù)的80%)用于訓(xùn)練網(wǎng)絡(luò),一個(gè)較小的集(10% “validation”)被保留用于評(píng)估訓(xùn)練中的準(zhǔn)確性,另一組10%,“testing”)用于在訓(xùn)練完成后評(píng)估準(zhǔn)確度。 通過將數(shù)據(jù)集分類為訓(xùn)練集、驗(yàn)證集、測(cè)試集,你可以確保該模型適用于之前從未見過的數(shù)據(jù)。測(cè)試集是一個(gè)額外的保障措施,以確保不僅僅是以適用于訓(xùn)練和驗(yàn)證集擬合調(diào)整模型。 訓(xùn)練腳本將數(shù)據(jù)集自動(dòng)分成這三個(gè)類別,上面的記錄行顯示了在驗(yàn)證集上運(yùn)行時(shí)的模型準(zhǔn)確率。理想情況下,這應(yīng)該與訓(xùn)練準(zhǔn)確性相當(dāng)接近。如果訓(xùn)練準(zhǔn)確性增加但驗(yàn)證不是這樣,這表明過度擬合正在發(fā)生,你的模型只是學(xué)習(xí)關(guān)于訓(xùn)練剪輯的東西,而不是真正的訓(xùn)練模式。 Tensorboard 使用Tensorboard可以看出訓(xùn)練進(jìn)展。默認(rèn)情況下,腳本將事件保存到/ tmp / retrain_logs,可以通過運(yùn)行以下命令來加載它們: 然后在瀏覽器中導(dǎo)航到 http:// localhost:6006,將看到顯示模型進(jìn)度的圖表。 完成訓(xùn)練 經(jīng)過幾個(gè)小時(shí)的訓(xùn)練(取決于你的電腦快慢),腳本應(yīng)該已經(jīng)完成了所有18000個(gè)步驟。它將識(shí)別出最終的混淆矩陣,以及準(zhǔn)確率分?jǐn)?shù),全部運(yùn)行在測(cè)試集上。使用默認(rèn)設(shè)置,準(zhǔn)確率在85%到90%之間。 因?yàn)橐纛l識(shí)別在移動(dòng)設(shè)備上特別有用,接下來我們將其導(dǎo)出為,在移動(dòng)平臺(tái)上易于使用的格式。要執(zhí)行此操作,請(qǐng)運(yùn)行以下命令行: python tensorflow/examples/speech_commands/freeze.py \ --start_checkpoint=/tmp/speech_commands_train/conv.ckpt-18000 \ --output_file=/tmp/my_frozen_graph.pb 創(chuàng)建固定模型后,可以使用label_wav.py 腳本進(jìn)行測(cè)試,如下所示: python tensorflow/examples/speech_commands/label_wav.py \ --graph=/tmp/my_frozen_graph.pb \ --labels=/tmp/speech_commands_train/conv_labels.txt \ --wav=/tmp/speech_dataset/left/a5d485dc_nohash_0.wav 可以識(shí)別出三個(gè)標(biāo)簽: left (score = 0.81477) right (score = 0.14139) _unknown_ (score = 0.03808) 跟多內(nèi)容請(qǐng)查看論文:http:///3PW89b ▍在Android應(yīng)用程序中運(yùn)行模型 查看此模型在真實(shí)應(yīng)用程序中如何工作的最簡(jiǎn)單的方法是,下載預(yù)構(gòu)建的Android演示應(yīng)用程序并將其安裝在手機(jī)上(http:///4n1pym)。 你會(huì)看到“TF Speech”出現(xiàn)在應(yīng)用程序列表中,打開它將顯示我們剛剛訓(xùn)練過單詞列表,從“yes”和“no”開始。 你還可以自己構(gòu)建此應(yīng)用程序,因?yàn)樗情_源的, 并可作為github上TensorFlow存儲(chǔ)庫(kù)的一部分使用(http:///mfUa8)。默認(rèn)情況下,它從tensorflow.org下載一個(gè)預(yù)先訓(xùn)練的模型,但你可以輕松地用自己訓(xùn)練的模型替換它。 這與本教程中的C ++版本非常相似。如果你調(diào)整了參數(shù),還可以在SpeechActivity中進(jìn)行更新,以獲得與服務(wù)器測(cè)試相同的結(jié)果。 演示應(yīng)用程序,根據(jù)你在固定模型復(fù)制到模型中的標(biāo)簽文本文件,自動(dòng)更新其用戶界面列表,可以輕松地嘗試不同的模型,而無需進(jìn)行任何代碼更改。如果你更改路徑,需要updaye LABEL_FILENAME,MODEL_FILENAME添加到文件。 用大數(shù)據(jù)和機(jī)器學(xué)習(xí)揭示十二星座的真實(shí)面目! 十圖詳解tensorflow數(shù)據(jù)讀取機(jī)制(附代碼) 亞馬遜研發(fā)了一位 ”AI設(shè)計(jì)師“ 馬斯克的Neuralink領(lǐng)銜全球十大腦神經(jīng)科技公司 專訪 ‖ 英特爾&MobileODT宮頸癌篩查比賽第一名團(tuán)隊(duì) 這家主宰700億美元比特幣市場(chǎng)的中國(guó)公司 正在打造比特幣挖礦AI芯片 黑科技!世界上第一支用AI算法釀造的啤酒 長(zhǎng)期招聘志愿者 加入「AI從業(yè)者社群」請(qǐng)備注個(gè)人信息 添加小雞微信 liulailiuwang
|
|