我创建了一个神经网络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)
看起来您正在预处理输入但不对输出进行后处理。后处理使用“反向”处理表格。 (目标是预处理的,因此输出会被反向处理)。
答案 1 :(得分:-1)
这个等式
uscita=tansig(W2*(tansig(W1*in+b1))+b2);
错了。为什么要写两个tansig
?你有10个nerouns你应该写10次或用于i=1:10
;