tensorflow练习11:语音识别程序

本文介绍了使用TensorFlow进行语音识别的实践,包括数据预处理、网络结构定义、训练过程和测试代码。主要数据集为THCHS30,网络结构涉及CNN的skip connection技术。
摘要由CSDN通过智能技术生成

找工作的事情暂时告一段落,感觉还需要不断提升自己,不说多少了,直接步入正题。
语音识别是人机交互、人工智能等领域必不可少的一个研究领域,下面就以该例为标准。
使用的数据集:THCHS30(Dong Wang, Xuewei Zhang, Zhiyong Zhang发布的开放语音数据集);
地址:
语音文件:http://data.cslt.org/thchs30/zip/wav.tgz
对应文本:http://data.cslt.org/thchs30/zip/doc.tgz

下载后,解压放到data文件夹下。
tensorflow环境:0.12.1
1)加载文件、分词等预处理操作:

#coding=utf-8
import tensorflow as tf
import numpy as np
import os
from collections import Counter
import librosa
import time

#训练样本路径
wav_path = 'data/wav/train'
label_file = 'data/doc/trans/train.word.txt'

# 获得训练用的wav文件路径列表
def get_wave_files(wav_path=wav_path):
    wav_files = []
    for (dirpath,dirnames,filenames) in os.walk(wav_path):#访问文件夹下的所有文件
    #os.walk() 方法用于通过在目录树种游走输出在目录中的文件名,向上或者向下
        for filename in filenames:
            if filename.endswith('.wav') or filename.endswith('.WAV'):
                #endswith() 方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False
                filename_path = os.sep.join([dirpath,filename])#定义文件路径(连)
                if os.stat(filename_path).st_size < 240000:#st_size文件的大小,以位为单位
                    continue
                wav_files.append(filename_path)#加载文件
    return wav_files

wav_files = get_wave_files()#获取文件名列表

#读取wav文件对应的label
def get_wav_label(wav_files=wav_files,label_file=label_file):
    labels_dict = {}
    with open(label_file,encoding='utf-8') as f:
        for label in f :
            label =label.strip('\n')
            label_id = label.split(' ',1)[0]
            label_text = label.split(' ',1)[1]
            labels_dict[label_id]=label_text#以字典格式保存相应内容
    labels=[]
    new_wav_files = []
    for wav_file in wav_files:
        wav_id = os.path.basename(wav_file).split('.')[0]
        #得到相应的文件名后进行'.'分割
        if wav_id in labels_dict:
            labels.append(labels_dict[wav_id])#存在该标签则放入
            new_wav_files.append(wav_file)

    return new_wav_files,labels#返回标签和对应的文件

wav_files,labels = get_wav_label()#得到标签和对应的语音文件
print("加载训练样本:",time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
print("样本数:",len(wav_files))

#词汇表(参考对话、诗词生成)
all_words = []
for label in labels:
    all_words += [word for word in label]
counter = Counter(all_words)
count_pairs =sorted(counter.items(),key=lambda x: -x[1])

words,_=zip(*count_pairs)
words_size =len(words)#词汇表尺寸
print('词汇表大小:',words_size)

#词汇映射成id表示
word_num_map = dict(zip(words,range(len(words))))
to_num = lambda word: word_num_map.get(word,len(words))#词汇映射函数
labels_vector =[list(map(to_num,label)) for label in labels]

label_max_len= np.max([len(label) for label in labels_vector])#获取最长字数
print(<
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值