• 沒有找到結果。

迷你超市的优化布局与神经网络模型的建立和运用

N/A
N/A
Protected

Academic year: 2022

Share "迷你超市的优化布局与神经网络模型的建立和运用"

Copied!
30
0
0

加載中.... (立即查看全文)

全文

(1)

迷你超市的优化布局与神经网络模型的建立和运用

刘双庆

([email protected])

摘要 本文分析研究 2008 年北京奥运比赛主场馆的周边地区小型商 亭构建建设,通过预先问卷调查,得出观众(购物主体)的出行和用 餐的需求方式和购物欲望情况,以此作为训练目标。20 个迷你超市,

由它们的人流分布情况,按人流分布百分比设定网络输入矢量。通过 构建含 2 个隐含层的 BP 神经网络,训练出它们的权值,并将权值识 别划分,得出迷你超市与 3 个主场馆的关联程度,以此确定超市的布 局。在以年龄为需求方式和购物欲望情况划分,和以消费水平高低划 分时,分别得到两个划分不同的模型,计算机计算得出两模型相关良 好,因此得出的模型可靠性高。

关键词 超市布局 BP 神经网络 流分布

一 问题重述

2008 年北京奥运比赛主场馆的周边地区小型商亭(迷你超市)

需要临时构建建设,由预先调查观众(购物主体)的出行和用餐的需 求方式和购物欲望情况,以及测算出的相应人流分布,来最优化小型 商亭构建布局问题。

二 问题假设

1 三次预演的运动会的问卷调查认为符合同一统计规律,三次可线性

(2)

组合为一次。

2 商业目标以购物主体的需求方式和购物欲望情况为基础,充分将模 型向问卷调查情况分布逼近,则认为可获利益最大。

三 符号说明

byage

表示通过年龄划分得出的参数

byconsume

表示通过消费划分得出的参数

四 模型的构建

通过问题的分析,我们可以将购物主体的需求方式和购物欲望情 况作为评判标准,将人流量分布作为输入值,进而计算他们的隐射关 系,构成权值分布,这权值分布的实际意义就是各超市与各场馆的相 关关系度。即:

J = W × Q

J 为需求方式和购物欲望情况的归一矩阵, W 为所求权值

( ,以辅助全局),Q 为输入矢量(人流量分布的归一

值)。 图一 体现出 20 个输入与三个场馆的关联。符号

网络作用算子。

3 2

1 W W

W

W = ⊗ ⊗

W2 W1 ⊗

图 一 两个隐含层的 BP 神经网络建模

在此采用附加动量法和自适应步长算法的 训练。对于更高精

(3)

度的训练,我在附录中编了一个 3 个隐含层的程序( 提供的训

练 为 1-2 个 隐 含 层 )。 激 活 函 数 用 S 型 。 训 练 流 程 如 下 :

matlab

图 二 BP 网络算法框图 五 模型训练

5.1 模型参数提取

5.11 需求方式和购物欲望情况(训练目标)的规律分布

本模型分别以年龄划分和以消费水平划分,将附录表格中的

和 进行了 0-1 刻画,通过累积求和,平均,求对比值:

"

false

"true "

age k j =i age k ( i , j ) 3

) 1 (

)) ( (

) ) (

( Max age j j j age

age

k k

k =

then

age ( j ) =k age k ( j )

)) ( (

) ) (

( Max age j j j age

age =

( =1,2,3;

i j

=1,2,3…9; =1,2,3,4)

k

同理:

(4)

consume k j =i consume k ( i , j ) 3

) 1 (

)) ( (

) ) (

( Max consume j j consume j

consume

k k

k =

then

consume ( j ) =k consume k ( j )

)) ( (

) ) (

( Max consume j j consume j

consume =

( =1,2,3;

i j

=1,2,3…9; =1,2,3...6)

k

得出数据分布:

byage

=[0.3953 0.4635 0.4312 0.2037 0.4207 0.4264 0.6487 1.0000 0.6910];

byconsume

=[0.4796 0.3707 0.3614 0.1667 0.3101 0.3216 0.3609 1.0000 0.6469];

1 2 3 4 5 6 7 8 9

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

age

consume

图三 按年龄和按消费划分的规律分布 5.12 模型输入向量

由于流分布通过 5.11 的结果和经过测算得出,为具体起见,构 造一个映射图:

(5)

图 四 流量相关分析

根据题目说明的,出行均采取最短路径,因此上图中的相关的连线(可 行道路),对于每一个迷你超市来说,并不是所有的都分配到。在计 算相关流量时,亦定义:

M N

k = ×

ζ

其中:

ζ k

为第 k 超市分配到的百分总和比,M 为三个主场管某场管

的总人数,N 为调查观众(购物主体)的出行和用餐的需求方式和购 物欲望情况百分率分布。此题先把所有连接进行表格描述,然后通过 人工选择确定归属。其中:

a=4;

b=6;

c=10;

c1=a*(bb(1)+bb(4))+c*bb(1);

c2=a*(bb(1)+bb(4)+bb(3))+b*bb(1)+c*bb(1);

c3=1*(a*(bb(2)+bb(5)+bb(6)+bb(7)+bb(8)+bb(9))+c*bb(1));

c4=1*(a*(bb(2)+bb(4)+bb(5)+bb(6)+bb(7)+bb(8)+bb(9))+c*bb(1));

其中a,b,c(注:a, c因为程序关系,位置与实际数据不对应)

为场管总容纳人数, 为购物主体的兴趣分布,每一项的右项为人

(6)

工依据图形和走最短路径原则选择得到。(全列出来在附录上)。 所得数据:

byage

=[0.0157 0.0259 0.0460 0.0480 0.0525 0.0363 0.0460 0.0210 0.0656 0.0656 0.0497 0.0497 0.0497 0.0081 0.0639 0.0993 0.0993 0.0993 0.0081 0.0504];

byconsume

=[0.0211 0.0335 0.0481 0.0500 0.0563 0.0398 0.0460 0.0225 0.0679 0.0679 0.0481 0.0481 0.0481 0.0090 0.0560 0.0938 0.0938 0.0938 0.0090 0.0469];

图像分布:

0 2 4 6 8 10 12 14 16 18 20

0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1

age

consume

图 五 各超市的人流百分比 5.2 神经网络结构与训练结果

这里采取两个隐含层的神经网络,结构为: 20-8-3-9(参见图一), 20 个输入端,9 个目标函数,当训练结果达到误差目标时,权值分布

就体现了隶属度。通过改进的变步长和加小动量的 函数进行训

练。

trainbpx

(7)

对输入和训练目标归一,转到(-1 ,1)的范围。输入归一:

min(aaa);

xaaa2 max(aaa);

xaaa1 = =

2/x;

x xaaa2;

- xaaa1

x = =

xaaa2)/2 (xaaa1

aver = +

aver;

- aaa

aaa =

目标归一:

J = J × 0 . 8

训练的参数设置:

lr=0.5;lr_inc=1.05;lr_dec=0.7;err_ratio=1.04;mom_const=0.9;

结果如下:

0 10 20 30 40 50 60

10-6 10-4 10-2 100

Epoch Su

mSquaedEo-rrrr

Training for 65 Epochs

0 10 20 30 40 50 60 70

0 2 4 6 8

Epoch Le

ar ni ng Rat e

图 六 按年龄划分的网络训练

TRAINBPX: 0/50000 epochs, lr = 0.5, SSE = 0.458372.

TRAINBPX: 65/50000 epochs, lr = 6.2264, SSE = 4.86139e-006.

byage = 0.2027 0.3323 0.4650

(8)

0 5 10 15 20 25 30 35 40 45 50 55 10-6

10-4 10-2 100

Epoch Su

m- Squaedr Eorrr

Training for 55 Epochs

0 10 20 30 40 50 60

0 1 2 3 4 5

Epoch Le

ar ni ng Rat e

图 七 按消费划分的网络训练

TRAINBPX: 0/50000 epochs, lr = 0.5, SSE = 0.0830832.

TRAINBPX: 55/50000 epochs, lr = 4.87854, SSE = 9.79024e-006.

consume =0.2166 0.3222 0.4613

1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3

0.2 0.25 0.3 0.35 0.4 0.45 0.5

图 八 按年龄和按消费划分得到的隶属度

对以上

byage

,

byconsume

的数据,转换成相应的连接超市的数量。

转换公式:

S = 20 × r

; (

r

为百分比)

ageresult

= 4.0549 6.6451 9.3001

ult

consumeres

= 4.3319 6.4431 9.2251 近似值有:

(9)

ageresult

=4 7 9

ult

consumeres

=4 7 9

因此从模型解出的结果得到建议:

可适当增加 B 区一个超市,减少 A 区一个超市。

由于超市的大小规模还可以变动,所以可以对训练后得到的权 值的分数部分一起考察,以更好的布局来节约建筑成本和其他相应成 本。引入超市规模:

X

aX

a

为两种超市规模的比值,

X

是 的 矩阵,

1× 20

I

为单位矩阵, 为耦合算子(类似点乘,用于程序编码)

⎪ ⎩

⎪ ⎨

=

=

=

3001 . 9

6451 . 6

0549 . 4

a IX

a IX

a IX byage

⎪ ⎩

⎪ ⎨

=

=

=

2251 . 9

4431 . 6

3319 . 4

a IX

a IX

a IX byconsume

它们是欠定方程组,在此我设置一种算法,以求在解空间更快

地找到次优解, 为假定的规模较大的商店的个数。

n

图 九 广泛解空间搜索探讨算法流程

弱连续矩阵修正方案附在附录里。(注:)考虑现实的情况,大 超市组合效应好,浪费低,并且已求模型的建议是可适当增加 B 区 一个超市,减少 A 区一个超市,所以:

取 =2(体现在编码中),可提议:

a

(10)

age: C: 1 1 2 B: 2 1 1 1 2 A: 2 1 1 2 1 2 consume: C: 1 1 2 B: 1 2 1 1 2 A: 2 1 2 1 1 2

其中 A,B,C 代表场馆,后面的数据的列数代表它分得的商店个数,2,

1 分别代表大小市场。

六 模型检验

本文分别用按年龄和按消费两个途径进行建模求解,始终是独立 的。从图八可以明显地看到两种途径训练得到的结果是很接近于一起 的。这可以说明,对不同因素的最终反映(该因素现实中反映的结果

也不会相差太远),模型收敛良好。这说明用此模型和方法是正确的。

七 模型推广

此类模型一般都是只知道输入端的情况和输出端的情况,中间过 程像黑箱效应一样。用权值训练,最后得到隐射关系。只要训练的重 复结果比重较大,则认为该训练得到的权值是该输入和输出的良好隐 射。

因此此类算法可以运用:

1 空间场能量分布,边坡应力分析等。

2 可以用于预测,一旦训练好权值,那系统的主要关系函数就会包 含于权值矩阵中。用未来的输入矢量运行,则可以得到未来可能出现 的观测值。

[注]1 弱连续矩阵指归化矩阵后以 0.1 为起始,0.9 为间隔步长的数 据组成的矩阵。如 x=[0.1 1.8 0.9]。从而使解空间在

3 20

个排列中优化。

2 依次最大指第一个最大值,第二个最大值,第三个…。

(11)

参考文献

1 丛爽 《

matlab

神经网络工具箱的运用》 中国科技大学出版社 2002 2 陈志军 《灌溉发展需求预测人工神经网络模型的建立与应用》

1998 年 2 月《水利学报》

3 陆伟民 《人工智能技术及运用》同济大学出版社 1998.4 附 录

%%%%%%===原始数据处理得到的数据=======%%%%%%%%

图 十 原始数据整理流程 clc;

%---age---

xa=[95 58 60 41 67 62 39 181 162 94 48 62 36 70 67 40 177 160

99 53 74 36 80 73 44 194 177];

xb=[359 290 400 184 388 408 323 1258 448

316 263 350 174 360 358 297 1121 403 380 355 434 210 467 454 372 1430 498];

xc=[92 140 153 64 134 128 269 294 148 85 148 121 56 119 124 246 278 129

(12)

xd=[66 111 68 19 56 59 152 104 122 43 99 62 28 56 61 141 96 112

55 99 73 34 71 78 167 112 131];

ta=mean(xa);tb=mean(xb);tc=mean(xc);td=mean(xd);

ta=ta/max(ta);tb=tb/max(tb);tc=tc/max(tc);td=td/max(td);

tt=ta+tb+tc+td;

tt=tt/max(tt);

figure;

plot(tt,'b');

gtext('age');

aa=tt; %-

%---consume---

xa=[104 125 125 58 121 150 190 310 183 100 105 117 61 129 117 135 302 192

110 116 132 65 166 159 194 328 226];

xb=[144 147 170 72 155 146 206 405 222 120 166 143 61 166 160 232 384 200 144 179 172 97 183 205 265 484 231];

xc=[268 251 311 138 315 307 323 905 362 234 223 253 140 265 277 313 777 302 271 281 316 146 340 332 347 957 382];

xd=[63 57 61 37 47 48 57 183 73

(13)

48 47 69 25 37 43 38 166 65 65 77 104 43 58 54 63 247 91];

xe=[18 14 7 2 5 2 3 23 21 22 13 9 3 5 8 4 34 22 19 11 7 1 7 5 6 27 17];

xf=[15 5 7 1 2 4 4 11 19 14 4 4 4 3 5 4 11 19 15 8 4 4 2 2 0 15 20];

ta=mean(xa);tb=mean(xb);tc=mean(xc);td=mean(xd);te=mean(xe);tf=me an(xf);

ta=ta/max(ta);tb=tb/max(tb);tc=tc/max(tc);td=td/max(td);te=te/max(te);tf

=tf/max(tf);

tt=ta+tb+tc+td+te+tf;

tt=tt/max(tt);

hold on plot(tt,'r');

gtext('consume');

bb=tt;

aa %----age---

bb %----consume----

%%%%%=====人流量的测算及程序======%%%%%%%%%%

clc;

(14)

%---

aa =[0.3953 0.4635 0.4312 0.2037 0.4207 0.4264 0.6487 1.0000 0.6910];

bb =[0.4796 0.3707 0.3614 0.1667 0.3101 0.3216 0.3609 1.0000 0.6469];

%--- a=4;

b=6;

c=10;

c1=a*(aa(1)+aa(4))+c*aa(1);

c2=a*(aa(1)+aa(4)+aa(3))+b*aa(1)+c*aa(1);

c3=a*(aa(2)+aa(5)+aa(6)+aa(7)+aa(8)+aa(9))+c*aa(1);

c4=a*(aa(2)+aa(4)+aa(5)+aa(6)+aa(7)+aa(8)+aa(9))+c*aa(1);

%---

b1=a*(aa(6)+aa(8)+aa(9))+b*(aa(6)+aa(8)+aa(9));

b2=a*(aa(9)+aa(8)+aa(6))+b*(aa(1)+aa(4)+aa(3));

b3=a*(aa(6)+aa(9)+aa(8))+b*(aa(3)+aa(7)+aa(1)+aa(4));

b4=a*(aa(6)+aa(9)+aa(8));

b5=a*(aa(6)+aa(9)+aa(8))+b*(aa(6)+aa(8)+aa(9)+aa(2)+aa(5));

b6=a*(aa(6)+aa(9)+aa(8))+b*(aa(2)+aa(5)+aa(6)+aa(8)+aa(9));

%---

a1=a*(aa(1)+aa(5))+c*(aa(1)+aa(4)+aa(7)+aa(3));

(15)

a2=a*(aa(1)+aa(5))+c*(aa(1)+aa(4)+aa(7)+aa(3));

a3=a*(aa(1)+aa(5))+c*(aa(1)+aa(4)+aa(7)+aa(3));

a4=a*(aa(1)+aa(5));

a5=a*(aa(2)+aa(5))+c*(aa(2)+aa(5)+aa(7)+aa(9));

a6=a*(aa(2)+aa(5))+c*(aa(2)+aa(5)+aa(7)+aa(9)+aa(6)+aa(8));

a7=a*(aa(2)+aa(5))+c*(aa(2)+aa(5)+aa(7)+aa(9)+aa(6)+aa(8));

a8=a*(aa(2)+aa(5))+c*(aa(2)+aa(5)+aa(7)+aa(9)+aa(6)+aa(8));

a9=a*(aa(1)+aa(5));

a10=a*(aa(2)+aa(5))+c*(aa(1)+aa(3)+aa(4)+aa(7));

%---

aaa=[c1 c2 c3 c4 b1 b2 b3 b4 b5 b6 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10];

sum=0;

for i=1:20;

sum=sum+aaa(i);

end

aaa=aaa/sum;

plot(aaa,'b');

gtext('age');

%---

bb =[0.4796 0.3707 0.3614 0.1667 0.3101 0.3216 0.3609 1.0000 0.6469];

%---

(16)

a=4;

b=6;

c=10;

c1=a*(bb(1)+bb(4))+c*bb(1);

c2=a*(bb(1)+bb(4)+bb(3))+b*bb(1)+c*bb(1);

c3=1*(a*(bb(2)+bb(5)+bb(6)+bb(7)+bb(8)+bb(9))+c*bb(1));

c4=1*(a*(bb(2)+bb(4)+bb(5)+bb(6)+bb(7)+bb(8)+bb(9))+c*bb(1));

%---

b1=a*(bb(6)+bb(8)+bb(9))+b*(bb(6)+bb(8)+bb(9));

b2=a*(bb(9)+bb(8)+bb(6))+b*(bb(1)+bb(4)+bb(3));

b3=a*(bb(6)+bb(9)+bb(8))+b*(bb(3)+bb(7)+bb(1)+bb(4));

b4=a*(bb(6)+bb(9)+bb(8));

b5=a*(bb(6)+bb(9)+bb(8))+b*(bb(6)+bb(8)+bb(9)+bb(2)+bb(5));

b6=a*(bb(6)+bb(9)+bb(8))+b*(bb(2)+bb(5)+bb(6)+bb(8)+bb(9));

%---

a1=1*(a*(bb(1)+bb(5))+c*(bb(1)+bb(4)+bb(7)+bb(3)));

a2=a*(bb(1)+bb(5))+c*(bb(1)+bb(4)+bb(7)+bb(3));

a3=a*(bb(1)+bb(5))+c*(bb(1)+bb(4)+bb(7)+bb(3));

a4=a*(bb(1)+bb(5));

a5=a*(bb(2)+bb(5))+c*(bb(2)+bb(5)+bb(7)+bb(9));

a6=a*(bb(2)+bb(5))+c*(bb(2)+bb(5)+bb(7)+bb(9)+bb(6)+bb(8));

a7=a*(bb(2)+bb(5))+c*(bb(2)+bb(5)+bb(7)+bb(9)+bb(6)+bb(8));

(17)

a8=a*(bb(2)+bb(5))+c*(bb(2)+bb(5)+bb(7)+bb(9)+bb(6)+bb(8));

a9=a*(bb(1)+bb(5));

a10=a*(bb(2)+bb(5))+c*(bb(1)+bb(3)+bb(4)+bb(7));

%---

bbb=[c1 c2 c3 c4 b1 b2 b3 b4 b5 b6 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10];

sum=0;

for i=1:20;

sum=sum+bbb(i);

end

bbb=bbb/sum;

hold on plot(bbb,'r');

gtext('consume');

aaa,bbb

%%%%=====trainbpx 网络训练程序和图八程序====%%%%%

%--- clc;

nntwarn off clear;

%---

aaa =[0.0157 0.0259 0.0460 0.0480 0.0525 0.0363 0.0460 0.0210 0.0656 0.0656 0.0497 0.0497

(18)

0.0497 0.0081 0.0639 0.0993 0.0993 0.0993 0.0081 0.0504];

aa =[0.3953 0.4635 0.4312 0.2037 0.4207 0.4264 0.6487 1.0000 0.6910];

xaaa1=max(aaa);xaaa2=min(aaa);

x=xaaa1-xaaa2;x=2/x;

aver=(xaaa1+xaaa2)/2;

aaa=aaa-aver;

aaa=aaa*x;

aaa=aaa';

%--- aa=0.8*aa;

aa=aa';

%--- disp_freq=400;

max_epoch=50000;

err_goal=0.00001;

lr=0.5;

lr_inc=1.05;

lr_dec=0.7;

err_ratio=1.04;

mom_const=0.9;

(19)

TP=[disp_freq max_epoch err_goal lr lr_inc lr_dec mom_const err_ratio];

%--- [R,Q]=size(aaa);[s3,Q]=size(aa);

s1=8;s2=3;

[W1,B1]=nwtan(s1,R);

[W2,B2]=nwtan(s2,s1);

[W3,B3]=nwtan(s3,s2);

W1=0.5*W1;B1=0.5*B1;

W2=0.5*W2;B2=0.5*B2;

W3=0.5*W3;B3=0.5*B3;

[W1,B1,W2,B2,W3,B3,epochs,errors]=trainbpx(W1,B1,'logsig',W2,B2,'l ogsig',W3,B3,'logsig',aaa,aa,TP);

ttt=logsig(W2*logsig(W1*aaa,B1),B2);

ttt=ttt/sum(ttt);

%plot(ttt,'b');

figure;

%===================================

bbb =[0.0211 0.0335 0.0481 0.0500 0.0563 0.0398 0.0460 0.0225 0.0679 0.0679 0.0481 0.0481 0.0481 0.0090 0.0560 0.0938 0.0938 0.0938 0.0090 0.0469];

(20)

aaa =bbb;%---从 bbb 转得到---

bb =[0.4796 0.3707 0.3614 0.1667 0.3101 0.3216 0.3609 1.0000 0.6469];

aa =bb;%---从 bb 转得到--- xaaa1=max(aaa);xaaa2=min(aaa);

x=xaaa1-xaaa2;x=2/x;

aver=(xaaa1+xaaa2)/2;

aaa=aaa-aver;

aaa=aaa*x;

aaa=aaa';

%--- aa=0.8*aa;

aa=aa';

%--- disp_freq=400;

max_epoch=50000;

err_goal=0.00001;

lr=0.5;

lr_inc=1.05;

lr_dec=0.7;

err_ratio=1.04;

mom_const=0.9;

(21)

TP=[disp_freq max_epoch err_goal lr lr_inc lr_dec mom_const err_ratio];

%--- [R,Q]=size(aaa);[s3,Q]=size(aa);

s1=8;s2=3;

%[W1,B1]=nwtan(s1,R);

%[W2,B2]=nwtan(s2,s1);

%[W3,B3]=nwtan(s3,s2);

%W1=0.5*W1;B1=0.5*B1;

%W2=0.5*W2;B2=0.5*B2;

%W3=0.5*W3;B3=0.5*B3;

[W1,B1,W2,B2,W3,B3,epochs,errors]=trainbpx(W1,B1,'logsig',W2,B2,'l ogsig',W3,B3,'logsig',aaa,aa,TP);

tttt=logsig(W2*logsig(W1*aaa,B1),B2);

tttt=tttt/sum(tttt);

figure;

plot(ttt,'r');hold on plot(tttt);

%%%%%%%=======超市分布数量求取=======%%%%%%%%

age=20*ttt/sum(ttt)

age = 4.0549 6.6451 9.3001 consume=20*tttt/sum(tttt)

(22)

consume = 4.3319 6.4431 9.2251

%%%%%%%%%%%%%%%%%%=========%%%%%%%%%

图十一 弱连续矩阵修正方案(t1,t2 为设定的常量)(only reference)

%%%%%%=====3 个隐含层网络训练程序=======%%%%%%

%--- function

[w1,b1,w2,b2,w3,b3,w4,b4,i,tr]=tbpx333(w1,b1,f1,w2,b2,f2,w3,b3,f3,w4 ,b4,f4,p,t,tp)

%TBPX3 Train 3-layer feed-forward network w/fast backpropagation.

%

% This function is obselete.

% Use NNT2FF and TRAIN to update and train your network.

% [W1,B1,W2,B2,W3,B3,TE,TR] =

TBPX3(W1,B2,F1,W1,B1,F2,W3,B3,F3,P,T,TP)

% Wi - Weight matrix for the ith layer.

% Bi - Bias vector for the ith layer.

(23)

% P - RxQ matrix of input vectors.

% T - SxQ matrix of target vectors.

% TP - Training parameters (optional).

% Returns:

% Wi - new weights.

% Bi - new biases.

% TE - the actual number of epochs trained.

% TR - training record: [row of errors]

%

% Training parameters are:

% TP(1) - Epochs between updating display, default = 25.

% TP(2) - Maximum number of epochs to train, default = 1000.

% TP(3) - Sum-squared error goal, default = 0.02.

% TP(4) - Learning rate, 0.01.

% TP(5) - Learning rate increase, default = 1.05.

% TP(6) - Learning rate decrease, default = 0.7.

% TP(7) - Momentum constant, default = 0.9.

% TP(8) - Maximum error ratio, default = 1.04.

% Missing parameters and NaN's are replaced with defaults.

if nargin < 11,error('Not enough arguments.');end

(24)

% TRAINING PARAMETERS if nargin == 11, tp = []; end

tp = nndef(tp,[25 1000 0.02 0.01 1.05 0.7 0.9 1.04]);

df = tp(1);

me = tp(2);

eg = tp(3);

lr = tp(4);

im = tp(5);

dm = tp(6);

mc = tp(7);

er = tp(8);

df1 = feval(f1,'delta');

df2 = feval(f2,'delta');

df3 = feval(f3,'delta');

df4 = feval(f4,'delta');

dw1 = w1*0;

db1 = b1*0;

dw2 = w2*0;

db2 = b2*0;

dw3 = w3*0;

db3 = b3*0;

(25)

dw4 = w3*0;

db4 = b4*0;

MC = 0;

% PRESENTATION PHASE a1 = feval(f1,w1*p,b1);

a2 = feval(f2,w2*a1,b2);

a3 = feval(f3,w3*a2,b3);

a4 = feval(f4,w4*a3,b4);

e = t-a4;

SSE = sumsqr(e);

% TRAINING RECORD tr = zeros(2,me+1);

tr(1:2,1) = [SSE; lr];

% PLOTTING FLAG [r,q] = size(p);

[s,q] = size(t);

plottype = (max(r,s) == 1) & 0;

% PLOTTING

(26)

newplot;

message = sprintf('TRAINBPX: %%g/%g epochs, lr = %%g, SSE =

%%g.\n',me);

fprintf(message,0,lr,SSE) if plottype

h = plotfa(p,t,p,a4);

else

h = plottr(tr(1:2,1),eg);

end

% BACKPROPAGATION PHASE d4 = feval(df4,a4,e);

d3 = feval(df3,a3,d4,w4);

d2 = feval(df2,a2,d3,w3);

d1 = feval(df1,a1,d2,w2);

for i=1:me

% CHECK PHASE

if SSE < eg, i=i-1; break, end

(27)

% LEARNING PHASE

[dw1,db1] = learnbpm(p,d1,lr,MC,dw1,db1);

[dw2,db2] = learnbpm(a1,d2,lr,MC,dw2,db2);

[dw3,db3] = learnbpm(a2,d3,lr,MC,dw3,db3);

[dw4,db4] = learnbpm(a3,d4,lr,MC,dw4,db4);

MC = mc;

new_w1 = w1 + dw1; new_b1 = b1 + db1;

new_w2 = w2 + dw2; new_b2 = b2 + db2;

new_w3 = w3 + dw3; new_b3 = b3 + db3;

new_w4 = w4 + dw4; new_b4 = b4 + db4;

% PRESENTATION PHASE

new_a1 = feval(f1,new_w1*p,new_b1);

new_a2 = feval(f2,new_w2*new_a1,new_b2);

new_a3 = feval(f3,new_w3*new_a2,new_b3);

new_a4 = feval(f4,new_w4*new_a3,new_b4);

new_e = t-new_a4;

new_SSE = sumsqr(new_e);

% MOMENTUM & ADAPTIVE LEARNING RATE PHASE if new_SSE > SSE*er

(28)

lr = lr * dm;

MC = 0;

else

if new_SSE < SSE lr = lr * im;

end

w1 = new_w1; b1 = new_b1; a1 = new_a1;

w2 = new_w2; b2 = new_b2; a2 = new_a2;

w3 = new_w3; b3 = new_b3; a3 = new_a3;

w4 = new_w4; b4 = new_b4; a4 = new_a4;

e = new_e; SSE = new_SSE;

% BACKPROPAGATION PHASE d4 = feval(df4,a4,e);

d3 = feval(df3,a3,d4,w4);

d2 = feval(df2,a2,d3,w3);

d1 = feval(df1,a1,d2,w2);

end

% TRAINING RECORD tr(1:2,i+1) = [SSE; lr];

(29)

% PLOTTING if rem(i,df) == 0

fprintf(message,i,lr,SSE) if plottype

delete(h);

h = plot(p,a4);

else

h = plottr(tr(1:2,1:(i+1)),eg,h);

end end end

% TRAINING RECORD tr = tr(1:2,1:(i+1));

% PLOTTING if rem(i,df) ~= 0

fprintf(message,i,lr,SSE) if plottype

delete(h);

plot(p,a4);

else

(30)

plottr(tr,eg,h);

end end

% WARNINGS if SSE > eg disp(' ')

disp('TRAINBPX: Network error did not reach the error goal.') disp(' Further training may be necessary, or try different') disp(' initial weights and biases and/or more hidden neurons.') disp(' ')

end

參考文獻

相關文件

(三) 變率與微分、 求和與積分: “變率” 與 “求和” 是函數的兩種定量型 (quantitative) 的基本性質。 但是它們的定義本身就是理論的起點, 有如當年

 Construction and Evaluation of Actuarial Models (Exam

线性拟合与二次拟合 数据拟合的线性模型 一次多项式拟合公式..

按計算機得到 log 2 的近似值的確是十分簡便,但不免有學生會好奇,以前的數學家 是怎麼求出 log

对于二元函数的自变量,我

为此, 我们需要建立函 数的差商与函数的导数间的基本关系式, 这些关系式称为“微分学中值定理”...

欣赏有关体育运动 的图片,从艺术的角度 与同学交流自己对这些 运动和画面的感受与理 解,并为这些图片设计

穿插课文之中、形 式多种多样的活动使 我们所学的知识与技 能得到及时的巩固、应 用和内化,它是我们主 动建构知识、拓展能