本次参加Datawhale学习组队活动,以天池比赛的“食物语音识别”为学习任务,Datawhale提供了两个baseline,一个是基于CNN的模型,另外一个是基于LSTM的模型。由于个人兴趣所致,本文选择基于LSTM模型进行学习。
-
运行环境为:win10+python(3.8)+cuda(10.2)+torch(1.8.1)+torchvision(0.9.1)
以下为查看方法:
cuda:进入cmd下运行nvcc --version命令
torch和torchvision:进入Anaconda Prompt下运行conda list torch
python:进入Anaconda Prompt下运行python --version -
本次数据集的食物的声音共分为20类,具体如下所示:
wings,soup,salmon,ribs,pizza,pickles,noddles,jelly,ice-ream,gummies,grapes,fries,drinks,chocolate,chips,carrots,candied_fruits,cabbage,burger,aloe -
特征提取:
librosa是一个用于音乐和音频分析的python包。它为创建音乐信息检索系统提供了必要的构建块。
import librosa
以下为本次学习特征提取中不懂的参数,并附上语句:
melspectrogram = librosa.feature.melspectrogram(y=y, sr=sr, n_fft=2048, hop_length=1024)
y:是否为音频时间序列
sr:抽样率
n_fft:快速傅里叶窗口的长度
hop_length:连续帧的样本数
mfcc = librosa.feature.mfcc(S=librosa.power_to_db(melspectrogram), n_mfcc=20)
n_mfcc:返回MFCCs的数目
power_to_db()功率谱转换
mfcc_delta = librosa.feature.delta(mfcc)
mfcc_delta_delta = librosa.feature.delta(mfcc_delta)
mfcc_comb = np.concatenate([mfcc, mfcc_delta, mfcc_delta_delta], axis=0)
detal:特征的动态信息。相当于在时间轴上的斜率。
aixs:表示跨行计算。
- 基于LSTM的baseline文件
本次用的baseline采用的是隐含为128层,循环层为30层,最终为1个输出。
self.hidden_size = 128
self.bn_dim = 30
self.num_layers = 1
self.lstm = nn.LSTM(input_size=self.d_input, hidden_size=self.hidden_size, num_layers=self.num_layers,bidirectional=False, bias=True, batch_first=True)
- 出现问题:
执行训练模型过程中出现警告,如下所示:注意这个是警告并不是错误。指在预测标签中就没有 1 这个标签。
UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Usezero_division
parameter to control this behavior.
可以在.py文件里面添加如下代码:
import warnings
warnings.filterwarnings("ignore")
- 总结:本次对baseline进行学习,可能因为0基础开始,有些代码不是很清楚什么意思,但是Datawhale对于baseline的说明很详细。但是,不知道是个人原因还是程序问题。我没有找到如何执行测试集的.py文件,训练完毕后,我不知道该怎么办了?