0

我如何训练一个有多个输入和输出节点并且都是实值的感知器?

我这样做是因为我想训练一个神经网络来预测给定一些数据点(来自信号)的 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
)

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

4

1 回答 1

0

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

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

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

如果你用 nolearn 重现这个网络,它将能够正确地学习它,但是,对数非线性在 Lasagne 中还没有实现,所以你必须自己实现它。另一种解决方案是用 tanh 或几个标准非线性层替换对数非线性。

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

于 2015-12-09T10:34:31.807 回答