kaldi 1d-CNN源碼

CNN

nnet/nnet-convolutional-component.h

假設CNN相關參數如下

###輸入相關參數
num_splice=3                                            #語音數據的左右context,此處左右一幀
path_stride=5                                           #一幀特徵的維度
input_dim=path_stride*num_splice=15                     #輸入特徵的維度

###濾波器相關參數
num_filters=2                                           #濾波器個數
patch_dim=2                                             #濾波器在一幀特徵上面的維度
filter_dim=num_splice*patch_dim=6                       #濾波器在3幀特徵上的維度
patch_step=1                                            #patch移動的步長

###輸出相關參數
num_patch=1 + (patch_stride - patch_dim) / patch_step=4 #每個濾波器在特徵上面做卷積的次數(即輸出個數)
output_dim=num_patch*num_filters=8                      #cnn的輸出維度

###多幀並行的參數
frame_num=2                                             #一次計算特徵的個數

PropagateFnc

首先將特徵按照splice重新組織成vectorized_feature_patches,然後跟對應的filters做卷積
這裏寫圖片描述
這裏寫圖片描述

BackpropagateFnc

計算對輸入的梯度(向後繼續傳播)
這裏寫圖片描述

Update

計算對參數的梯度(用於參數更新)
這裏寫圖片描述

Max-Pooling

在後向傳遞梯度的時候只在最大值對應的邊傳遞,其他值的梯度爲0.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章