Нормализованный вес перцептрона и функция обучения смещением
[dW,LS] = learnpn(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
info = learnpn('code
')
learnpn
является функцией обучения с учетом веса и смещения. Это может привести к более быстрому обучению, чем learnp
когда входные векторы имеют широко меняющиеся величины.
[dW,LS] = learnpn(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
принимает несколько входы,
W |
|
P |
|
Z |
|
N |
|
A |
|
T |
|
E |
|
gW |
|
gA |
|
D |
|
LP | Параметры обучения, нет, |
LS | Состояние обучения, первоначально должно быть = |
и возвращает
dW |
|
LS | Новое состояние обучения |
info = learnpn('
возвращает полезную информацию для каждого code
')code
вектор символов:
'pnames' | Имена параметров обучения |
'pdefaults' | Параметры обучения по умолчанию |
'needg' | Возвращает 1, если эта функция использует |
Здесь вы задаете случайный вход P
и E ошибок
для слоя с двухэлементным входом и тремя нейронами.
p = rand(2,1); e = rand(3,1);
Потому что learnpn
эти значения нужны только для вычисления изменения веса (см. «Алгоритм» ниже), используйте их для этого.
dW = learnpn([],p,[],[],[],[],e,[],[],[],[],[])
Перцептроны действительно имеют одно реальное ограничение. Набор входа векторов должен быть линейно разделяемым, если требуется найти решение. То есть, если входные векторы с целевыми объектами 1 не могут быть отделены линией или гиперплоской от входных векторов, сопоставленных со значениями 0, перцептрон никогда не сможет классифицировать их правильно.
learnpn
вычисляет изменение веса dW
для данного нейрона из входных данных нейрона P
и E ошибок
согласно нормированному правилу обучения перцептронов:
pn = p / sqrt(1 + p(1)^2 + p(2)^2) + ... + p(R)^2) dw = 0, if e = 0 = pn', if e = 1 = -pn', if e = -1
Выражение для dW
можно суммировать как
dw = e*pn'