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_input
的indices
的lexicographic 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
.包含著每個Sequence
的Levenshtein
距離.
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:是一個
int32
的SparseTensor
,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]
, 包含著負的 .加起來即為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: 稠密
Tensor
的shape
, size為(2)
.shape
的值為[batch_size, max_decoded_length]
.
- decoded[0].indices: 索引矩陣,size為
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學習筆記(四二):Fragment(7):切換效果
利用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學習筆記(五十):Log(2)配置log4j2
相關maven <!-- log4j-api提供logging的API。這是log4j2中唯一需要在compile時加入,含有你所需的所有類 --> <dependency> <groupId>org.apache.loggin
Pro Android學習筆記(五十):ActionBar(3):搜尋條
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學習筆記(四五):Dialog(2):DialogFragment
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學習筆記(四十五)網絡編程(1)TCP編程
包含 ipv sina spa 包括 現在 com 訪問 等等 摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432004374523e49