Я пытаюсь аналитически воспроизвести функцию нейронной сети Matlab, чтобы лучше ее понять. Я уже рассмотрел следующую архитектуру Matlab NN , Функции обработки ввода / вывода Matlab и соответствующую статью , но у меня все еще есть проблемы.
Вот мой простой пример. Я хочу установить нейронную сеть с прямой связью с 1 скрытым слоем и сказать 10 нейронов, чтобы оценить функцию y = sin (4x) для x в [0,3] с учетом некоторых данных. Я хочу написать свою собственную функцию Matlab, чтобы аналитически выразить функцию нейронной сети Matlab.
Из обучения сети net
Матлаб говорит мне, что передаточными функциями являются tansig (скрытый слой 1) и purelin (выход). Это также говорит мне, что функции обработки ввода и вывода: mapminmax
.
Вот код, который я написал и который представляет собой простой пример сравнения: моя аналитическая функция, предсказание Матлаба и истинная функция, которую я хочу оценить:
rng(1);
xTrain = 0:0.5:3; % Training data
yTrain = sin(4*xTrain); % Training data
net = fitnet(10); % 10 neurons
net = train(net,xTrain,yTrain);
xPred = 0:0.1:3; % Prediction data
% Analytic
% Scale input
NNinput = mapminmax(xPred,net.inputs{1}.processedRange(1,1),net.inputs{1}.processedRange(1,2));
HL1 = tansig(net.IW{1,1}*NNinput + repmat(net.b{1},[1,size(NNinput,2)]));
HL2 = purelin(net.LW{2,1}*HL1 + repmat(net.b{2},[1,size(HL1,2)]));
% Scale output
PredValsAnlyt = mapminmax(HL2,net.outputs{2}.range(1,1),net.outputs{2}.range(1,2));
% True function
yTrue = sin(4*xPred);
% Matlab prediction
yPred = net(xPred);
figure;
plot(xPred,PredValsAnlyt,xPred,yPred,xPred,yTrue)
legend('My analytic','Matlab prediction','True')
Вот вывод, сравнивающий мою аналитическую функцию, предсказание Матлаба и истинную функцию. Хотя я не ожидаю, что предсказание Matlab будет близко к истинной функции из-за грубых данных, я ожидаю, что моя аналитическая функция и предсказание Matlab должны быть одинаковыми. Что меня беспокоит, так это то, что предсказание Matlab фактически выходит за пределы целевого диапазона [-1,1] выходных данных. Я что-то упускаю?

Обновление: 29 марта 2019 года:
После получения дополнительной информации о различных веб-сайтах и игры с Matlab, похоже, что в приведенном выше коде вместо
PredValsAnlyt = mapminmax(HL2,net.outputs{2}.range(1,1),net.outputs{2}.range(1,2))
у нас есть
PredValsAnlyt = mapminmax('reverse',HL2,net.outputs{2}.processSettings{1})
Я могу согласовать свой код с выводом Matlab.
Таким образом, проблема теперь сводится к пониманию mapminmax в Matlab с обратной опцией и указанными настройками процесса. Кто-нибудь знаком с этим? Он не просто выполняет процедуру масштабирования для достижения цели min и max, потому что это то, что я делал в своем исходном коде.