Я некоторое время пытался реализовать свою первую регрессионную нейронную сеть в MATLAB, следуя примеру из рисунка 5.3 на стр. 231 из книги Распознавание образов и машинное обучение от C. Bishop.
В этом примере двухслойная нейронная сеть использовалась для реализации нескольких преобразований, таких как sin , квадрат , heavyiside и абсолютное значение функции. Следовательно, входной и выходной слои имеют только один нейрон, тогда как скрытый слой имеет три из них. Как упомянуто в заголовке изображения, скрытые слои используют функции активации tanh , тогда как выходные данные являются линейными.
Единственная функция, для которой я иногда "" близко "" "(чтобы найти, что означают апострофы на прилагаемом рисунке), была греховной. Остальные все еще так далеки от того, к чему я стремлюсь. Разве решение не должно работать во всех случаях, как в примере?
Пожалуйста, найдите мою фотографию и мой код (это измененная версия здесь ). Заранее большое спасибо за ваше руководство.
%% INITIALIZATION
h = [3];
X = linspace(-1,1,1000);
T = sin(X*pi);
%% NEURAL NETWORK
eta = 1/size(X,2);
h = [size(X,1);h(:);size(T,1)];
L = numel(h);
W = cell(L-1,1);
for l = 1:L-1
W{l} = randn(h(l),h(l+1)); % Should I maybe initialize this differently?
end
Z = cell(L,1);
Z{1} = X;
maxiter = 10000;
mse = zeros(1,maxiter);
% forward
for iter = 1:maxiter
for l = 2:L-1
Z{l} = tanh(W{l-1}'*Z{l-1}); % 5.10, 5.49
end
Z{L} = W{L-1}'*Z{L-1}; % Linear output activation function
% backward
E = T-Z{L}; % E = dk
mse(iter) = mean(dot(E,E),1);
dW = Z{L-1}*E';
W{L-1} = W{L-1}+eta*dW;
for l = L-2:-1:1
df = 1-Z{l+1}.^2; % Derivative of tanh function
dj = df.*(W{l+1}*E);
dW = Z{l}*dj'; % 5.67
W{l} = W{l}+eta*dW;
E = dj;
end
end
mse = mse(1:maxiter);
model.W = W;
%% RESULTS
plot(mse);
disp(['T = [' num2str(T) ']']);
W = model.W;
Y = X;
for l = 1:length(W)-1
Y = tanh(W{l}'*Y);
end
Y = W{length(W)}'*Y;
disp(['Y = [' num2str(Y) ']']);
figure
plot(X, T, 'o');
hold on
plot(X, Y);
legend('T (target output)','Y (trained output)', 'Location', 'southeast');
hold off
Как вы, возможно, уже заметили, я далеко не эксперт в этой области. Если вы знаете какой-либо онлайн-курс / хороший справочник, кроме вышеупомянутой книги, где я могу найти несколько закодированных примеров, я с удовольствием это оценил бы. Пожалуйста, не стесняйтесь спрашивать или комментировать все, что вы можете рассмотреть.
С наилучшими пожеланиями,
Aitor