2012-01-12 63 views
2

我創建了一個神經網絡matlab。這是腳本:用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中

回答

0

看起來你是預先處理輸入但不處理後的輸出。後處理使用「反向」處理表單。 (目標是預處理的,所以輸出是反向處理的)。

-1

這個方程

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

是錯誤的。你爲什麼寫兩個tansig?你有10個nerouns你應該寫10次或用於i=1:10;