2015-04-21 2 views
0

У меня есть следующий код, реализованный в Matlab. Я хочу обучить персептрон, используя алгоритм пакетной обработки, чтобы отделить эти отделяемые точки линкера. Итак, для этого я использую функцию adapt(), но, похоже, не работает. Я имею в виду, что мой персептрон не способен классифицировать точки так, как они должны быть. У этого есть некоторые веса, которые никому не полезны. С другой стороны, когда я использую функцию train(), все идет по плану. Персептрон умеет классифицировать точки с точностью. Может ли кто-нибудь объяснить мне, что не так с моим кодом? Заранее спасибо!Функция адаптации функции Matlab() не работает

function problema2_1() 

p = -1 + (1 + 1) .* rand(3,5); 
for i = 1 : length(p) 
    if 2 * p(1,i) - p(2,i) + p(3,i) < 0 
     t(i) = -1; 
    else 
     t(i) = 1; 
    end 
end 

net = newp([-1 1; -1 1; -1 1],1,'hardlims'); 
net.adaptParam.passes = 1000000; 
net = adapt(net,p,t); 


plotpv(p,hardlim(t)); 
hold on 
plotpc(net.IW{1,1,1},net.b{1}); 
t - sim(net,p) 
end 
+0

Что «не работает»? Можете ли вы опубликовать ошибку, фактический результат и ожидаемый результат в вопросе? – krisdestruction

+1

Было бы также полезно узнать, какую версию Matlab вы используете. –

ответ

2

adapt работает только проходит через данные обучения один раз, и, таким образом, делает очень небольшие обновления для весов сети. Между тем train выполняет повторную проверку данных тренировки несколько раз, пока не будет достигнуто условие остановки.

В примерах в Matlab documentation for adapt должно содержаться разъяснение. Я подозреваю, что ваша линия net.adaptParam.passes = 1000000 не делает то, что, по вашему мнению, делает.

В качестве немедленного исправления попробуйте несколько раз прокрутить свой net = adapt(net,p,t), чтобы убедиться, что результирующая сеть, похоже, сходится к той, которая получена при использовании train().

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