基于深度学习的中文语音识别系统框架学习笔记
原文地址:https://blog.csdn.net/chinatelecom08/article/details/82557715
项目地址:https://github.com/audier/DeepSpeechRecognition
本文为对原作者代码的学习笔记,记录一下调试过程,与大家共同学习。
1 下载代码,下载地址如上
2 使用原文提供的声学模型和语言模型测试结果,
数据标签整理在data
路径下,其中primewords、st-cmd目前未区分训练集测试集。
若需要使用所有数据集,只需解压到统一路径下,然后设置utils.py中datapath的路径即可。
与数据相关参数在utils.py
中:
- data_type: train, test, dev
- data_path: 对应解压数据的路径
- thchs30, aishell, prime, stcmd: 是否使用该数据集
- batch_size: batch_size
- data_length:千万不要改,用原来的10,否则测试与提供的训练模型不批配,正常训练可以设为None
- shuffle:正常训练设为True,是否打乱训练顺序
我测试时只使用了thches30语音库,解压到data文件夹,修改如下
def data_hparams():
params = tf.contrib.training.HParams(
# vocab
data_type = 'train',
data_path = 'data/',
thchs30 = True,
aishell = False,
prime = False,
stcmd = False,
batch_size = 1,
data_length = 10,
shuffle = False)
return params
如果修改data_length,运行test.py时会出现如下错误,即提供好的训练模型与测试参数不一致
ValueError: Dimension 1 in both shapes must be equal, but are 1042 and 230. Shapes are [256,1042] and [256,230]. for 'Assign_62' (op: 'Assign') with input shapes: [256,1042], [256,230].
由于采用xshell远程终端控制,在输出结果时出现
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
这时可采用如下代码控制输出格式
PYTHONIOENCODING=utf-8 python test.py
运行train.py训练自己数据
1 首先需要删除原来的声学模型和语言模型,不然训练会报错
2 训练时将atch_size: batch_size设为1 ,data_length设为None,出现KeyError: 'val_acc'
代码中未发现val_acc,将
ckpt = "model_{epoch:02d}-{val_acc:.2f}.hdf5"中的va_acc删去
3 生成声学模型时出现错误
Unable to open file (unable to open file: name = './model/char_judgement.h5', errno = 2, error message = 'No such file or directory'
自己创建一个文件夹存放checkpoint文件
3 出现训练集损失函数下降,验证集损失函数上升的问题,未解决