Проблема проведения сигмоидной модели персептрона - PullRequest
0 голосов
/ 21 октября 2018

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

Инструкции, которые мне были даны, отображаются в виде:

"для каждого примера обучения (xe, ye)

  • вычислите результат: o =s (s) = 1 / (1 + es), где: s = Σi = 0d wi xi

  • , если Персептрон не отвечает правильно, вычислить поправки веса:

Δwi = Δwi + η (ye - oe) s (s) (1 - s (s)) xie

обновить веса с накопленной ошибкой из всех примеров

wi = wi + Δwi // Правило градиентного спуска "

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

Во-вторых, вес и результат, похоже, не меняются, и я не уверен, почему.

npats = 4;
x_inputs = [1 0 0 1;1 0 1 1];
Desired = [0 1 1 0];
lr = 0.1;
inputs = [ones(1,npats); x_inputs];
weights = [0 -1 -1];

for i = 1:100

  k = 1+rem(i,npats);
  output = 1./(1+exp(-1.*(weights * inputs(:, k)))) > 0;
  fprintf('%2d. output = ',output); 
  disp(output);
  if output == Desired, break, end

  weights = weights + lr * (Desired(k) -output) * output * (1 - output)*inputs(:,k)';
  fprintf('%2d.  Weights = ',i);
  disp(weights);
  disp(output);
   pause(0.5)

end

Буду признателен за любую помощь или направление для этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...