零基础语音识别——Task 4打卡

零基础语音识别——Task 4打卡


由开源学习组织Datawhale提供
https://github.com/datawhalechina/team-learning

特征提取

前面的流程中已经说过,在特诊提取上,选择了梅尔频谱对音频信号进行特征提取。但是这样的提取方式虽然在第0个维度上的特征是一样的,但是在第1个特征(滑动窗口数量)会随着音频时长的改变而增加。因此,对特征提取需要进一步处理。如代码中:

# 计算梅尔频谱(mel spectrogram),并把它作为特征
mels = np.mean(librosa.feature.melspectrogram(y=X,sr=sample_rate).T,axis=0) 
mels.shape
>>> (128,)

这种方法利用均值的方式将第1个维度通过求均值的方式进行了压缩。由于后文中选取的模型为
卷积神经网络,所以还需对特征reshape。代码中将mels向量进行了重组

X_train = X_train.reshape(-1, 16, 8, 1)

重组后的数据第0维表示样本数量,第1维和第2维表示:16 * 8 = 128。也就是说将128维的向量重塑成168的矩阵。这里也是可以进行更改的点我们可以改为256维向量,然后重塑成1616等诸如此类。

模型搭建与训练

模型的搭建上,采用的是tensroflow 2.xkeras模块。结构上是面向过程,利用model.Sequential()的语法顺序搭建。具体如下:

model.add(Conv2D(64, (3, 3), padding = "same", activation = "tanh", input_shape = input_dim))# 卷积层
model.add(MaxPool2D(pool_size=(2, 2)))# 最大池化
model.add(Conv2D(128, (3, 3), padding = "same", activation = "tanh")) #卷积层
model.add(MaxPool2D(pool_size=(2, 2))) # 最大池化层
model.add(Dropout(0.1))
model.add(Flatten()) # 展开
model.add(Dense(1024, activation = "tanh"))
model.add(Dense(20, activation = "softmax")) # 输出层:20个units输出20个类的概率

如上所示,模型选用两层卷积池化操作,再将模型打平后放入Dense层进行解析和输出。
训练过程也是非常传统的keras训练方式,直接调用接口进行训练:

# 训练模型
model.fit(X_train, Y_train, epochs = 90, batch_size = 50, validation_data = (X_test, Y_test))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值