Для реализации однослойной нейронной сети у меня есть два файла данных.Однослойная нейронная сеть
In:
0.832 64.643
0.818 78.843
Out:
0 0 1
0 0 1
Вышеупомянутый формат 2 файлов данных.
Выход цели - «1 для определенного класса, к которому принадлежит соответствующий вход, и« 0 для остальных 2 выходов.
Проблема заключается в следующем:
Ваш один слой нейронной сети будет найти (3 по 2 матрицы) и б (3 к 1 вектора) в Y = A * X + B, где Y [C1, C2, C3] 'и X является [x1, x2]'.
Для того, чтобы решить эту проблему выше, с нейронной сети, мы можем переписать уравнение следующим образом: Y = А '* Х', где А»= [A B] (3 × 3-матрица) и X 'является [x1, x2, 1]'
Теперь вы можете использовать нейронную сеть с три входных узлов (один для x1, x2, и 1 соответственно) и трех выходов (C1, С2, С3) ,
Полученные 9 (так как мы имеем 9 соединения между 3 входами и выходами 3 ) вес будет эквивалентен элементов матрицы А».
Basicaly, я пытаюсь сделать что-то вроде этого, но это не работает:
function neuralNetwork
load X_Q2.data
load T_Q2.data
x = X_Q2(:,1);
y = X_Q2(:,2);
learningrate = 0.2;
max_iteration = 50;
% initialize parameters
count = length(x);
weights = rand(1,3); % creates a 1-by-3 array with random weights
globalerror = 0;
iter = 0;
while globalerror ~= 0 && iter <= max_iteration
iter = iter + 1;
globalerror = 0;
for p = 1:count
output = calculateOutput(weights,x(p),y(p));
localerror = T_Q2(p) - output
weights(1)= weights(1) + learningrate *localerror*x(p);
weights(2)= weights(1) + learningrate *localerror*y(p);
weights(3)= weights(1) + learningrate *localerror;
globalerror = globalerror + (localerror*localerror);
end
end
Я пишу эту функцию в какой-либо другой файл и назвав его в моем предыдущем коде.
function result = calculateOutput (weights, x, y)
s = x * weights(1) + y * weights(2) + weights(3);
if s >= 0
result = 1;
else
result = -1;
end