Аппроксимация функции: нейронная сеть великолепна «на бумаге», но когда смоделированные результаты очень плохи?
Мне нужна помощь с NN, потому что я не понимаю, что произошло. Один скрытый слой, I=4, H=1:20, O=1. Я запускаю каждую сетевую архитектуру 10 раз с разными начальными весами (initnw оставил по умолчанию). Всего у меня есть 34 набора данных, которые были разделены 60/20/20 при использовании алгоритма Левенберга-Марквадта. Mse_goal = 0,01*mean(var(t’,1)), я рассчитываю NMSE и R², выбираю лучший R², для этого проверяю производительность каждой подвыборки, проверяю графики регрессии, проверяю rmse. R² обычно составляет около 0,95; R для каждого подмножества 0,98… Но когда я моделирую сеть с совершенно новым набором данных, оценки довольно сильно расходятся. Это не из-за экстраполяции. Данные нормализованы с помощью mapminmax, передаточных функций tansig, purelin.
На самом деле Trainbr был моим первым выбором, так как у меня небольшой набор данных, а trainbr не нуждается в наборе проверки (Matlab2015a), но он ужасно медленный. Я управлял сетью с trainbr, и мы говорим о часах и минутах с trainlm.
Я прочитал массу постов и туториалов Грега Хита и нашел там очень ценную информацию, но так ничего и не нашел. Я не вижу выхода.
% Solve an Input-Output Fitting problem with a Neural Network % Script generated by Neural Fitting app % Created 09-Aug-2016 18:33:13 % This script assumes these variables are defined: % % MP_UA_K - input data. % UA_K - target data. close all, clear all load varUA_K x = MP_UA_K; t = UA_K; var_t=mean(var(t',1)); %t variance [inputs,obs]=size(x); % hiddenLayerSize = 20; %max number of neurons numNN = 10; % number of training runs neurons = [1:hiddenLayerSize]'; training_no = 1:numNN; obs_no = 1:obs; nets = cell(hiddenLayerSize,numNN); trainOutputs = cell(hiddenLayerSize,numNN); valOutputs = cell(hiddenLayerSize,numNN); testOutputs = cell(hiddenLayerSize,numNN); Y_all = cell(hiddenLayerSize,numNN); performance = zeros(hiddenLayerSize,numNN); trainPerformance = zeros(hiddenLayerSize,numNN); valPerformance = zeros(hiddenLayerSize,numNN); testPerformance = zeros(hiddenLayerSize,numNN); e = zeros(numNN,obs); e_all = cell(hiddenLayerSize,numNN); NMSE = zeros(hiddenLayerSize,numNN); r_train = zeros(hiddenLayerSize,numNN); r_val = zeros(hiddenLayerSize,numNN); r_test = zeros(hiddenLayerSize,numNN); r = zeros(hiddenLayerSize,numNN); Rsq = zeros(hiddenLayerSize,numNN); for j=1:hiddenLayerSize % Choose a Training Function % For a list of all training functions type: help nntrain % 'trainlm' is usually fastest. % 'trainbr' takes longer but may be better for challenging problems. % 'trainscg' uses less memory. Suitable in low memory situations. trainFcn = 'trainbr'; % Bayesian Regularization backpropagation. % Create a Fitting Network net = fitnet(j,trainFcn); % Choose Input and Output Pre/Post-Processing Functions % For a list of all processing functions type: help nnprocess net.input.processFcns = {'removeconstantrows','mapminmax'}; net.output.processFcns = {'removeconstantrows','mapminmax'}; % Setup Division of Data for Training, Validation, Testing % For a list of all data division functions type: help nndivide % podaci su sortirani prema zavisnoj varijabli, cca svaki tre?i dataset je % testni net.divideFcn = 'divideind'; % Divide data by index net.divideMode = 'sample'; % Divide up every sample net.divideParam.trainInd = [1:3:34,2:3:34]; % net.divideParam.valInd = [5:5:30]; net.divideParam.testInd = [3:3:34]; mse_goal = 0.01*var_t; % Choose a Performance Function % For a list of all performance functions type: help nnperformance net.performFcn = 'mse'; % Mean Squared Error net.trainParam.goal = mse_goal; % Choose Plot Functions % For a list of all plot functions type: help nnplot net.plotFcns = {'plotperform','plottrainstate','ploterrhist', ... 'plotregression', 'plotfit'}; for i=1:numNN % Train the Network net = configure(net,x,t); disp(['No. of hidden nodes ' num2str(j) ', Training ' num2str(i) '/' num2str(numNN)]) [nets{j,i}, tr{j,i}] = train(net,x,t); y = nets{j,i}(x); e (i,:) = gsubtract(t,y); e_all{j,i}= e(i,:); trainTargets = t .* tr{j,i}.trainMask{1}; %valTargets = t .* tr{j,i}.valMask{1}; testTargets = t .* tr{j,i}.testMask{1}; trainPerformance(j,i) = perform(net,trainTargets,y); %valPerformance(j,i) = perform(net,valTargets,y); testPerformance(j,i) = perform(net,testTargets,y); performance(j,i)= perform(net,t,y); rmse_train(j,i)=sqrt(trainPerformance(j,i)); %rmse_val(j,i)=sqrt(valPerformance(j,i)); rmse_test(j,i)=sqrt(testPerformance(j,i)); rmse(j,i)=sqrt(performance(j,i)); % outputs of all networks Y_all{j,i}= y; trainOutputs {j,i} = y .* tr{j,i}.trainMask{1}; %valOutputs {j,i} = y .* tr{j,i}.valMask{1}; testOutputs {j,i} = y .* tr{j,i}.testMask{1}; [r(j,i)] = regression(t,y); [r_train(j,i)] = regression(trainTargets,trainOutputs{j,i}); %[r_val(j,i)] = regression(valTargets,valOutputs{j,i}); [r_test(j,i)] = regression(testTargets,testOutputs{j,i}); NMSE(j,i) = mse(e_all{j,i})/mean(var(t',1)); % normalized mse % coefficient of determination Rsq(j,i) = 1-NMSE(j,i); end [minperf_train,I_train] = min(trainPerformance',[],1); minperf_train = minperf_train'; I_train = I_train'; % [minperf_val,I_valid] = min(valPerformance',[],1); % minperf_val = minperf_val'; % I_valid = I_valid'; [minperf_test,I_test] = min(testPerformance',[],1); minperf_test = minperf_test'; I_test = I_test'; [minperf,I_perf] = min(performance',[],1); minperf = minperf'; I_perf = I_perf'; [maxRsq,I_Rsq] = max(Rsq',[],1); maxRsq = maxRsq'; I_Rsq = I_Rsq'; [train_min,train_min_I] = min(minperf_train,[],1); % [val_min,val_min_I] = min(minperf_val,[],1); [test_min,test_min_I] = min(minperf_test,[],1); [perf_min,perf_min_I] = min(minperf,[],1); [Rsq_max,Rsq_max_I] = max(maxRsq,[],1); end figure(4) hold on xlabel('observation no.') ylabel('targets') scatter(obs_no,trainTargets,'b') % scatter(obs_no,valTargets,'g') scatter(obs_no,testTargets,'r') hold off figure(5) hold on xlabel('neurons') ylabel('min. performance') plot(neurons,minperf_train,'b',neurons,minperf_test,'r',neurons,minperf,'k') hold off figure(6) hold on xlabel('neurons') ylabel('max Rsq') scatter(neurons,maxRsq,'k') hold off % View the Network %view(net) % Plots % Uncomment these lines to enable various plots. %figure, plotperform(tr) %figure, plottrainstate(tr) %figure, ploterrhist(e) %figure, plotregression(t,y) %figure, plotfit(net,x,t) % Deployment % Change the (false) values to (true) to enable the following code blocks. % See the help for each generation function for more information. save figure(4).fig save figure(5).fig save figure(6).fig if (false) % Generate MATLAB function for neural network for application % deployment in MATLAB scripts or with MATLAB Compiler and Builder % tools, or simply to examine the calculations your trained neural % network performs. genFunction(net,'nn_UA_K_BR'); y = nn_UA_K_BR(x); end % sa?uvati sve varijable iz workspacea u poseban file za daljnju analizu
сохранить ws_UA_K_BR
ОТВЕЧАТЬ
Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech , ME, M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.
% Мне нужна помощь с NN, потому что я не понимаю, что произошло. Один % скрытый слой, I=4, H=1:20, O=1. Я запускаю каждую сетевую архитектуру 10 раз в % с разными начальными весами (initnw оставил значение по умолчанию). Всего у меня % 34 набора данных
Do you mean data points N = 34?
Обычно для каждого измерения требуется от 10 до 30 точек данных.
адекватно характеризуют распределение. Для 4-D дистрибутива я бы рекомендовал
40 <~ Ntrn <~ 120
%, которые были разделены 60/20/20 при использовании Levenberg-Marquadt
Ntrn = 34-2*round(0.2*34) = 20 Hub = (20-1)/(4+1+1) = 3.2
указывает на то, что у вас действительно недостаточно данных, чтобы адекватно охарактеризовать 4-мерное распределение.
СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ
Аппроксимация функции: отличная нейронная сеть
tea Аппроксимация функции: нейронная сеть отличная «на бумаге, но когда смоделированные результаты очень плохие? Мне нужна помощь…www.matlabsolutions.com»
Аппроксимация функции: отличная нейронная сеть
Аппроксимация функции: отличная нейронная сеть «на бумаге, но когда смоделированные результаты очень плохие? Мне нужна помощь с…matlabarticlesworld.blogspot.com»