六章Matlab与NNT使用範例

上传人:t****d 文档编号:243348476 上传时间:2024-09-21 格式:PPT 页数:39 大小:113KB
返回 下载 相关 举报
六章Matlab与NNT使用範例_第1页
第1页 / 共39页
六章Matlab与NNT使用範例_第2页
第2页 / 共39页
六章Matlab与NNT使用範例_第3页
第3页 / 共39页
点击查看更多>>
资源描述
按一下以編輯母片標題樣式,按一下以編輯母片,第二層,第三層,第四層,第五層,*,第六章Matlab與NNT使用範例,6.1 平行輸入及循序輸入之模擬,6.2 步進學習(Incremental learning)及,批次學習(Batch learning),6.3 FIR濾波器及newlin的關係,6.4 頻率變動偵測(Frequency variation,detection),1,6.1 平行輸入及循序輸入之模擬,平行輸入(Concurrent inputs)是指有許多組的輸入送至類神經網路,它的順序不重要。可以看成有這麼多組相同的類神經網路,而每一組輸入加在每一組類神經網路上。循序輸入(Sequential inputs)則與時間有關,第三組一定發生在第二組之後,它們的順序不可任意對調,因此像是在火車站買票的人們,先來先買;插隊或自行對調,可能造成其後面或其中有些人因而買不到票(原來可以的)。不按原輸入順序送入則輸出的結果因之而變。另外兩個要說明的名詞一為動態網路(Dynamic networks)、一為靜態網路(Static networks)。所謂動態網路是指網路中包含有回授或有遲元件者,相反地兩者皆無的網路稱為靜態網路。平行輸入只能用在靜態網路,因為輸入的順序並不重要,但對動態網路,輸入前後關係影響很大,輸出完全大不相同。因此平行輸入加在動態網路上,要特別注意,並且用Cell array表示才正確。,2,6.1 平行輸入及循序輸入之模擬,平行輸入的範例如下:, P=randn(2,4),%產生四組平行輸入(用一般矩陣表示,如2 4 3.5)。,P =,-0.4326 0.1253,-1.1465,1.1892,-1.6656 0.2877,1.1909,-0.0376, net=newlin(minmax(P),1);,%產生2-1的ADALINE, net.IW1,1=1 2; net.b1=0.5;,%設定某組,W,及,b, A=sim(net,P),%模擬NN得輸出,A =,-3.2637 1.2007,1.7354,1.6139, Q=P(:,3) P(:,1:2) P(:,4),%把第三組往前調,Q =,-1.1465,-0.4326 0.1253 1.1892,1.1909,-1.6656 0.2877 -0.0376, A=sim(net,Q),%輸出結果相對應往前調,A =,1.7354,-3.2637 1.2007 1.6139,3,6.1 平行輸入及循序輸入之模擬,其次看看如何模擬循序輸入(用Cell表示,如2,4,-3.5):,如果NN中含有延遲輸入則輸入的秩序變成後重要如:, P=1 2 3 4 5 %,定義,P,為cell array,P =,1 2 3 4 5, net=newlin(1 5,1,0 1);,% 1 5為P中的最小值的最大值,newlin要知道輸入最小、最大值。再下來的1表示輸出層的神經元數目為1。0 1表示有遲輸入,如果沒有任何延遲則應寫為0,也可以省畧;如果有一個延遲則應寫成0 1,若原信號為uk,那0 1表示除了uk外也有uk-1一起做輸入,如圖6.1-1所示。如果有兩個輸入延遲一併使用則寫為0 1 2,可視為輸入有0延遲即uk、1遲uk-1、2延遲uk-2共三輸入,其架構如圖6.1-2。如果輸入信號的維度為2,其架構会是圖6.1-3型式,此時之,W,應為14的Array(Why?)。,4,6.1 平行輸入及循序輸入之模擬,5,6.1 平行輸入及循序輸入之模擬,6,6.1 平行輸入及循序輸入之模擬,7,6.1 平行輸入及循序輸入之模擬,% 把所有偏壓,b,的連線打開如下, net.biasConnect=0;, net.IW1,1=1 2;,%設定W, A=sim(net,P),%NN結果也用cell array表示,A =,1 4 7 10 13, Q=1 3 2 4 5 %,把2,3的次序對調,Q =,1 3 2 4 5, A=sim(net,Q),%哇!與上面的結果不一樣,A =,1 5 8 8 13, P=1:5,%如果P用一般陣列(Array)表示,P =,1 2 3 4 5, A=sim(net,P),%完全不靈光,A =,1 2 3 4 5,相信你要處理循序輸入時,用cell array表示!,8,6.1 平行輸入及循序輸入之模擬,更進一步說,如果有兩組不同的輸入,P,及,Q,,是否可寫成一組cell array以進行模擬?, P=1 2 3 4 5,P =,1 2 3 4 5, Q=1 3 2 4 5,Q =,1 3 2 4 5,% 可以!把它們集合在新的cell array中叫做,R,,定義如下, R=1 1 2 3 3 2 4 4 5 5,R = %它的表示法有點笨,1x2 double 1x2 double 1x2 double 1x2 double 1x2 double,9,6.1 平行輸入及循序輸入之模擬,% 這麼寫, R:,ans =,1 1 %第一組,ans =,2 3 % 第二組,ans =,3 2 % 第三組,ans =,4 4 % 第四組,ans =,5 5 % 第五組,% 也可以用celldisp指令,顯示結果仍然有點笨笨的。, celldisp(R),R1 = 1 1,R2 = 2 3,R3 = 3 2,R4 = 4 4,R5 = 5 5,10,6.1 平行輸入及循序輸入之模擬,% 看看NN輸出結果是正確的。, A=sim(net,R),A =,1x2 double 1x2 double 1x2 double 1x2 double 1x2 double, celldisp(A),A1 = 1 1,A2 = 4 5,A3 = 7 8,A4 = 10 8,A5 = 13 13,11,6.2 步進學習及批次學習,步進學習是指每一筆輸入進來,經過計算、整型等過程,一直傳到輸出後,誤差得到了立刻計算dW及db,即修正量。批次學習則要把一個批次中的每一筆誤差累積至總誤差,有了總誤差才做一次修正。前面討論過的適應瀘波器是屬於步進學習類。,12,6.2 步進學習及批次學習,在NNT中有两個學習法則,一為adapt,一為train。基本上adapt可以用在步進學習及批次學習,而train只能用在批次學習。首先討論adapt用在步進學習上。既然要一步一步學,則用cell array表示I/O data最好。,13,6.2 步進學習及批次學習,例如輸入為二維的x及y,輸出為t,且關係為,t=x+2y=1 2*(x y),輸入有四組為(1,1)、(1,2)、(2,1)、(3,2),利用matlab很快找到其間關係值:, P=1 1;1 2;2 1;3 2,P =,1 1 2 3,1 2 1 2, T=1 2*P,T =,3 5 4 7,P,T都是一般陣列宣告,故不合做步進學習用。,14,6.2 步進學習及批次學習,下面重新定義以cell array為主的P及T:,P=1;1 1;2 2;1 3;2;,T=3 5 4 7;,呼叫adapt的樣式為net,a,e,pf=adapt(net,P,T);,右邊的net是由呼叫newlin創出名叫net的網路架構,P為輸入,T為輸出。左邊的net是訓練完的網路,其中權重及偏壓己有變化。a為輸出,e為誤差記錄,pf為最終輸入延遲條件。P的第一元素(Entry)值最小為1最大為3,P的第二元素(Entry)值最小為1最大為2,newff的第一函數輸入即為1 3;1 2,第二輸入的1代表輸出只有一個神經元,故為一維,第三輸入的0代表只有輸入圖樣;沒有任何延遲(Delay),如果有一個輸入Delay則應寫成0 1。第四輸入的0表示learning rate值,為0則不會學習。,15,6.2 步進學習及批次學習,下達如下:, net=newlin(1 3;1 2,1,0,0);,%如果寫得更清楚你會宣告如是,PMM=1 3;1 2;no_out=1;delays=0;learn_rate=0;,net=newff(PMM,no_out,delays,learn_rate);,%這樣是否更清楚?,% 首先設,W,及,b,皆為0始, net.IW1,1=0 0;net.b1=0;, net,a,e,pf=adapt(net,P,T); %,步進學習,總共4次, a,%看結果,a =,0 0 0 0 %沒任何改善,因為沒學, e,e =,3 5 4 7, pf,pf =,Empty cell array: 1-by-0,% 設定,W,及,b,的學習率(Learning rates), net.inputWeights1,1.learnParam.lr=0.1;, net.biases1.learnParam.lr=0.1;, net,a,e,pf=adapt(net,P,T);,%再步進學習,16,6.2 步進學習及批次學習, a,a = %結果開始變了,0 1.2000 3.1000 5.6500, T,T =,3 5 4 7, e,e = %e=T-a,3 3.8000 0.9000 1.3500, pf,pf =,Empty cell array: 1-by-0, mse(e),%平均誤差平方,ans =,6.5181,% 再練四次, net,a,e,pf=adapt(net,P,T);, T;a;e %,這樣顯示比較好對照,ans =, 3 5 4 7, 3.5900 4.7740 4.7320 6.7080,-0.5900 0.2260 -0.7320 0.2920,17,6.2 步進學習及批次學習,mse(e),ans=0.2551 %平均誤差平方已有改善了,% P一次有四組,每呼叫一次adapt,就做步進學習四次,這叫做一個pass,如果要連續100個passes,下達指令如下:,net.adaptParam.passes = 100;,net,a,e = adapt(net,P,T);, T;a;e,ans = %看來學得不錯了, 3 5 4 7, 3.0069 4.9976 4.0064 6.9944,-0.0069 0.0024 -0.0064 0.0056, mse(e),ans = 3.1450e-005 %誤差也變小了, net.IW1,1,%,W,值,ans =,1.0010 1.9937, net.b1 %,b,值,ans =,0.0120,18,6.2 步進學習及批次學習,%如果把,b,關掉,再試試看, net.biasConnect=0;, net.adaptParam.passes = 100;, net,a,e = adapt(net,P,T);, net.IW1,1 %,標準答案出硯了,ans =,1.0000 2.0000, T;a;e,%好得很,ans =, 3 5 4 7, 3.0000 5.0000 4.0000 7.0000,2.4582e-010 8.4738e-010 -5.9635e-010 -1.7683e-010, mse(e),ans = 2.9135e-019,輸入有四組,每輸入完成四組叫做一個Epoch(在步進學習裡叫pass),不是只做一個pass就會很好,故要多做些passes才行。,19,6.2 步進學習及批次學習,至於動態網路的步進學習,I/O都要用cell array型態表示。例如:, P=2 3 4; T=3 5 7;, Pi=1; %,uk-1的初始值, net=newlin(2 4,1,0 1,0.1);,%有一個delay, net.IW1,1=0 0;, net.biasConnect=0;, net,a,e,Pf = adapt(net,P,T,Pi);, T;a;e,ans = %一個pass的結果不怎麼好,3 5 7,0 2.4000 7.9800,3 2.6000 -0.9800, net.adaptParam.passes = 100;,%多做幾個passes, Pf,%別忘了上一次u(k-1)的值,Pf,= 4, net,a,e,Pf = adapt(net,P,T,Pf,);, T;a;e %,結果在改善中,ans =, 3 5 7, 3.1579 6.5789 5.7368,-0.1579 -1.5789 1.2632,20,6.2 步進學習及批次學習,最後討論批次學習。adapt及learn都可以用來做批次學習。I/O用普通陣列表示,例如前面說過的t=1 2*(x y)的關係,對一靜態網路而言,做法如下:, P=1 1;1 2;2 2;2 3,P =,1 1 2 2,1 2 2 3, T=1 2*P,T =,3 5 6 8,21,6.2 步進學習及批次學習,% Learning rate不可以大大,否則可能使W,b爆掉, net=newlin(1 2;1 3,1,0,0.01,);, net.adaptParam.passes = 500;, net,a,e = adapt(net,P,T);T;a;e,ans = %結果不錯,3.0000 5.0000 6.0000 8.0000,3.0619 5.0184 6.0023 7.9587,-0.0619 -0.0184 -0.0023 0.0413, net.IW1,1,ans =,0.9839 1.9567, net.b1,ans = 0.1211,% 把b連線切掉後再試, net.biasConnect=0;, net,a,e = adapt(net,P,T);T;a;e,ans = %結果更好,3.0000 5.0000 6.0000 8.0000,3.0004 4.9993 6.0007 7.9997,-0.0004 0.0007 -0.0007 0.0003, net.IW1,1,ans = %很接近1 2標準值了,1.0014 1.9990,22,6.2 步進學習及批次學習,至於train的使用方法近似上面過程,以一動態網路為例,I/O最好是用cell array型態表示:, P=2 3 4;Pi=1;T=3 5 6;, net=newlin(2 4,1,0 1,0.02);, net.IW1,1=0 0;, net.biasConnect=0;, net.trainParam.epochs=1; %,只做一批次, net=train(net,P,T,Pi);,TRAINB, Epoch 0/1, MSE 23.3333/0.,TRAINB, Epoch 1/1, MSE 0.583867/0.,TRAINB, Maximum epoch reached.,23,6.2 步進學習及批次學習, net.IW1,1,ans =,0.9000 0.6200, net.trainParam.epochs=3000; %,改做3000批次, net=train(net,P,T,Pi);,TRAINB, Epoch 0/3000, MSE 23.3333/0.,TRAINB, Epoch 25/3000, MSE 0.103419/0.,TRAINB, Epoch 2950/3000, MSE 0.0555556/0.,TRAINB, Epoch 2975/3000, MSE 0.0555556/0.,TRAINB, Epoch 3000/3000, MSE 0.0555556/0.,TRAINB, Maximum epoch reached., a=sim(net,P,T,Pi); %,T不應上來的,造成錯誤,? Error using = network/sim,Input states are incorrectly sized for network.,Cell array must have 1 column.,24,6.2 步進學習及批次學習,25,6.2 步進學習及批次學習,% 原來誤多寫了T,改正後, a=sim(net,P,Pi); %,sim就是模擬net網路在輸入為P,Pi後之輸出, T;a,%結果快接近目標值了,ans =, 3 5 6,3.1666 4.6667 6.1667, net.IW1,1,ans =,1.6665 -0.1665,26,6.3 FIR濾波器及newlin的關係,FIR(Finite Impulse Response) filter是信號處理(Signal Processing)時常見的一種filter。寫成差分方程式(Difference equation),其型式為,n(k)=a0p(k)+a1*p(k-1)+a2*p(k-2),p(k-1)為p(k)的單位延遲,其z-domain轉移函數G(z)可寫為,G(z)= 1/(a0+a1z-1+a2z-2),與圖6.3-1比較可知,它也是一個ADALINE,包含有兩次輸入延遲。,27,6.3 FIR濾波器及newlin的關係,28,6.3 FIR濾波器及newlin的關係,其中a0=w11,a1=w12,a2=w13。每個延遲元件D的輸出可以有自己的初始值。例如a0=1.8,a1=-2.3,a2=1。p(k-1)初始值為1,p(k-2)初始值為3皆設在Unit delay方塊內,Sample time=1,如圖6.3-2所示。在模擬方塊圖時,P_vec要先設定好如, P_vec=0:3;1:4,P_vec = %第一列為時間,第二列為輸入序列,0 1,1 2,2 3,3 4,29,6.3 FIR濾波器及newlin的關係,%開始手動模擬, P,%Input sequence,P =,1,2,3,4,5, a %,Output sequence,a =,2.5000,2.3000,1.8000,2.3000,2.8000,30,6.3 FIR濾波器及newlin的關係,現在吾人用ADDLINE來模擬圖6.3-2的FIR filter。,31,6.3 FIR濾波器及newlin的關係, P1=1 2 3 4 5;,Pi=1 3;,%注意Pi為delays的初始值, net.IW1,1=1.8 -2.3 1;, a1=sim(net,P1,Pi),a1 = %好傢伙,與模擬的不一致,-4.1000 4.3000 1.8000 2.3000 2.8000, P1=1 2 3 4 5;,Pi=3 1;,%換一下Pi次序, a1=sim(net,P1,Pi),a1 =,2.5000 2.3000 1.8000 2.3000 2.8000, a %,這是所謂之目標,T,ans =,2.5000 2.3000 1.8000 2.3000 2.8000,32,6.3 FIR濾波器及newlin的關係,原來NNT中的sim寫反了Pi的定義,按原來意思p(k-1)的初始值為1,p(k-2)的初始值為3,在定義Pi時應寫為1 3。但當你這麼代入時模擬結果是錯的,把Pi反過來定如3 1,模擬才會正確。這一小錯誤,讀者要小心避免。,33,6.3 FIR濾波器及newlin的關係,其次如果己知T=2.5 2.3 1.8 2.3 2.8;adapt可否回求,W,值?注意Pi要反過來定義,adapt用來才會正確(此邏輯有點詭異!)。, P1=1 2 3 4 5;,Pi=3 1;,T=2.5 2.3 1.8 2.3 2.8;, net=newlin(1 5,1,0 1 2,0.01);, net.adaptParam.passes = 3000;, net.biasConnect=0;, net,a,e,Pf = adapt(net,P1,T,Pi);T;a;e,ans = %,两個結果够相近了吧!,2.5000 2.3000 1.8000 2.3000 2.8000,2.4998 2.2987 1.7996 2.3001 2.8006,1.5557e-0040.00134.3200e-004-1.4449e-004 -6.0560e-004,-6.0560e-004, net.IW1,1 % adapt可以正確求出此FIR filter的係數。,ans =,1.7983 -2.2976 0.9997,34,6.4 頻率變動偵測,ADALINE可以用來偵察某一被監督信號是否正常,假設該信號(如某馬達運轉時之聲波)正常時之頻率為f,如不正常時頻率會變快或慢(如0.5f及2f),一個偵測的方法是由示波器產生其波形或是頻率計讀其頻率;另一方法為利用一有五個延遲輸入信號組成的適應線性元件(ADALINE)所組成。當輸入信號有變動時,ADALINE的輸出大小就會有所變化,以此推測輸入走頻(頻率有所變動)發生,而判斷信號有故障發生。,35,6.4 頻率變動偵測,36,6.4 頻率變動偵測,程式FVD_adaline.m係參考NNT手冊中的例子寫成一頻率變動偵測器(Frequency Variation Detection, FVD)。假設輸入信號為正弦波,不論信號正常與否,其振幅皆固定,只是頻率會變。ADALINE的架構如圖6.4-1所示,輸入信號與目標信號皆相同。執行完FVD_adaline程式後之結果如圖6.4-2所示,由其誤差圖可偵測出頻率發生變動。,37,6.4 頻率變動偵測,38,6.4 頻率變動偵測,這個例子中所使用之ADALINE即是吾人常用之適應濾波器,由於此濾波器的輸入為五組輸入延遲信號,而它的功能在預測原始輸入信號,故它能還原成原始輸入,只是有一小段的適應時間。吾人利用此一小段適應時間的變化得知信號異常,此即所謂適應預測(Adaptive prediction)。,39,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!