1. 程式人生 > >tensorflow學習筆記(四十):tensorflow語音識別 及 python音訊處理庫

tensorflow學習筆記(四十):tensorflow語音識別 及 python音訊處理庫

tensorflow 語音識別

最近在做語音識別的專案,現在專案告一段落,就把最近碰到的東西做一個總結。

python中關於語音處理的庫

  • scipy.io.wavfile
  • python_speech_features
  • librosa : 讀取各種格式的音訊;特徵提取

  • 讀取wav檔案

import scipy.io.wavfile as wav
fs, audio = wav.read(file_name)
  • 對讀取的音訊資訊求MFCC(Mel頻率倒譜系數)
from python_speech_features import mfcc
from python_speech_features import
delta #求MFCC processed_audio = mfcc(audio, samplerate=fs) #求差分(一階,二階) delta1 = delta(processed_audio, 1) delta2 = delta(processed_audio, 2)

pydub

github 專案地址
有了這個庫,做音訊的資料增強就容易多了.關於使用方法可以閱讀 github上的文件,這裡只對raw_data做一些說明.

raw_audio_data = sound.raw_data 

raw_audio_data 中包含的是 音訊資料的bytestring,但是如果我們想對音訊資料做MFCC

,那麼我們應該怎麼辦呢?

audio = np.fromstring(raw_audio_data, dtype=np.int16)
#此時audio是一個一維的ndarray,如果音訊是雙聲道,
#我們只需要對其進行reshape就可以了
audio = np.reshape(audio, [-1, 2]) 

# 然後就可以使用python_speech_features做進一步操作了

tensorflow中做語音識別會碰到的API

這個部分包括了SparseTensor, sparse_tensor_to_dense,edit_distance

SparseTensor(indices, values, dense_shape)

  • indices: 一個2D的 int64 Tensor,shape為(N, ndims),指定了sparse tensor中的索引, 例如: indices=[[1,3], [2,4]]說明,dense tensor中對應索引為[1,3], [2,4]位置的元素的值不為0.

  • values: 一個1D tensor,shape(N)用來指定索引處的值. For example, given indices=[[1,3], [2,4]], the parameter values=[18, 3.6] specifies that element [1,3] of the sparse tensor has a value of 18, and element [2,4] of the tensor has a value of 3.6.

  • dense_shape: 一個1D的int64 tensor,形狀為ndims,指定dense tensor的形狀.

相對應的有一個tf.sparse_placeholder,如果給這個sparse_placeholder喂資料呢?

sp = tf.sparse_placeholder(tf.int32)

with tf.Session() as sess:
  #就這麼喂就可以了
  feed_dict = {sp:(indices, values, dense_shape)}

tensorflow中目前沒有API提供denseTensor->SparseTensor轉換

tf.sparse_tensor_to_dense(sp_input, default_value=0, validate_indices=True, name=None)

把一個SparseTensor轉化為DenseTensor.

  • sp_input: 一個SparceTensor.

  • default_value:沒有指定索引的對應的預設值.預設為0.

  • validate_indices: 布林值.如果為True的話,將會檢查sp_inputindiceslexicographic order和是否有重複.

  • name: 返回tensor的名字字首.可選.

tf.edit_distance(hypothesis, truth, normalize=True, name=’edit_distance’)

計算序列之間的Levenshtein 距離

  • hypothesis: SparseTensor,包含序列的假設.

  • truth: SparseTensor, 包含真實序列.

  • normalize: 布林值,如果值True的話,求出來的Levenshtein距離除以真實序列的長度. 預設為True

  • name: operation 的名字,可選.

返回值:
返回值是一個R-1維的DenseTensor.包含著每個SequenceLevenshtein 距離.

SparseTensor所對應的DenseTensor是一個多維的Tensor,最後一維看作序列.

CTCloss

現在用深度學習做語音識別,基本都會在最後一層用CTCloss,這個loss自己實現起來還是有點費勁,不過,幸運的是,tensorflow中已經有現成的API了,我們只需呼叫即可。

tf.nn.ctc_loss(labels, inputs, sequence_length, preprocess_collapse_repeated=False, ctc_merge_repeated=True)

此函式用來計算ctc loss.

  • labels:是一個int32SparseTensor, labels.indices[i, :] == [b, t] 表示 labels.values[i] 儲存著(batch b, time t)id.

  • inputs:一個3D Tensor (max_time * batch_size * num_classes).儲存著 logits.(通常是RNN接上一個線性神經元的輸出)

  • sequence_length: 1-D int32 向量, size[batch_size]. 序列的長度.此 sequence_length 和用在dynamic_rnn中的sequence_length是一致的,使用來表示rnn的哪些輸出不是pad的.

  • preprocess_collapse_repeated:設定為True的話,tensorflow會對輸入的labels進行預處理,連續重複的會被合成一個.

  • ctc_merge_repeated: 連續重複的是否被合成一個

返回值:
一個 1-D float Tensor, size[batch], 包含著負的 logp.加起來即為batch loss.

tf.nn.ctc_greedy_decoder(inputs, sequence_length, merge_repeated=True)

上面的函式是用在訓練過程中,專注與計算loss,此函式是用於inference過程中,用於解碼.

  • inputs:一個3D Tensor (max_time * batch_size * num_classes).儲存著 logits.(通常是RNN接上一個線性神經元的輸出)

  • sequence_length: 1-D int32 向量, size[batch_size]. 序列的長度.此 sequence_length 和用在dynamic_rnn中的sequence_length是一致的,使用來表示rnn的哪些輸出不是pad的.

返回值:
一個tuple (decoded, log_probabilities)

  • decoded: 一個只有一個元素的list. decoded[0]是一個SparseTensor,儲存著解碼的結果.

    • decoded[0].indices: 索引矩陣,size為(total_decoded_outputs * 2),每行中儲存著[batch, time ].
    • decoded[0].values: 值向量,size(total_decoded_outputs).向量中儲存的是解碼的類別.
    • decoded[0].shape: 稠密Tensorshape, size為(2).shape的值為[batch_size, max_decoded_length].
  • log_probability: 一個浮點型矩陣(batch_size*1)包含著序列的log 概率.

tf.nn.ctc_beam_search_decoder(inputs, sequence_length, beam_width=100, top_paths=1,merge_repeated=True)

另一種尋路策略。

知道這些,就可以使用tensorflow搭建一個簡單的語音識別應用了。

參考資料

相關推薦

tensorflow學習筆記tensorflow語音識別 python音訊處理

tensorflow 語音識別 最近在做語音識別的專案,現在專案告一段落,就把最近碰到的東西做一個總結。 python中關於語音處理的庫 scipy.io.wavfile python_speech_features librosa : 讀取各種

機器學習筆記TensorFlow實戰TensorBoard視覺化

1 - 引言 前面已經介紹到TensorFlow可以實現許多非常常用的神經網路結構,有的網路結構十分複雜,裡面的引數關係更是難以管理。因此,TensorFlow提供了一個視覺化工具TensorBoard。可以有效的展示執行過程中的計算圖、各種指標隨著時間的變化趨勢以及訓練中使用到的影象等

Android學習筆記Preference的使用

                Preference直譯為偏好,博友建議翻譯為首選項。一些配置資料,一些我們上次點選選擇的內容,我們希望在下次應用調起的時候依然有效,無須使用者再一次進行配置或選擇。Android提供preference這個鍵值對的方式來處理這種情況,自動儲存這些資料,並立時生效,同時Andr

tensorflow學習筆記十三使用 tfdbg 來 debug

由於 tensorflow 在訓練的時候是在後臺執行的,所以使用 python 的 debug 工具來 debug tensorflow 的執行過程是不可行的,為此,官方提供了一款debug 工具,名為 tfdbg 有很多人覺得,為了 debug tensor

python學習筆記異常處理

錯誤 fetchall nbsp 如果 info blog months api root 1 def calc(a,b): 2 res=a/b 3 return res 4 def main(): 5 money=input(‘輸入多少

Java for Web學習筆記訊息和叢集5利用websocket實現訂閱和釋出

叢集中的訂閱和釋出 利用spring framework在本app內的訂閱和釋出十分簡單。當我們系統越來越複雜的時候,我們需要向其他app釋出訊息。本學習將給出一個通過websocket來實現不同app之間訊息的訂購和釋出。 在小例子中,我們在所有節點之間都建立webSoc

Pro Android學習筆記Fragment7切換效果

利用fragment transaction進行切換,很方便提供切換的效果。 利用setTransition() 通過setTransition()我們可以設定有限幾個切換效果,程式碼如下:     protected void addFragmentToStack(int index){       

tensorflow學習筆記二十三variable與get_variable

Variable tensorflow中有兩個關於variable的op,tf.Variable()與tf.get_variable()下面介紹這兩個的區別 tf.Variable與tf.get_variable() tf.Variable(ini

Java for Web學習筆記Log2配置log4j2

相關maven <!-- log4j-api提供logging的API。這是log4j2中唯一需要在compile時加入,含有你所需的所有類 --> <dependency> <groupId>org.apache.loggin

Pro Android學習筆記ActionBar3搜尋條

ActionBar中的搜尋條 我們同樣可以在Action Bar中嵌入搜尋條。在小例子中,我們在action bar中嵌入一個搜尋框的widget(稱為search view)。當我們輸入搜尋內容,能夠在指定的activity中開啟(稱為searchable activitiy),本例不做實質的搜尋,只是

Unity3D學習筆記Rect、Canvas、Toggle、Slider、ScrollBar

png 批量添加 事件 func 快捷鍵 resource engine 選中 創建 Rect Transform(錨點):圖片中心的四個點,界面以雪花形式顯示 當四個點在一起的時候組成錨點,當四個點分開的時候組成錨框(合則錨點,分則錨框) Anchors: ---

Unity3D學習筆記Lua

path 單行 一個數 eat 之間 分享 mst pat ole Lua:是一個輕量級的腳本語句。不需要編譯,直接運行的語言。 環境配置: 執行Lua有兩種方式: 1、交互式編程(輸入後能立即看到效果) 2、腳本式編程:運行lua文件,.lua為文件後綴 Lu

Android學習筆記Content Provider初談和Android聯絡人資訊

Content Provider 在資料處理中,Android通常使用Content Provider的方式。Content Provider使用Uri例項作為控制代碼的資料封裝的,很方便地訪問地進行資料的增、刪、改、查的操作。Android並不提供所有應用共享的資料儲存,採用content Provide

Pro Android學習筆記Dialog2DialogFragment

DialogFragment的例項newInstance()已經在上一次學習筆記中實現。我們建立dialog的UI,可以通過重寫DialogFragment的兩個函式當中的一個來實現,這兩個函式是onCreateView()和onCreateDialog(),前者返回view,後者返回dialog,如同通過

我的openwrt學習筆記WIFI 無線傳輸速率測試-iperf

Iperf是一個TCP/IP和UDP/IP的效能測量工具,能夠提供網路吞吐率資訊,以及震動、丟包率、最大段和最大傳輸單元大小等統計資訊;從而能夠幫助我們測試網路效能,定位網路瓶頸。 現在ubuntu單虛擬機器不同終端以及不同虛擬機器之間的測試為例說明如何安裝以及使用,然後提

tensorflow學習筆記collection tensorflow學習筆記collection

tensorflow學習筆記(二十八):collection 2016年12月27日 11:53:06 閱讀數:11346 tensorflow collection tensorflow的collection提供一個

tensorflow學習筆記構建TF程式碼

如何構建TF程式碼 batch_size: batch的大小 mini_batch: 將訓練樣本以batch_size分組 epoch_size: 樣本分為幾個min_batch num_epoch : 訓練幾輪 讀程式碼的時候應該關注的幾部分

tensorflow學習筆記Supervisor

如何使用Supervisor 在不使用Supervisor的時候,我們的程式碼經常是這麼組織的 variables ... ops ... summary_op ... merge_all_su

tensorflow學習筆記啟用函式

tesorflow中的啟用函式 所有啟用函式 輸入 和 輸出 的維度是一樣的 tf.nn.relu() tf.nn.sigmoid() tf.nn.tanh() tf.nn.elu() tf

Python學習筆記網絡編程1TCP編程

包含 ipv sina spa 包括 現在 com 訪問 等等 摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432004374523e49