Уравнение, которое вычисляет нейронную сеть в Matlab - PullRequest
2 голосов
/ 12 января 2012

Я создал нейронную сеть Matlab.Это сценарий:


    load dati.mat;
    inputs=dati(:,1:8)';
    targets=dati(:,9)';
    hiddenLayerSize = 10;
    net = patternnet(hiddenLayerSize);
    net.inputs{1}.processFcns = {'removeconstantrows','mapminmax', 'mapstd','processpca'};
    net.outputs{2}.processFcns = {'removeconstantrows','mapminmax', 'mapstd','processpca'};

    net = struct(net);
    net.inputs{1}.processParams{2}.ymin = 0;
    net.inputs{1}.processParams{4}.maxfrac = 0.02;
    net.outputs{2}.processParams{4}.maxfrac = 0.02;
    net.outputs{2}.processParams{2}.ymin = 0;
    net = network(net);

    net.divideFcn = 'divideind';  
    net.divideMode = 'sample';  % Divide up every sample
    net.divideParam.trainInd = 1:428;
    net.divideParam.valInd = 429:520;
    net.divideParam.testInd = 521:612;
    net.trainFcn = 'trainscg';  % Scaled conjugate gradient backpropagation
    net.performFcn = 'mse';  % Mean squared error
    net.plotFcns = {'plotperform','plottrainstate','ploterrhist', 'plotregression', 'plotconfusion', 'plotroc'};
    net=init(net);
    net.trainParam.max_fail=20;

    [net,tr] = train(net,inputs,targets);

    outputs = net(inputs);
    errors = gsubtract(targets,outputs);
    performance = perform(net,targets,outputs)

Теперь я хочу сохранить веса и уклоны сети и написать уравнение.Я сохранил веса и смещения:


    W1=net.IW{1,1};
    W2=net.LW{2,1};
    b1=net.b{1,1};
    b2=net.b{2,1};

Итак, я сделал предварительную обработку данных и написал следующее уравнение


    max_range=0;
    [y,ps]=removeconstantrows(input, max_range);

    ymin=0;
    ymax=1;
    [y,ps2]=mapminmax(y,ymin,ymax);

    ymean=0;
    ystd=1;
    y=mapstd(x,ymean,ystd);

    maxfrac=0.02;
    y=processpca(y,maxfrac);

    in=y';

    uscita=tansig(W2*(tansig(W1*in+b1))+b2);

Но с тем же входным входом = [1: 8] Я получаю разные результаты.Зачем?В чем дело?Помоги мне, пожалуйста!Это важно!

Я использую Matlab R2010B

Ответы [ 2 ]

1 голос
/ 24 января 2012

Похоже, вы предварительно обрабатываете входные данные, но не обрабатываете выходные данные. Постобработка использует «обратную» форму обработки. (Цели предварительно обрабатываются, поэтому выходные данные обрабатываются в обратном порядке).

0 голосов
/ 02 августа 2013

Это уравнение

uscita=tansig(W2*(tansig(W1*in+b1))+b2); 

неверно.Почему ты пишешь два tansig?У вас есть 10 имен, которые вы должны написать 10 раз или использовать для i=1:10;

...