2016-05-31 3 views
0

Я хочу обучить нейронную сеть для выполнения классификации сигналов.Соответствующие параметры обратной прокладки

The network has 50 inputs of the format: [-1 .. 1]

50 hidden layers (not restricted)

10 outputs

hyperbolic tangent (not restricted)

Я ограничен в библиотеку (hnn), чтобы сделать обучение.

Моя проблема заключается в том, что я не знаю, каков процент соответствующий обучения и количество учебных итераций

Я пробовал много возможных настроек в диапазоне:

[1K - 10K] training iterations

[0.001 - 1.5] learning rate

Но когда я снова загружаю свои данные обучения в обученную нейронную сеть, я получаю очень плохие результаты (в форме матрицы замешательства) - не более 2 классов классифицируются правильно.

Каков соответствующий набор этих двух параметров для входных данных?

При поиске аналогичных случаев в литературе я обнаружил, что в разных случаях используются разные настройки параметров, не объясняя причинно-следственных связей.


Эксперименты: Упомянутый библиотека имеет функцию trainUntilErrorBelow (пояснений). Я использовал эту функцию, чтобы узнать, как быстро я могу достичь определенной ошибки, изменив функцию активации и количество скрытых слоев.

Я выбрал следующие:

minimum error: 300

learning rate: 0.01

Результаты: гиперболического тангенса:

1 hidden layer (50 neurons) - 32.12 sec

2 hidden layers (50/50 neurons) - 31.51 sec

3 hidden layers (50/50/50 neurons) - 12.18 sec

4 hidden layers (50/50/50/50 neurons) - 42.28 sec

сигмовидной:

1 hidden layer (50 neurons) - 21.32 sec

2 hidden layers (50/50 neurons) - 274.29 sec

3 hidden layers (50/50/50 neurons) - ∞ sec

4 hidden layers (50/50/50/50 neurons) - ∞ sec

Разумно предположить, что гиперболический активация касательной функция с 3 скрытыми слоями (50/50/50 ne urons) является хорошим выбором для сетевой архитектуры?

+1

В общем, вам нужны пробные ошибки для этих гиперпараметров. Это является причиной наблюдения огромного диапазона в литературе. Я уверен, что проблема в вашем случае - это не скорость обучения, а сетевая архитектура и, возможно, ваш набор данных. Когда вы уже пробовали некоторые курсы обучения, вам следует потратить некоторое время на регулирование. Ваша сеть может перерабатывать все время. Добавьте некоторую регуляцию L1/L2 к весам или даже что-то вроде слоя отсечки. – sascha

+0

@sascha спасибо, пытаясь запустить некоторые эксперименты, чтобы определить соответствующие настройки для гиперпараметров –

+0

@MocialovBoris Как сказал Саша, это больше похоже на проблему с классифицируемыми данными. Для классификации сигналов вы обычно (часто;) вычисляете некоторые функции, формирующие сами сигналы (среднее значение, преобразование Фурье, коэффициенты блаха), а затем классифицируйте эти функции. Здесь есть особенности, которые вы принимаете (искусство больше, чем наука); другое, более или менее правильное правило, чтобы нормализовать данные, чаще всего в [-1,1]. Каковы ваши 50 входов? Какие у них ценности? Почему у вас 50 выходных узлов (раньше вы упомянули 10)? – Luis

ответ

0

(был задуман как комментарий, но получил слишком большой: P)

Я считаю, что наиболее полезным инструментом здесь будет смотреть на learning curves, чтобы увидеть, если веса двигаются (вы должны увидеть кривую вниз, как синий. Там, вы можете играть с параметрами. Что нужно подумать: скорость обучения может быть слишком большой или слишком низкая означает, что изменения в весах были бы большими или маленькими в каждом итерация. Первый может привести к не сходимости, а к замедлению конвергенции. Если веса слишком сильно изменяются, то вы можете пропустить несколько хороших минимумов ошибок. В любом случае, сюжеты определенно дадут вам некоторые намеки на то, что происходит. Это также относится к импульсу (если вы его используете): иногда вы добавляете слишком большое значение, а весы получают импульс, а также пропускают минимумы.

Тренировочные итерации: я всегда тренирую от 200 до 500 эпох и смотрю на обучающие сюжеты.Если я решит пойти с определенной конфигурацией, я тренируюсь за много (10 000) эпох, отправляюсь на что-нибудь поесть и снова смотрю на сюжеты, чтобы проверить, что нет ничего странного, пока я отсутствовал;) В большинстве случаев Я вижу небольшое изменение после эпохи 1000 (по крайней мере, тренд продолжает падать в том же темпе).

Другой комментарий (со всей должной осторожностью): Я не знаю вашу проблему, но я всегда использовал только один скрытый ввод, и он работает. Здесь я вижу некоторые изменения в количестве скрытых узлов, что само по себе является проблемой. Для первой попытки я в основном занимаюсь num_hidden = num_inputs. Я смиренно предлагаю начать сначала искать более мелкие, более простые сети. ;)

Смежные вопросы