使用tflearn

时间:2017-10-27 01:28:32

标签: python tensorflow deep-learning voice-recognition mfcc

我正在用Python为我的家人建立一个个人语音助手,使用遍布整个房子的Raspberry Pi单元和一个中央服务器。

Pis从arecord通过环形缓冲区循环16khz音频,保持两秒窗口。来自snowboy.kitt.​​ai的个人模型,非常巧妙地设置,测试窗口并将匹配的剪辑发送到中央服务器。

在那里,使用librosa将剪辑转换为MFCC,并且基于Tensorflow(真实的,真实的)DNN检查作为辅助过滤器。每个新剪辑都会保存到队列中,以便我可以在重新训练模型之前运行并标记它们。

它有点工作,但还不够好 - 我的妻子会告诉你,当她打开堆肥桶时,它喜欢醒来。即使训练数据中有大量随机的爆炸和猛烈撞击,但是大声的噪音经常会让人感到困惑。

关于代码,起点来自此YouTube视频(不要笑,我发现它很有帮助!):https://www.youtube.com/watch?v=u9FPqkuoEJ8

在简化示例代码并进行一些更改以减少收敛的纪元数之后,我最终得到了这个:

def build_model(categories):
    import tflearn
    tflearn.init_graph(num_cores=16, gpu_memory_fraction=0.5)

    net = tflearn.input_data([None, WIDTH, HEIGHT])
    net = tflearn.lstm(net, 128)
    net = tflearn.fully_connected(net, 128)
    net = tflearn.fully_connected(net, 128)
    net = tflearn.fully_connected(net, 128)
    net = tflearn.fully_connected(net, len(categories), activation='softmax')
    net = tflearn.regression(net, optimizer='adam', loss='categorical_crossentropy')

    return tflearn.DNN(net, tensorboard_verbose=3)

我这样训练:

model.fit(inputs, targets, shuffle=True, n_epoch=10, validation_set=0.2, show_metric=True, run_id=run_id)

输入数据细分如下:

   3 cal.wav
2950 false_positive.wav
7182 guess_negative.wav
  16 guess_positive.wav
   1 heather.wav
  30 jennie.wav
   1 jim.wav
   4 leo.wav
  40 simon.wav
  14 teddy.wav
1098 wade.wav

唤醒词(是/否)训练通过将样本分为两类来进行操作,一个是所有的false_positives,另一个是所有名称的联合(减去猜测)。

在10个时代之后,我得到了这个损失,这看起来很不错:

| Adam | epoch: 010 | loss: 0.07699 - acc: 0.9907 | val_loss: 0.37000 - val_acc: 0.8916 -- iter: 3172/3172

问题是,我无法判断它是否记住了训练数据,或者它是否真的学到了什么。

那么,我该如何调整这个系统呢?添加和删​​除图层,更改尺寸以及更改随机数感觉就像是黑魔法。

改善(最大化,真正)检测系统准确性的理性方法是什么?谢谢!

0 个答案:

没有答案