Matlab Многослойный Персептрон Вопрос - PullRequest
2 голосов
/ 12 сентября 2011

Мне нужно классифицировать набор данных с использованием Matlab MLP и показать классификацию.

Набор данных выглядит как

Нажмите для просмотра

То, что я сделал до сих пор:

  1. Я создал нейронную сеть, содержащую скрытый слой (два нейрона ?? Может быть, кто-то может дать мне несколько советов о том, сколько нейроны подходят для моего примера ) и выходной слой (один нейрон).

  2. Я использовал несколько разных методов обучения, таких как Delta bar Дельта, обратное распространение (оба эти метода используются с или -out импульс и Левенберг-Марквардт.)

Это код, который я использовал в Matlab (пример Левенберга-Марквардта)

net = newff(minmax(Input),[2 1],{'logsig' 'logsig'},'trainlm');
net.trainParam.epochs = 10000;
net.trainParam.goal = 0;
net.trainParam.lr = 0.1;
[net tr outputs] = train(net,Input,Target);

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

Нажмите для просмотра

Код для генерации вышеуказанного сюжета:

figure(1)
plotpv(Input,Target);
hold on
plotpc(net.IW{1},net.b{1});
hold off

Мне также нужно построить выходную функцию выходного нейрона, но я застрял на этом шаге. Кто-нибудь может дать мне несколько советов?

Заранее спасибо.

1 Ответ

2 голосов
/ 12 сентября 2011

Что касается количества нейронов в скрытом слое, для такого небольшого примера двух более чем достаточно. Единственный способ узнать наверняка оптимальное - это провести тестирование с разными числами. В этом FAQ вы можете найти практическое правило, которое может быть полезно: http://www.faqs.org/faqs/ai-faq/neural-nets/

Для функции вывода часто полезно разделить ее на два шага:

Во-первых, учитывая входной вектор x , выход нейронов в скрытом слое равен y = f ( x ) = x ^ T w + b , где w - это матрица весов от входных нейронов к скрытому слою, а b - это вектор смещения.

Во-вторых, вам нужно применить функцию активации g сети к результирующему вектору предыдущего шага z = g ( y )

Наконец, на выходе получается произведение h ( z ) = z . v + n, где v - вектор весов от скрытого слоя к выходному нейрону и n смещения. В случае более чем одного выходного нейрона, вы будете повторять это для каждого.

Я никогда не использовал функции matlab mlp, поэтому я не знаю, как получить вес в этом случае, но я уверен, что сеть хранит их где-то. Изменить: Поиск документации я нашел свойства:

  • net.IW numLayers-by-numInputs массив ячеек входных значений веса
  • net.LW массив ячеек со значениями веса слоя numLayers-by-numLayers
  • net.b numLayers-by-1 массив значений смещения ячеек
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...