CTC类的:
前向后向算法计算损失函数,借助net_out计算词错误率
- Ctc::Eval
label expansion:扩展长度为2L+1
int32 exp_len_labels = 2*len_labels + 1;
label_expand_.resize(exp_len_labels,0);
for(int l=0;l<len_labels;l++){
label_expand_[2*l+1] = label[l];
}
向CTC的label中插入blank
- 前向后向算法:
定义num_frames*exp_len_labels大小的矩阵计算前后向概率alpha,矩阵数据类型为CuMatrix_BaseFloat
alpha_.Resize(num_frames, exp_len_labels, kSetZero);
- 前向迭代地计算:ComputeCtcAlpha
for(int t=0; t < num_frames; t++){
alpha_.ComputeCtcAlpha(log_nnet_out, t, label_expand_, false);
}
- 对句子计算目标函数: