神经网络中的多个实际输入和多个实际输出

时间:2015-12-08 21:32:45

标签: python neural-network speech-recognition mfcc nolearn

如何在有多个输入和输出节点并且两者都是实值的情况下训练感知器?

我这样做是因为我想训练神经网络来预测MFCC给定一些数据点(来自信号)。

以下是一个示例数据:http://pastebin.com/dtHGUeax 我不会把数据放在这里,因为文件是"大"。

我现在正在使用nolearn,因为稍后我会为深度学习添加更多图层。

net = NeuralNet(
    layers=[('input', layers.InputLayer),
            ('output', layers.DenseLayer),
            ],

    # Layer parameters
    input_shape=(None, 256),
    output_nonlinearity=lasagne.nonlinearities.softmax,
    output_num_units=13,

    # Optimization
    update=nesterov_momentum,
    update_learning_rate=0.01,
    update_momentum=0.9,

    regression=True,
    max_epochs=500,
    verbose=1
)

我用这种方法得到的错误率非常高。

1 个答案:

答案 0 :(得分:0)

从功率谱中提取MFCC是非线性操作,不能用单层再现它。如果你想用多层重现它,你需要考虑MFCC算法本身。

MFCC提取可以用以下神经网络表示:

  • 第1层密度矩阵,大小为256x40,具有对数非线性
  • 第2层密度矩阵,大小为40x13,无非线性(与线性非线性相同或在烤宽面条中相同的非线性)

如果您使用nolearn重现此网络,它将能够正确学习它,但是,在Lasagne中尚未实现对数非线性,因此您必须自己实现它。另一种解决方案是用tanh或一对标准非线性层代替对数非线性。

因此,为了再现MFCC,你需要有2层具有对数非线性或3-4层具有softmax非线性,最后一层必须配置线性非线性。