上一篇
【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类参数计算出最后的拟合结果?
根据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个参数得到最终的拟合值?
根据fitnet对象包含的方法gensim: Generate Simulink model,可以生成对应的simulink模型。
如下所示
其中:
(1)x1为输入参数,在体脂估计算例中为13×1的矩阵;
(2)Function Fitting Neural Network为拟合神经网络;
(3)y1为输出,在体脂估计算例中为1×1矩阵。
在本层,可得:
展开如下:
包含两排,
第一排为输入到中间变量,可以得到:
继续展开ProcessInput1,如下所示,得到:
Layer1展开如下所示,得到:
其中tansig展开如下所示,得到:
综上,
第二排为中间变量到输出,可以得到:
展开Layer2如下所示,可以得到:
其中展开purelin得到:
展开 ProcessOutput1得到:
其中展开mapminmax_reverse得到(下图中x,y为局部标号):
最终计算公式为:
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
两者在浮点计算意义下结果完全一致,表明了分析过程的正确性。