尽管我具有较高的准确性和较高的验证准确性,但为什么我的预测不正确?

时间:2019-06-05 10:22:40

标签: python audio keras sequential sigmoid

我正在尝试开发一个模型,如果触发字('hello')及时出现,它可以从音频文件中识别出来。我使用了Coursera的NG Andrew的课程中的一些想法,但就我而言,某些方法不起作用。

我已经建立了一个模型:

opt = Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, decay=0.01)
model.compile(loss='binary_crossentropy', optimizer=opt, metrics=["accuracy"])
mcp_save = ModelCheckpoint('model-{epoch:03d}-{acc:03f}-{val_acc:03f}.h5', save_best_only=True, monitor='val_loss', mode='auto')
model.fit(X, Y, batch_size=8, epochs=150, validation_split=0.2, callbacks=[mcp_save])

我自己创建了带有3937个示例的数据集,并将每个音频文件转换成其频谱图,所以:

输入-音频文件的频谱图,

输出-值从0-1开始的时间向量。

时间向量最初具有10000个时间戳,但是为了使其适合模型,我已经对其进行了数字化处理,因此最终它具有981个时间戳。

为了训练,我使用了这段代码:

{{1}}

如我所见,准确性在前25个时期内有所提高,达到了约90%。在那之后,它陷入困境-acc的变化不大,因此损失很大。出现val_acc时,它等于99%。

在第40个时期后,我停止了训练,并尝试以该模型以前未曾看到的示例进行测试。此示例的Y向量(标签)应为:

https://imgur.com/C8jg5kD.jpg

我收到了结果:

https://imgur.com/vxPWcWq.jpg

在这种情况下,音频文件包含4个字,但其中只有一个是触发字(第二个)。

我不太了解为什么我的模型会给我一个0到0.4的结果。我正在尝试其他示例,并且是相同的。而且,我想知道如何将结果求逆,因此在听到触发字后它应该具有最高的值,而不是最低的。最后但并非最不重要的一点-我要怎么做才能学习模型来识别这个特定单词?

我还应该提到的是,我正在尝试使用ReduceLROnPlateau训练具有更大batch_size的模型,并且我正在使用训练集中的示例评估结果,结果仍然相同,所以我认为这不是一个过拟合的问题

任何想法如何解决?在此先感谢:)

0 个答案:

没有答案