详细说明用keras建立训练自己数据的LSTM----语音方向

最近在研究用keras实现一个LSTM来训练自己的数据(LSTM的基本原理请自行补习),一开始自己用的数据用DNN来训练,后来要转向LSTM,因为两者的输入是不一样的,所以有些焦头烂额,DNN的输入格式为input:(samples,dim),是二维数据,而LSTM的输入格式为input:(samples,time_step,dim)是三维的,所以,要先理解如何把DNN的输入转换为LSTM的输入,下面我就来详细说明一下。

DNN的输入是以帧为单位,每帧的输入对应一个输出,假如说,你有n句话,每句话的帧数都不相同,假如一共有m帧,进行一定的处理后,维度为di,将这些数据帧合并在一起,形成一个(m,di)的矩阵,作为DNN的输入,而(m,dl)作为DNN的标签进行训练,这就完成了DNN的训练,接下来我们就要把这个(m,di)的数据转换为LSTM的数据,进行训练LSTM。

首先我们要知道LSTM的输入是一个序列,也就是一系列的连续的帧,这是与DNN输入数据的最大不同之处,现在按上面的假设,每句话长度都不同,所以,现在我们处理的LSTM的输入是变长序列,借鉴的是http://www.cnblogs.com/leeshum/p/6089286.html,这里面讲的很清楚,既然是变长,我们就要把数据补成定长,具体操作如下。

找出所有句子中最长的那句,假如是200帧,那我们就将所有的句子都补成200帧这么长,具体的方法自己选择,MATLAB和python都可以很容易的实现,将这些句子补成200帧以后,对应的标签也要补成200帧,然后将这些句子合并成类似于DNN输入的数据(200*num_sentence,dim),现在LSTM的输入其实就是以句子为单位的,LSTM的输入形式(samples,time_step,dim)中samples就是句子数,time_step就是200,所以在数据处理数据的时候,你就把这个(200*num_sentence,dim)的数据reshape成(num_sentence,200,dim),这个输入就是LSTM的输入,此时输出的形式也要转换成与之对应的形式(num_sentence,200,dim_label),在训练时,batch的大小就是句子的个数,reshape完成后,在输入LSTM之前需要把补的数据过滤掉,具体看http://www.cnblogs.com/leeshum/p/6089286.html,这里讲的很清楚,现在,LSTM的输入和输出都搞定,可以去搭建自己的LSTM进行训练了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值