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.

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