Как хранить различные NN-топологии и соответствующие ошибки, используя цикл For в MATLAB? - PullRequest
0 голосов
/ 01 мая 2019
  • Это модель нейронной сети с обратной связью для прогнозирование параметра (т). В основном, код работает над различное количество скрытых узлов в двух скрытых слоях и рассчитать Относительная абсолютная ошибка для каждой топологии NN.

Для каждой NN-топологии процесс обучения запускается три раза, чтобы получить среднюю ошибку для этой топологии.

  • Здесь цикл for (k) должен запускать одну и ту же топологию NN 3 раза, чтобы принять среднюю ошибку.

Цикл for (j) - это количество скрытых узлов во втором скрытом слое. И цикл for (i) - это количество скрытых узлов в первом скрытом слое.

  • Я бы хотел сохранить структуру "net" со своими свойствами, NN топология и связанная ошибка в одной матрице или массиве найдите, какая топология NN имеет наименьшую ошибку.

Нет синтаксической ошибки, но проблема в том, что код не хранит все возможные комбинации для топологий NN и соответствующие им ошибки. Вот что я написал ... вы можете попробовать использовать случайные данные вместо чтения строки таблицы Excel.

close all; clear; clc 
opengl('save', 'software') 
% define inputs & target 
train_data = xlsread('trainingData.xlsx', 1); 
x1 = train_data(:,1); 
x2 = train_data(:,2); 
x3 = train_data(:,8); 
x4 = train_data(:,9); 
t = train_data(:,10); 
in = [x1 x2 x3 x4]; 
% Create and train the Multilayer FFNN 
for i = 4:8 
    for j = 4:8 
        for k = 1:3 
            net = feedforwardnet([i j], 'trainlm'); 
            net = configure(net, in', t'); 
            net.layers{1}.transferFcn = 'logsig'; 
            net.layers{2}.transferFcn = 'logsig'; 
            net.divideParam.trainRatio = 0.7;       % training set [%]
            net.divideParam.valRatio = 0.3;         % validation set [%]
            net.divideParam.testRatio = 0;          % test set [%] 
        % Train the NN 
            [net,tr,Y,E] = train(net, in', t'); 
        % Calculate Error 
            AbsErr(k) = abs((Y(k) - t(k)) / t(k)) * 100; 
        end 
        meanAbsErr(j) = mean(AbsErr); 
        Topology{j,1} = sprintf('[%d %d]', i, j); 
        Performance{j,1} = {Topology(j), meanAbsErr(j)}; 
    end 
end

Я ожидаю, что массив "Топология" будет иметь следующие комбинации архитектур NN:

[4 4], [4 5], ..., [4 м] [5 4], [5 5], ..., [5 j]. , , [я 4], [я 5], ..., [i j]

i: количество узлов в первом скрытом слое. j: количество узлов во втором скрытом слое.

И массив «Производительность», чтобы иметь относительную абсолютную ошибку для каждой из этих архитектур NN. Что я должен изменить в коде, чтобы добиться этого?

...