Как изменить параметры по умолчанию для newfit() в MATLAB?

Я использую

net = newfit(in,out,lag(j),{'tansig','tansig'});

создать новую нейронную сеть. Значение по умолчанию числа validation checks равно 6.

Я тренирую множество сетей, и это занимает много времени. Думаю, не имеет значения, что мои результаты немного менее точны, если их можно получить значительно быстрее.

Как я могу тренироваться быстрее?

  • Я считаю, что одним из способов может быть уменьшение значения количества проверок. Как я могу это сделать (в коде, не используя графический интерфейс)
  • Есть ли другой способ увеличить скорость.

Как я уже сказал, увеличение скорости может сопровождаться небольшой потерей точности.


person Lazer    schedule 14.11.2009    source источник


Ответы (3)


Просто для расширения @mtrw ответ, согласно документации, обучение останавливается при любом из этих условия возникают:

  • Достигнуто максимальное количество эпох: net.trainParam.epochs
  • Превышено максимальное количество времени: net.trainParam.time
  • Производительность минимизирована до цели: net.trainParam.goal
  • Градиент производительности падает ниже min_grad: net.trainParam.min_grad
  • mu превышает mu_max: net.trainParam.mu_max
  • Производительность проверки увеличилась более чем в max_fail раз с момента последнего снижения (при использовании проверки): net.trainParam.max_fail

Ограничения Epochs и time позволяют установить верхнюю границу продолжительности обучения.

Ограничение Цель останавливает обучение, когда производительность (ошибка) падает ниже этого значения, и обычно позволяет настроить уровень компромисса между временем и точностью: менее точные результаты для более быстрого выполнения.

Это похоже на min_grad (градиент сообщает вам силу «спуска») в том смысле, что если величина градиента меньше mingrad, обучение останавливается. Это можно понять по тому, что если функция ошибок не сильно меняется, то мы выходим на плато и, вероятно, нам следует прекратить тренировку, так как мы не собираемся сильно улучшаться.

mu, mu_dec и mu_max используются для управления процессом обновления веса (обратное распространение).

max_fail обычно используется, чтобы избежать переобучения, а не столько для ускорения.

Мой совет: установите для время и эпохи максимально возможное значение, которое позволяют ограничения вашего приложения (в противном случае результаты будут плохими). И, в свою очередь, вы можете управлять goal и min_grad, чтобы достичь желаемого уровня компромисса между скоростью и точностью. Имейте в виду, что max_fails не даст вам выигрыша во времени, так как он в основном используется для обеспечения хорошей мощности обобщения.

person Amro    schedule 14.11.2009

(Отказ от ответственности: у меня нет набора инструментов нейронной сети, поэтому я только экстраполирую из документации Mathworks)

Судя по вашим входным параметрам, вы используете TRAINLM. Согласно документации, вы можете установить параметр net.trainParam.max_fail, чтобы изменить проверки проверки.

Вы можете установить начальное значение mu, а также коэффициенты увеличения и уменьшения. Но это потребует некоторого понимания ожидаемого ответа и производительности поиска.

Для более грубого подхода вы также можете контролировать максимальное количество итераций, установив для параметра net.trainParam.epochs что-то меньшее, чем его значение по умолчанию 100. Вы также можете установить параметр net.trainParam.time, чтобы ограничить количество секунд.

Вероятно, вам следует установить net.trainParam.show на NaN, чтобы пропустить все отображения.

person mtrw    schedule 14.11.2009

Нейронные сети рассматриваются в MATLAB как объекты. Чтобы получить доступ к любому параметру до (или после) обучения, вам необходимо получить доступ к свойствам сети с помощью оператора ..

В дополнение к ответам mtrw и Amro сделайте документацию MATLAB Neural Network Toolbox своим новым лучшим другом. Обычно это объясняет вещи гораздо лучше.

person Zaid    schedule 14.11.2009