在几年前写的使用Python对音频进行特征提取使用的是人为特征的方法进行特征提取的,近些年随着深度学习的普及,这里尝试使用深度学习方法进行特征提取。
之前的数据集找不到了,这个数据其实是kaggle的一个数据:www.kaggle.com/datasets/ca…
也可以在百度云下载链接: pan.baidu.com/s/177E_2VhN… 提取码: c5nh
相比传统的方法一堆特征筛选,深度学习这里其实就是一个黑盒。
这里使用了一个音频编码器模型:teticio/audio-encoder
This model encodes audio files into vectors of 100 dimensions. It was trained on a million Spotify playlists and tracks. The details can be found here.
也就是输入一个audio文件名,可以转为100维的特征向量。
from audiodiffusion.audio_encoder import AudioEncoder
audio_encoder = AudioEncoder.from_pretrained("teticio/audio-encoder")
audio_encoder.encode(["./genres/blues/blues.00043.au"]).numpy()[0].tolist()
然后把所有的数据都转成100维,构成数据集。
import numpy as np
import os
genres = 'blues classical country disco hiphop jazz metal pop reggae rock'.split()
data_set = []
label_set = []
label2id = {genre:i for i,genre in enumerate(genres)}
id2label = {i:genre for i,genre in enumerate(genres)}
print(label2id)
for g in genres:
print(g)
for filename in os.listdir(f'./genres/{g}/'):
songname = f'./genres/{g}/{filename}'
print(songname)
data_set.append(audio_encoder.encode([songname]).numpy()[0].tolist())
label_set.append(label2id[g])
然后简单的标准化一下。
from sklearn.preprocessing import StandardScaler
from keras.utils import to_categorical
scaler = StandardScaler()
X = scaler.fit_transform(np.array(data_set, dtype = float))
y = to_categorical(np.array(label_set))
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
这里模型训练和之前一样,先构建一个全连接模型。
from keras import models
from keras.layers import Dense, Dropout
def create_model():
model = models.Sequential()
model.add(Dense(256, activation='relu', input_shape=(X_train.shape[1],)))
model.add(Dense(128, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
return model
model = create_model()
然后训练。
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(X_train, y_train, epochs=50, batch_size=128)
最后进行测试。
test_loss, test_acc = model.evaluate(X_test,y_test)
print('test_acc: ',test_acc)
相比使用人工提取的特征,这次准度比之前的高一些。
如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!
有需要的小伙伴,可以V扫描下方二维码免费领取
对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。