Datawhale语音识别-Task4:食物声音识别-深度学习模型搭建与训练

建模:

深度学习框架

搭建食物音频识别用的Keras 是一个用 Python 编写的高级神经网络 API, 现在Keras已经和TensorFlow合并,可以通过TensorFlow来调用。

1 网络结构搭建:

Keras 的核心数据结构是 model,一种组织网络层的方式。最简单的模型是 Sequential 顺序模型,它由多个网络层线性堆叠。对于更复杂的结构,可以查看Keras 函数式 API,它允许构建任意的神经网络图。

Sequential模型可以直接通过如下两行代码搭建:

from keras.models import Sequential
model = Sequential()

2 搭建CNN网络:

卷积神经网络CNN的结构一般包含这几个层:

1)输入层:用于数据的输入;

2)卷积层:使用卷积核进行特征提取和特征映射------>可以多次重复使用;

3)激励层:由于卷积也是一种线性运算,因此需要增加非线性映射(也就是激活函数);

4)池化层:进行下采样,对特征图稀疏处理,减少数据运算量----->可以多次重复使用;

5)Flatten操作:将二维的向量,拉直为一维的向量,从而可以放入下一层的神经网络中;

6)全连接层:通常在CNN的尾部进行重新拟合,减少特征信息的损失----->DNN网络。

对于Keras操作中,可以简单地使用 .add() ,将需要搭建的神经网络的layer堆砌起来,像搭积木一样:
如果需要,你还可以进一步地配置你的优化器.complies())。Keras 的核心原则是使事情变得相当简单,同时又允许用户在需要的时候能够进行完全的控制(终极的控制是源代码的易扩展性)。

# 编译模型,设置损失函数,优化方法以及评价标准
model.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])

CNN模型训练与测试

模型训练
1 批量的在之前搭建的模型上训练:
# 训练模型
model.fit(X_train, Y_train, epochs = 90, batch_size = 50, validation_data = (X_test, Y_test))
2 查看网络的统计信息
model.summary()
预测测试集
1 新的数据生成预测
def extract_features(test_dir, file_ext="*.wav"):
    feature = []
    for fn in tqdm(glob.glob(os.path.join(test_dir, file_ext))[:]): # 遍历数据集的所有文件
        X, sample_rate = librosa.load(fn,res_type='kaiser_fast')
        mels = np.mean(librosa.feature.melspectrogram(y=X,sr=sample_rate).T,axis=0) # 计算梅尔频谱(mel spectrogram),并把它作为特征
        feature.extend([mels])
    return feature
2 保存预测的结果
X_test = extract_features('./test_a/')

X_test = np.vstack(X_test)
predictions = model.predict(X_test.reshape(-1, 16, 8, 1))

preds = np.argmax(predictions, axis = 1)
preds = [label_dict_inv[x] for x in preds]

path = glob.glob('./test_a/*.wav')
result = pd.DataFrame({'name':path, 'label': preds})

result['name'] = result['name'].apply(lambda x: x.split('/')[-1])
result.to_csv('submit.csv',index=None)

!ls ./test_a/*.wav | wc -l

!wc -l submit.csv
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值