2015-12-08 9 views
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 
) 

Коэффициент ошибок, с которыми я столкнулся, очень высок.

+0

Вы пробовали настройку параметров? Попробуйте другие курсы обучения, попробуйте без импульса, попробуйте изменить счет эпохи. Существует множество способов обучения NN на юг, и они в основном зависят от ваших данных. Попробуйте следовать подсказкам [из этого ответа] (http://stackoverflow.com/a/32683367/2642204). – BartoszKP

+0

Я попробую разные параметры. В ответе, который вы мне прислали, вывод - один узел (1 или 0), в моем примере есть несколько и реальных значений. Я думаю, что я спрашиваю, хорошо ли «дизайн» нейронной сети. – fxhh

+0

Рассмотрите также следующую ссылку, которую я опубликовал в этом ответе. – BartoszKP

ответ

0

Извлечение MFCC из спектра мощности нелинейно, вы не можете воспроизвести его одним слоем. Если вы хотите воспроизвести его с несколькими слоями, вам необходимо рассмотреть алгоритм MFCC.

экстракции

MFCC могут быть представлены с помощью следующей нейронной сети:

  • Layer 1 плотная матрица размером 256x40 с логарифмом нелинейности
  • Слой 2 плотная матрица размером 40Х13 без нелинейности (такой же, как линейной нелинейности или идентичен нелинейность в лазании)

Если воспроизвести эту сеть с nolearn он сможет узнать это правильно, однако, логарифм нелинейность еще не реализована в лазании, так что вы должны implem это сам. Другим решением было бы заменить нелинейность логарифма на tanh или пару стандартных нелинейных слоев.

Для воспроизведения MFCC вам необходимо иметь 2 слоя с логарифмической нелинейностью или 3-4 уровнями с мягкой нелинейностью и последний слой должен быть сконфигурирован линейной нелинейностью.

+0

Так что до сих пор у меня был один уровень ввода из 256 узлов и выходной уровень из 13 узлов с softmax nonlin. потому что размер окна составляет 256 кадров и для каждого окна вычисляются коэффициенты 13, а перекрытие окон - 96. Вы говорите, что я должен получить 1 окно на входе, а затем иметь один скрытый слой размером 256x40 с tanh nonlin, и для вывода слоя размером 40х13 с линейным нелинейным? Или 40 окон на входе, один скрытый слой размером 256 * 40 с tanh nonlin и выпадающий слой размером 40x13 линейного nonlin. то есть я тренирую 40 окон за раз. Кроме того, откуда взялись 40? – fxhh

+0

Это все о одном окне. 40 - общее количество фильтров мела в фильтровальном банке, вы можете получить подробную информацию здесь: http://www.practicalcryptography.com/misciety/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/ –

+0

Да, я видел это. Но я * уже * вычислил MFCCs, используя scikits.talkbox.features.mfcc, посмотрите на pastebin.Вот почему у меня нет 40 * 13 в моем выходном слое, у меня 13, потому что для окна из 256 точек данных вычисляется 13 коэффициентов. Для каждых 256 точек данных у меня 13 коэффициентов. Вот как будет выглядеть набор данных: data_pt_1, ..., data_pt_256 coef_1_, ..., coef_13. Я пытаюсь сделать это, поэтому я могу просто отправить 256 точек данных в свою нейронную сеть. и получить коэффициенты на выходе. – fxhh