【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的函数】

介绍

上一篇

【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的数据结构】_bear_miao的博客-CSDN博客原文链接如下【MATLAB深度学习工具箱】学习笔记--体脂估计Body Fat Estimation_bear_miao的博客-CSDN博客介绍本示例展示一个函数拟合神经网络如何根据解剖学测量结果估计体脂。【注:关键词:多维数据 函数拟合 神经网络】问题描述在本例子中根据如下13种身体特征评估体脂。【注:具体的属性特征对学习此解决问题的逻辑影响并不大,知道是许多相关或不相关的多维度特征即可】Age (years)Weight (lbs)Height (inches)Neck circumference https://blog.csdn.net/bear_miao/article/details/121373910?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163715261816780271570843%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163715261816780271570843&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-6-121373910.first_rank_v2_pc_rank_v29&utm_term=fitnet&spm=1018.2226.3001.4187

学习了拟合神经网络fitnet里面的数据结构,本节继续学习拟合神经网络fitnet里面的函数。

net对象如下所示:

>> net
net =
    Neural Network
              name: 'Function Fitting Neural Network'
          userdata: (your custom info)
    dimensions:
         numInputs: 1
         numLayers: 2
        numOutputs: 1
    numInputDelays: 0
    numLayerDelays: 0
 numFeedbackDelays: 0
 numWeightElements: 226
        sampleTime: 1
    connections:
       biasConnect: [1; 1]
      inputConnect: [1; 0]
      layerConnect: [0 0; 1 0]
     outputConnect: [0 1]
    subobjects:
             input: Equivalent to inputs{1}
            output: Equivalent to outputs{2}
            inputs: {1x1 cell array of 1 input}
            layers: {2x1 cell array of 2 layers}
           outputs: {1x2 cell array of 1 output}
            biases: {2x1 cell array of 2 biases}
      inputWeights: {2x1 cell array of 1 weight}
      layerWeights: {2x2 cell array of 1 weight}
    functions:
          adaptFcn: 'adaptwb'
        adaptParam: (none)
          derivFcn: 'defaultderiv'
         divideFcn: 'dividerand'
       divideParam: .trainRatio, .valRatio, .testRatio
        divideMode: 'sample'
           initFcn: 'initlay'
        performFcn: 'mse'
      performParam: .regularization, .normalization
          plotFcns: {'plotperform', 'plottrainstate', 'ploterrhist',
                    'plotregression', 'plotfit'}
        plotParams: {1x5 cell array of 5 params}
          trainFcn: 'trainlm'
        trainParam: .showWindow, .showCommandLine, .show, .epochs,
                    .time, .goal, .min_grad, .max_fail, .mu, .mu_dec,
                    .mu_inc, .mu_max
    weight and bias values:
                IW: {2x1 cell} containing 1 input weight matrix
                LW: {2x2 cell} containing 1 layer weight matrix
                 b: {2x1 cell} containing 2 bias vectors
    methods:
             adapt: Learn while in continuous use
         configure: Configure inputs & outputs
            gensim: Generate Simulink model
              init: Initialize weights & biases
           perform: Calculate performance
               sim: Evaluate network outputs given inputs
             train: Train network with examples
              view: View diagram
       unconfigure: Unconfigure inputs & outputs
    evaluate:       outputs = net(inputs)

里面包含的运算相关的参数如下:

 (1)IW;

(2)LW;

(3)b;

(4)inputs.range;inputs.processedRange

(5)outputs.range;outputs.processedRange

如何根据这7类参数计算出最后的拟合结果?

netfit的计算公式

原始数据

根据net.IW可得下式,记为

>> W1=net.IW{1}
W1 =
   -0.0643   -0.5102   -0.3899   -1.1452   -0.6156   -0.5644   -0.8229   -0.4793   -1.4119   -0.0568   -0.4892    0.1450   -2.0693
   -3.3754    0.9086    0.4771    1.2751   -0.9957    0.7283   -0.2105   -0.9506    0.6034   -1.4836   -0.4590    0.8682    0.0842
   -0.9134    1.9986    0.3363    0.0187    1.4188   -0.0724    1.1463    1.5481   -1.1005    0.2486    0.2108   -0.6476    0.2342
    0.4928   -1.1089    1.3174   -0.0159    0.1640   -1.8452   -0.2444    0.2382    0.4159   -1.0352   -0.1922   -0.2572    0.2730
   -0.1881   -0.4629    0.5444    0.1811   -0.2755   -1.0071   -0.0371    0.9353    0.0249   -0.7149    0.6569    1.3472    0.8498
   -0.5650    1.4343    1.6925    0.6614    0.8298    0.4463   -0.0292    0.0611    0.1525    0.6717   -1.9798   -1.3753   -1.4448
   -0.8131    1.1747    0.9539   -0.0602   -1.3154    0.5710   -1.3058    1.2787    1.4570   -0.9123   -1.0669    1.0100   -0.4752
   -0.3102   -1.1759    0.1568   -0.2604   -0.4042   -0.6719    0.2898    2.9933    0.6541    0.6591   -0.3286   -1.5196    0.8313
   -0.2545    0.3364   -1.0118    0.8460    0.8119   -0.2874    0.3222   -1.9115    1.1700   -0.9626    0.9201    2.1497   -0.4317
    0.8291    0.4106    1.3754   -0.1689    0.3806    0.4695   -0.6680    3.0876   -0.6761   -0.9902   -0.5475   -0.9032   -0.0428
   -1.8959    2.3886   -1.1967   -0.6461   -1.0763   -0.2231    0.3428   -1.1600   -0.0316   -1.1602   -0.4950    1.0815    0.8906
   -0.1548   -0.6660    0.1265    0.7222    0.8261   -0.4984   -0.2974   -0.0020   -0.4614   -0.0332    0.1965   -0.4464   -0.9535
    0.3757    0.8101    1.0679    0.4015    0.4796   -0.2457    0.5457    1.5153   -0.3745    1.5960    1.5651    0.5996   -1.2532
   -1.0513    0.1569    0.1494   -0.5867   -1.9264    0.0396   -0.2479    0.6159   -1.0877    0.4553    1.2083    0.2206    3.3561
    0.1181   -0.2309   -0.3543    1.0262   -0.6904   -0.1576    0.8765    0.5159   -0.0843   -0.1114    0.8817   -0.2681    0.3237

根据net.LW{2,1}可得下式,记为

>> W2=net.LW{2,1}
W2 =
   -0.2171   -0.0488   -0.4684   -0.7564    0.2761    0.4006    0.0158    0.1042    0.2304    0.3622   -0.2882    0.1682   -0.7007    0.0786    0.5335

根据net.b{1}可得下式,记为

>> b1=net.b{1}
b1 =
    2.1510
    1.9738
    1.5234
   -1.9311
    0.5286
    2.5662
   -0.4979
    0.1441
    0.1731
   -0.2444
   -1.6653
    1.2786
   -1.7759
   -2.2227
   -2.0938

根据net.b{2}可得下式,记为

>> b2=net.b{2}
b2 =
   -0.7651 

根据net.inputs{1}.range可得下式,记为和

 >> in_xref = net.inputs{1}.range
in_xref =
   22.0000   81.0000
  118.5000  363.1500
   29.5000   77.7500
   31.1000   51.2000
   79.3000  136.2000
   69.4000  148.1000
   85.0000  147.7000
   47.2000   87.3000
   33.0000   49.1000
   19.1000   33.9000
   24.8000   45.0000
   21.0000   34.9000
   15.8000   21.4000
>> in_xref_min = in_xref(:,1)
in_xref_min =
   22.0000
  118.5000
   29.5000
   31.1000
   79.3000
   69.4000
   85.0000
   47.2000
   33.0000
   19.1000
   24.8000
   21.0000
   15.8000
>> in_xref_max = in_xref(:,2)
in_xref_max =
   81.0000
  363.1500
   77.7500
   51.2000
  136.2000
  148.1000
  147.7000
   87.3000
   49.1000
   33.9000
   45.0000
   34.9000
   21.4000

根据net.inputs{1}.processedRange可得下式,记为和

>> in_yref = net.inputs{1}.processedRange
in_yref =
   -1.0000    1.0000
   -1.0000    1.0000
   -1.0000    1.0000
   -1.0000    1.0000
   -1.0000    1.0000
   -1.0000    1.0000
   -1.0000    1.0000
   -1.0000    1.0000
   -1.0000    1.0000
   -1.0000    1.0000
   -1.0000    1.0000
   -1.0000    1.0000
   -1.0000    1.0000
>> in_yref_min = in_yref(:,1)
in_yref_min =
    -1
    -1
    -1
    -1
    -1
    -1
    -1
    -1
    -1
    -1
    -1
    -1
    -1
>> in_yref_max = in_yref(:,2)
in_yref_max =
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000

根据net.outputs{2}.range可得下式,记为和

>> out_xlim = net.outputs{2}.range
out_xlim =
         0   47.5000
>> out_xlim_min = out_xlim(1)
out_xlim_min =
     0
>> out_xlim_max = out_xlim(2)
out_xlim_max =
   47.5000

根据net.outputs{2}.processedRange可得下式,记为和

>> out_ylim = net.outputs{2}.processedRange
out_ylim =
    -1     1
>> out_ylim_min=out_ylim(1)
out_ylim_min =
    -1
>> out_ylim_max=out_ylim(2)
out_ylim_max =
     1

拆分后,一共有如下12个参数: 

如何根据这12个参数得到最终的拟合值?

netfit对应的simulink模型

根据fitnet对象包含的方法gensim: Generate Simulink model,可以生成对应的simulink模型。

如下所示 

【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的函数】_第1张图片

其中:

(1)x1为输入参数,在体脂估计算例中为13×1的矩阵;

(2)Function Fitting Neural Network为拟合神经网络;

(3)y1为输出,在体脂估计算例中为1×1矩阵。 

在本层,可得:

 Function Fitting Neural Network模型展开

展开如下:

【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的函数】_第2张图片

 包含两排,

第一排为输入x1到中间变量a\{1\},可以得到:

【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的函数】_第3张图片

继续展开ProcessInput1,如下所示,得到: 

 

 【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的函数】_第4张图片

 Layer1展开如下所示,得到:

【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的函数】_第5张图片 

 其中tansig展开如下所示,得到:

 【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的函数】_第6张图片

 综上,

第二排为中间变量a\{1\}到输出y1,可以得到:

展开Layer2如下所示,可以得到:

 【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的函数】_第7张图片

其中展开purelin得到:

 【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的函数】_第8张图片

展开 ProcessOutput1得到:

【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的函数】_第9张图片

其中展开mapminmax_reverse得到(下图中x,y为局部标号):

 【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的函数】_第10张图片

 最终公式

最终计算公式为:

p=(x1-in_xref_min).*(in_yref_max-in_yref_min)./(in_xref_max-in_xref_min)+in_yref_min;
a1=2./(1+exp(-2*(W1*p+b1)))-1;
L2_out = W2*a1+b2;
y1=(L2_out-out_ylim_min)*(out_xlim_max-out_xlim_min)/(out_ylim_max-out_ylim_min)+out_xlim_min

带入x1=zeros(13,1) ,得到:

>> x1=zeros(13,1);
p=(x1-in_xref_min).*(in_yref_max-in_yref_min)./(in_xref_max-in_xref_min)+in_yref_min;
a1=2./(1+exp(-2*(W1*p+b1)))-1;
L2_out = W2*a1+b2;
y1=(L2_out-out_ylim_min)*(out_xlim_max-out_xlim_min)/(out_ylim_max-out_ylim_min)+out_xlim_min
y1 =
 -21.854734309717628

 直接采用拟合神经网络训练结果网络net进行计算,

y1=net(x1)

 得到的结果为:

>> y1=net(zeros(13,1))
y1 =
 -21.854734309717625

两者在浮点计算意义下结果完全一致,表明了分析过程的正确性。

你可能感兴趣的:(#,MATALB深度学习工具箱,matlab,开发语言,机器学习)