Я новичок в 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
Буду признателен за любую помощь или направление для этого