版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、這兩天在學(xué)習(xí)bp,總結(jié)和匯報(bào)一下,和大家一起學(xué)習(xí)。希望初入神經(jīng)網(wǎng)絡(luò)能有所收獲,給新手一些幫組和啟發(fā)。也希望熟悉bp的高手,多提寶貴意見和建議。 學(xué)習(xí)內(nèi)容總結(jié)成五個(gè)小節(jié),具體內(nèi)容如下:第一節(jié)內(nèi)容:包括神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)知識(shí),BP網(wǎng)絡(luò)的特點(diǎn),bp主要應(yīng)用的場(chǎng)合,使用時(shí)應(yīng)注意的問題。第二節(jié)內(nèi)容:主要是闡述BP中幾個(gè)容易混繞的概念和問題,包括什么是網(wǎng)絡(luò)的泛化能力?過擬合是什么,怎么處理?學(xué)習(xí)速率有什么作用?神經(jīng)網(wǎng)絡(luò)的權(quán)值和閾值分別是個(gè)什么概念?用BP逼近非線性函數(shù),如何提高訓(xùn)練精度?第三節(jié)內(nèi)容:主要闡述使用matlab實(shí)現(xiàn),為了充分利用數(shù)據(jù),得到最優(yōu)的網(wǎng)絡(luò)訓(xùn)練結(jié)果,在網(wǎng)絡(luò)建立前,應(yīng)該進(jìn)行的基本數(shù)
2、據(jù)處理問題,包括:BP神經(jīng)網(wǎng)絡(luò)matlab實(shí)現(xiàn)的基本步驟,數(shù)據(jù)歸一化問題和方法,輸入訓(xùn)練數(shù)據(jù)的亂序排法,以及分類方法,如何查看和保存訓(xùn)練的結(jié)果,每次結(jié)果不一樣問題。第四節(jié)內(nèi)容:bp神經(jīng)網(wǎng)絡(luò)進(jìn)行交通預(yù)測(cè)的Matlab例子及源代碼,bp神經(jīng)網(wǎng)絡(luò)進(jìn)行交通預(yù)測(cè)的Matlab程序的優(yōu)化(主要是按設(shè)置誤差要求,尋找最優(yōu)網(wǎng)絡(luò)過程)第五節(jié)內(nèi)容:bp神經(jīng)網(wǎng)絡(luò)處理蠓蟲分類問題的matlab例子及源代碼。不多說,先如主題,第一節(jié),很基礎(chǔ),高手見諒。什么是神經(jīng)網(wǎng)絡(luò)?神經(jīng)網(wǎng)絡(luò)是由很多神經(jīng)元組成的,首先我們看一下,什么是神經(jīng)元 上面這個(gè)圖表示的就是一個(gè)神經(jīng)元,我們不管其它書上說的那些什么樹突,軸突的。我用個(gè)比較
3、粗淺的解釋,可能不太全面科學(xué),但對(duì)初學(xué)者很容易理解:1、我們把輸入信號(hào)看成你在matlab中需要輸入的數(shù)據(jù),輸進(jìn)去神經(jīng)網(wǎng)絡(luò)后2、這些數(shù)據(jù)的每一個(gè)都會(huì)被乘個(gè)數(shù),即權(quán)值w,然后這些東東與閥值b相加后求和得到u,3、上面只是線性變化,為了達(dá)到能處理非線性的目的,u做了個(gè)變換,變換的規(guī)則和傳輸函數(shù)有關(guān)可能還有人問,那么那個(gè)閥值是什么呢?簡(jiǎn)單理解就是讓這些數(shù)據(jù)做了個(gè)平移,這就是神經(jīng)元工作的過程。處理后的結(jié)果又作為輸入,可輸給別的神經(jīng)元,很多這樣的神經(jīng)元,就組成了網(wǎng)絡(luò)。在matlab中具體用什么算法實(shí)現(xiàn)這些,我們先不管,我們需要注意的是怎么使用。比如使用BP的神經(jīng)網(wǎng)絡(luò)newff()構(gòu)建一個(gè)網(wǎng)絡(luò),這些在后面
4、的學(xué)習(xí)將提到。BP網(wǎng)絡(luò)的特點(diǎn)網(wǎng)絡(luò)實(shí)質(zhì)上實(shí)現(xiàn)了一個(gè)從輸入到輸出的映射功能,而數(shù)學(xué)理論已證明它具有實(shí)現(xiàn)任何復(fù)雜非線性映射的功能。這使得它特別適合于求解內(nèi)部機(jī)制復(fù)雜的問題。我們無需建立模型,或了解其內(nèi)部過程,只需輸入,獲得輸出。只要BPNN結(jié)構(gòu)優(yōu)秀,一般20個(gè)輸入函數(shù)以下的問題都能在50000次的學(xué)習(xí)以內(nèi)收斂到最低誤差附近。而且理論上,一個(gè)三層的神經(jīng)網(wǎng)絡(luò),能夠以任意精度逼近給定的函數(shù),這是非常誘人的期望;網(wǎng)絡(luò)能通過學(xué)習(xí)帶正確答案的實(shí)例集自動(dòng)提取“合理的”求解規(guī)則,即具有自學(xué)習(xí)能力;網(wǎng)絡(luò)具有一定的推廣、概括能力。bp主要應(yīng)用回歸預(yù)測(cè)(可以進(jìn)行擬合,數(shù)據(jù)處理分析,事物預(yù)測(cè),控制等)、 分類識(shí)別
5、(進(jìn)行類型劃分,模式識(shí)別等),在后面的學(xué)習(xí)中,我都將給出實(shí)例程序。但無論那種網(wǎng)絡(luò),什么方法,解決問題的精確度都無法打到100%的,但并不影響其使用,因?yàn)楝F(xiàn)實(shí)中很多復(fù)雜的問題,精確的解釋是毫無意義的,有意義的解析必定會(huì)損失精度。BP注意問題1、BP算法的學(xué)習(xí)速度很慢,其原因主要有:a 由于BP算法本質(zhì)上為梯度下降法,而它所要優(yōu)化的目標(biāo)函數(shù)又非常復(fù)雜,因此,必然會(huì)出現(xiàn)“鋸齒形現(xiàn)象”,這使得BP算法低效;b 存在麻痹現(xiàn)象,由于優(yōu)化的目標(biāo)函數(shù)很復(fù)雜,它必然會(huì)在神經(jīng)元輸出接近0或1的情況下,出現(xiàn)一些平坦區(qū),在這些區(qū)域內(nèi),權(quán)值誤差改變很小,使訓(xùn)練過程幾乎停頓;c 為了使網(wǎng)絡(luò)執(zhí)行BP算法,不能用傳統(tǒng)的一維搜
6、索法求每次迭代的步長(zhǎng),而必須把步長(zhǎng)的更新規(guī)則預(yù)先賦予網(wǎng)絡(luò),這種方法將引起算法低效。2、網(wǎng)絡(luò)訓(xùn)練失敗的可能性較大,其原因有:a 從數(shù)學(xué)角度看,BP算法為一種局部搜索的優(yōu)化方法,但它要解決的問題為求解復(fù)雜非線性函數(shù)的全局極值,因此,算法很有可能陷入局部極值,使訓(xùn)練失??;b 網(wǎng)絡(luò)的逼近、推廣能力同學(xué)習(xí)樣本的典型性密切相關(guān),而從問題中選取典型樣本實(shí)例組成訓(xùn)練集是一個(gè)很困難的問題。3、網(wǎng)絡(luò)結(jié)構(gòu)的選擇:尚無一種統(tǒng)一而完整的理論指導(dǎo),一般只能由經(jīng)驗(yàn)選定。為此,有人稱神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)選擇為一種藝術(shù)。而網(wǎng)絡(luò)的結(jié)構(gòu)直接影響網(wǎng)絡(luò)的逼近能力及推廣性質(zhì)。因此,應(yīng)用中如何選擇合適的網(wǎng)絡(luò)結(jié)構(gòu)是一個(gè)重要的問題。4、新加入的樣本
7、要影響已學(xué)習(xí)成功的網(wǎng)絡(luò),而且刻畫每個(gè)輸入樣本的特征的數(shù)目也必須相同。5、采用s型激活函數(shù),由于輸出層各神經(jīng)元的理想輸出值只能接近于1或0,而不能打到1或0,因此設(shè)置各訓(xùn)練樣本的期望輸出分量Tkp時(shí),不能設(shè)置為1或0,設(shè)置0.9或0.1較為適宜。本節(jié)主要學(xué)習(xí)BP中幾個(gè)容易混繞的概念和問題:什么是網(wǎng)絡(luò)的泛化能力?過擬合是什么,怎么處理?學(xué)習(xí)速率有什么作用?神經(jīng)網(wǎng)絡(luò)的權(quán)值和閾值分別是個(gè)什么概念?用BP逼近非線性函數(shù),如何提高訓(xùn)練精度?什么是網(wǎng)絡(luò)的泛化能力?一個(gè)神經(jīng)網(wǎng)路是否優(yōu)良,與傳統(tǒng)最小二乘之類的擬合評(píng)價(jià)不同(主要依據(jù)殘差,擬合優(yōu)度等),不是體現(xiàn)在其對(duì)已有的數(shù)據(jù)擬合能力上,而是對(duì)后來的預(yù)測(cè)能力,既泛
8、化能力。網(wǎng)絡(luò)的預(yù)測(cè)能力(也稱泛化能力、推廣能力)與訓(xùn)練能力(也稱逼近能力、學(xué)習(xí)能力)的矛盾。一般情況下,訓(xùn)練能力差時(shí),預(yù)測(cè)能力也差,并且一定程度上,隨訓(xùn)練能力地提高,預(yù)測(cè)能力也提高。但這種趨勢(shì)有一個(gè)極限,當(dāng)達(dá)到此極限時(shí),隨訓(xùn)練能力的提高,預(yù)測(cè)能力反而下降,即出現(xiàn)所謂“過擬合”現(xiàn)象。此時(shí),網(wǎng)絡(luò)學(xué)習(xí)了過多的樣本細(xì)節(jié),而不能反映樣本內(nèi)含的規(guī)律。過擬合是什么,怎么處理?神經(jīng)網(wǎng)絡(luò)計(jì)算不能一味地追求訓(xùn)練誤差最小,這樣很容易出現(xiàn)“過擬合”現(xiàn)象,只要能夠?qū)崟r(shí)檢測(cè)誤差率的變化就可以確定最佳的訓(xùn)練次數(shù),比如15000次左右的學(xué)習(xí)次數(shù),如果你不觀察,設(shè)成500000次學(xué)習(xí),不僅需要很長(zhǎng)時(shí)間來跑,而且最后結(jié)果肯定令人
9、大失所望。避免過擬合的一種方法是:在數(shù)據(jù)輸入中,給訓(xùn)練的數(shù)據(jù)分類,分為正常訓(xùn)練用、變量數(shù)據(jù)、測(cè)試數(shù)據(jù),在后面節(jié)將講到如何進(jìn)行這種分類。其中變量數(shù)據(jù),在網(wǎng)絡(luò)訓(xùn)練中,起到的作用就是防止過擬合狀態(tài)。學(xué)習(xí)速率有什么作用?學(xué)習(xí)速率這個(gè)參數(shù)可以控制能量函數(shù)的步幅,并且如果設(shè)為自動(dòng)調(diào)整的話,可以在誤差率經(jīng)過快速下降后,將學(xué)習(xí)速率變慢,從而增加BPNN的穩(wěn)定性。此時(shí)訓(xùn)練方法采用1. net.trainFcn = 'traingda' % 變學(xué)習(xí)率梯度下降算法2. net.trainFcn = 'traingdx' % 變學(xué)習(xí)率動(dòng)量梯度下降算法復(fù)制代碼可以定義一個(gè)變動(dòng)的學(xué)習(xí)速率,
10、如1. p = -1 -1 2 2; 0 5 0 5;2. t = -1 -1 1 1;3. net = newff(p,t,3,'traingda');4. net.trainParam.lr = 0.05;5. net.trainParam.lr_inc = 1.05;6. net = train(net,p,t);7. y = sim(net,p)復(fù)制代碼在后面的擬合例題中,我們也將用到學(xué)習(xí)速率這個(gè)參數(shù)。神經(jīng)網(wǎng)絡(luò)的權(quán)值和閾值分別是個(gè)什么概念?第一節(jié)中,我們已經(jīng)談到了權(quán)值和閥值的概念。這里我們更深入的說明一下,因?yàn)樗麄兒苤匾?,關(guān)系到網(wǎng)絡(luò)最后的結(jié)果。權(quán)值和閾值是神經(jīng)元之間的連
11、接,將數(shù)據(jù)輸入計(jì)算出一個(gè)輸出,然后與實(shí)際輸出比較,誤差反傳,不斷調(diào)整權(quán)值和閾值。假如下面兩個(gè)點(diǎn)屬于不同的類,須設(shè)計(jì)分類器將他們分開p1=1 1 -1'p2=1 -1 -1'這里用單層神經(jīng)元感知器,假設(shè)初始權(quán)值1. w=0.2 0.2 0.3復(fù)制代碼同時(shí)假設(shè)初始閥值1. b=-0.3復(fù)制代碼輸出 a1 a21. a1=hardlims(w*p1+b)2. a2=hardlims(w*p2+b)復(fù)制代碼如果不能分開,還須不斷調(diào)整w,b用BP逼近非線性函數(shù),如何提高訓(xùn)練精度(1)調(diào)整網(wǎng)絡(luò)結(jié)構(gòu)增加網(wǎng)絡(luò)的層數(shù)可以進(jìn)一步降低誤差,提高精度但會(huì)使網(wǎng)絡(luò)復(fù)雜化,從而增加網(wǎng)絡(luò)的訓(xùn)練時(shí)間。精度的提高
12、實(shí)際上也可以通過增加隱層神經(jīng)元的數(shù)目來獲得,其效果更容易觀察和掌握,所以應(yīng)優(yōu)先考慮。(2)初始值選取為了使誤差盡可能小 ,需要合理選擇初始權(quán)重和偏置,如果太大就容易陷入飽和區(qū),導(dǎo)致停頓 。一般應(yīng)選為均勻分布的小數(shù),介于 (-1,1) 。(3)學(xué)習(xí)速率調(diào)整學(xué)習(xí)速率的選取很重要 ,大了可能導(dǎo)致系統(tǒng)不穩(wěn)定,小了會(huì)導(dǎo)致訓(xùn)練周期過長(zhǎng)、收斂慢,達(dá)不到要求的誤差。一般傾向于選取較小的學(xué)習(xí)速率以保持系統(tǒng)穩(wěn)定,通過觀察誤差下降曲線來判斷。下降較快說明學(xué)習(xí)率比較合適,若有較大振蕩則說明學(xué)習(xí)率偏大。同時(shí),由于網(wǎng)絡(luò)規(guī)模大小的不同,學(xué)習(xí)率選擇應(yīng)當(dāng)針對(duì)其進(jìn)行調(diào)整。采用變學(xué)習(xí)速率的方案,令學(xué)習(xí)速率隨學(xué)習(xí)進(jìn)展而逐步減少,可收
13、到良好的效果。(4)期望誤差期望誤差當(dāng)然希望越小越好,但是也要有合適值。本節(jié)主要學(xué)習(xí)使用matlab實(shí)現(xiàn)bp算法的一般步驟和過程。為了充分利用數(shù)據(jù),得到最優(yōu)的網(wǎng)絡(luò)訓(xùn)練結(jié)果,在網(wǎng)絡(luò)建立前應(yīng)該進(jìn)行的基本數(shù)據(jù)處理問題,包括:(1)BP神經(jīng)網(wǎng)絡(luò)matlab實(shí)現(xiàn)的基本步驟(2)數(shù)據(jù)歸一化問題和方法(3)輸入訓(xùn)練數(shù)據(jù)的亂序排法,以及分類方法(4)如何查看和保存訓(xùn)練的結(jié)果(5)每次結(jié)果不一樣問題。用matlab實(shí)現(xiàn)bp,其實(shí)很簡(jiǎn)單,按下面步驟基本可以了BP神經(jīng)網(wǎng)絡(luò)matlab實(shí)現(xiàn)的基本步驟1、數(shù)據(jù)歸一化2、數(shù)據(jù)分類,主要包括打亂數(shù)據(jù)順序,抽取正常訓(xùn)練用數(shù)據(jù)、變量數(shù)據(jù)、測(cè)試數(shù)據(jù)3、建立神經(jīng)網(wǎng)絡(luò),包括設(shè)置多少層
14、網(wǎng)絡(luò)(一般3層以內(nèi)既可以,每層的節(jié)點(diǎn)數(shù)(具體節(jié)點(diǎn)數(shù),尚無科學(xué)的模型和公式方法確定,可采用試湊法,但輸出層的節(jié)點(diǎn)數(shù)應(yīng)和需要輸出的量個(gè)數(shù)相等),設(shè)置隱含層的傳輸函數(shù)等。關(guān)于網(wǎng)絡(luò)具體建立使用方法,在后幾節(jié)的例子中將會(huì)說到。4、指定訓(xùn)練參數(shù)進(jìn)行訓(xùn)練,這步非常重要,在例子中,將詳細(xì)進(jìn)行說明5、完成訓(xùn)練后,就可以調(diào)用訓(xùn)練結(jié)果,輸入測(cè)試數(shù)據(jù),進(jìn)行測(cè)試6、數(shù)據(jù)進(jìn)行反歸一化7、誤差分析、結(jié)果預(yù)測(cè)或分類,作圖等數(shù)據(jù)歸一化問題歸一化的意義:首先說一下,在工程應(yīng)用領(lǐng)域中,應(yīng)用BP網(wǎng)絡(luò)的好壞最關(guān)鍵的仍然是輸入特征選擇和訓(xùn)練樣本集的準(zhǔn)備,若樣本集代表性差、矛盾樣本多、數(shù)據(jù)歸一化存在問題,那么,使用多復(fù)雜的綜合算法、多精致
15、的網(wǎng)絡(luò)結(jié)構(gòu),建立起來的模型預(yù)測(cè)效果不會(huì)多好。若想取得實(shí)際有價(jià)值的應(yīng)用效果,從最基礎(chǔ)的數(shù)據(jù)整理工作做起吧,會(huì)少走彎路的。歸一化是為了加快訓(xùn)練網(wǎng)絡(luò)的收斂性,具體做法是:1 把數(shù)變?yōu)椋?,1)之間的小數(shù)主要是為了數(shù)據(jù)處理方便提出來的,把數(shù)據(jù)映射到01范圍之內(nèi)處理,更加便捷快速,應(yīng)該歸到數(shù)字信號(hào)處理范疇之內(nèi)。2 把有量綱表達(dá)式變?yōu)闊o量綱表達(dá)式歸一化是一種簡(jiǎn)化計(jì)算的方式,即將有量綱的表達(dá)式,經(jīng)過變換,化為無量綱的表達(dá)式,成為純量比如,復(fù)數(shù)阻抗可以歸一化書寫:Z = R + jL = R(1 + jL/R) ,復(fù)數(shù)部分變成了純數(shù)量了,沒有量綱。另外,微波之中也就是電路分析、信號(hào)系統(tǒng)、電磁波傳輸?shù)?,有很多運(yùn)
16、算都可以如此處理,既保證了運(yùn)算的便捷,又能凸現(xiàn)出物理量的本質(zhì)含義。神經(jīng)網(wǎng)絡(luò)歸一化方法:由于采集的各數(shù)據(jù)單位不一致,因而須對(duì)數(shù)據(jù)進(jìn)行-1,1歸一化處理,歸一化方法主要有如下幾種,供大家參考:1、線性函數(shù)轉(zhuǎn)換,表達(dá)式如下:1. y=(x-MinValue)/(MaxValue-MinValue)復(fù)制代碼說明:x、y分別為轉(zhuǎn)換前、后的值,MaxValue、MinValue分別為樣本的最大值和最小值。2、對(duì)數(shù)函數(shù)轉(zhuǎn)換,表達(dá)式如下:1. y=log10(x)復(fù)制代碼說明:以10為底的對(duì)數(shù)函數(shù)轉(zhuǎn)換。3、反余切函數(shù)轉(zhuǎn)換,表達(dá)式如下:1. y=atan(x)*2/PI復(fù)制代碼matlab中歸一化的實(shí)現(xiàn):mat
17、lab中的歸一化處理有五種方法,只會(huì)其中一種就可以了,我喜歡用第4種,因?yàn)榱?xí)慣和方便注意:第一組和第二組歸一化函數(shù)在Matlab7.0以上已遺棄,他們的用法相似,pre*是歸一化,post*是反歸一化,tram*是使用同樣的設(shè)置歸一化另外一組數(shù)據(jù)1. 內(nèi)部函數(shù)premnmx、postmnmx、tramnmx,將數(shù)據(jù)歸一化到(-1,1)premnmx的語法格式是1. :Pn,minp,maxp,Tn,mint,maxt=premnmx(P,T)復(fù)制代碼其中P,T分別為原始輸入和輸出數(shù)據(jù),minp和maxp分別為P中的最小值和最大值。mint和maxt分別為T的最小值和最大值。我們?cè)谟?xùn)練網(wǎng)絡(luò)時(shí),如
18、果所用的是經(jīng)過歸一化的樣本數(shù)據(jù),那么以后使用網(wǎng)絡(luò)時(shí)所用的新數(shù)據(jù)也應(yīng)該和樣本數(shù)據(jù)接受相同的預(yù)處理,這就要用到tramnmx,換句話說使用同一個(gè)歸一化設(shè)置(setting)歸一化另外一組數(shù)據(jù)。如下所示:1. Pn=tramnmx(P,minp,maxp)復(fù)制代碼其中P和Pn分別為變換前、后的輸入數(shù)據(jù),maxp和minp分別為premnmx函返回的最大值maxp和最小值minp。2、prestd、poststd、trastd歸化數(shù)據(jù)到(0,1)用法與1差不多。詳細(xì)可以help prestd。上述兩種方法是可以相互轉(zhuǎn)化的,比如,第一種歸化后的數(shù)據(jù)為p,則(1+p)./2的結(jié)果就是第二種了3、mapmi
19、nmax()將數(shù)據(jù)歸一化到(-1,1),是6.5中*mnmx系列的替換函數(shù)該函數(shù)同時(shí)可以執(zhí)行歸一化、反歸一化和歸一化其他數(shù)據(jù)的功能,具體看幫助和后面的實(shí)例1. % 歸一化數(shù)據(jù)輸入為p,輸出為t2. normInput,ps = mapminmax(p);3. normTarget,ts = mapminmax(t);4.5. % 反歸一化6. trainOutput = mapminmax('reverse',normTrainOutput,ts);7. trainInsect = mapminmax('reverse',trainSamples.T,ts);8
20、. validateOutput = mapminmax('reverse',normValidateOutput,ts);9. validateInsect = mapminmax('reverse',validateSamples.T,ts);10. testOutput = mapminmax('reverse',normTestOutput,ts);11. testInsect = mapminmax('reverse',testSamples.T,ts);12.13. %例子:14. x1 = 1 2 4; 1 1 1;
21、 3 2 2; 0 0 015. y1,PS = mapminmax(x1,0,1)% 歸化到 0,1,若不填,則默認(rèn)為-1,116.17. %還原:18. x1_again = mapminmax('reverse',y1,PS)復(fù)制代碼4、mapstd()將數(shù)據(jù)歸一化到(0,1),是6.5中*std系列的替代函數(shù)同理,3和4兩種方法是可以相互轉(zhuǎn)化的,比如,第一種歸化后的數(shù)據(jù)為p,則(1+p)./2的結(jié)果就是第二種了。5、自己寫歸一化函數(shù),這個(gè)網(wǎng)上很多,大家可以百度下輸入訓(xùn)練數(shù)據(jù)的亂序排法,以及分類注意:dividevec()函數(shù)在7.6版本還可以使用把數(shù)據(jù)重新打亂順序,進(jìn)行
22、輸入,可以讓數(shù)據(jù)更加具備典型性和更優(yōu)良的泛化能力!把數(shù)據(jù)進(jìn)行打亂,并分類為:訓(xùn)練輸入數(shù)據(jù)、變量數(shù)據(jù)、測(cè)試數(shù)據(jù)的方法我用百度搜了一下,發(fā)現(xiàn)有些方法,但居然很少看到使用matlab內(nèi)部函數(shù)直接進(jìn)行的,其實(shí)matlab自帶的內(nèi)部函數(shù)dividevec,完全能勝任上述工作,推薦!但這個(gè)存在一個(gè)問題是,因?yàn)榇騺y了,最后分析結(jié)果的時(shí)候,數(shù)據(jù)重新排列困難,因?yàn)閬G失了數(shù)據(jù)在數(shù)組中的位置參數(shù)。具體用法可以參見下面我的bp交通預(yù)測(cè)的例子。因?yàn)槲矣玫?.0版本,Neural Network Toolbox Version 5.0.2 (R2007a)昨天,我去mathworks公司查看了一下n
23、net的新手冊(cè),上述問題得到了解決,里面視乎沒有介紹dividverc這個(gè)函數(shù)了,但增加了新的函數(shù)來完成上述功能,并返回標(biāo)號(hào)(手頭沒裝新版本Neural Network Toolbox Version 6.0 (R2008a)),看guide大概是這個(gè)意思(有新版本的,可以試一下,這個(gè)函數(shù)是不是這個(gè)意思):divideblock,divideind,divideint和dividerand上述函數(shù),用法和功能基本相同,只是打亂的方法不一樣,分別是block方法抽取、按數(shù)組標(biāo)號(hào)自定義抽取、交錯(cuò)索引抽取和隨機(jī)抽。下面以divideblock為例,講解其基
24、本用法:1. trainV,valV,testV,trainInd,valInd,testInd =divideblock(allV,trainRatio,valRatio,testRatio)2.3. 訓(xùn)練數(shù)據(jù),變量數(shù)據(jù),測(cè)試數(shù)據(jù),訓(xùn)練數(shù)據(jù)矩陣的標(biāo)號(hào),變量數(shù)據(jù)標(biāo)號(hào),測(cè)試數(shù)據(jù)標(biāo)號(hào) =divideblock(所有數(shù)據(jù),訓(xùn)練數(shù)據(jù)百分比,變量數(shù)據(jù)百分比,測(cè)試數(shù)據(jù)百分比)復(fù)制代碼其實(shí)dividevec和后面四個(gè)分類函數(shù)的區(qū)別在于,dividevec一般直接在Matlab代碼中調(diào)用。而后面四個(gè)函數(shù)是通過設(shè)置網(wǎng)絡(luò)的divideFcn函數(shù)來實(shí)現(xiàn),比如,net.divideFcn='divideblo
25、ck',但不是說不可以在代碼中像dividevec直接調(diào)用如何查看和保存結(jié)果訓(xùn)練好的權(quán)值、閾值的輸出方法是:輸入到隱層權(quán)值:1. w1=net.iw1,1復(fù)制代碼隱層閾值:1. theta1=net.b1復(fù)制代碼隱層到輸出層權(quán)值:1. w2=net.lw2,1;復(fù)制代碼輸出層閾值:1. theta2=net.b2復(fù)制代碼訓(xùn)練好的BP神經(jīng)網(wǎng)絡(luò)保存:1. %保存2. save file_name net_name%Matlab自動(dòng)將網(wǎng)絡(luò)保存為mat數(shù)據(jù)文件,下次使用時(shí)可以直接載入3. %載入4. load file_name復(fù)制代碼每次結(jié)果不一樣問題因?yàn)槊看纬跏蓟W(wǎng)絡(luò)時(shí)都是隨機(jī)的,而且訓(xùn)練
26、終止時(shí)的誤差也不完全相同,結(jié)果訓(xùn)練后的權(quán)植和閥也不完全相同(大致是一樣的),所以每次訓(xùn)練后的結(jié)果也略有不同。找到比較好的結(jié)果后,用命令save filen_ame net_name保存網(wǎng)絡(luò),可使預(yù)測(cè)的結(jié)果不會(huì)變化,在需要的調(diào)用時(shí)用命令load filename載入。關(guān)于如何找到比較好的結(jié)果,進(jìn)行保存,可以設(shè)置誤差,在循環(huán)中保存,具體使用可以參看bp交通預(yù)測(cè)優(yōu)化后的例子根據(jù)前面三節(jié)的學(xué)習(xí)內(nèi)容,可以基本編寫一個(gè)BP神經(jīng)網(wǎng)絡(luò),來處理一些問題了。下面我給出一個(gè)bp神經(jīng)網(wǎng)絡(luò)進(jìn)行交通預(yù)測(cè)的Matlab源代碼,里面?zhèn)溆休^為詳細(xì)的注釋,供給初學(xué)者!1. %bp神經(jīng)網(wǎng)絡(luò)進(jìn)行交通預(yù)測(cè)的Matlab源代碼2. %
27、BP 神經(jīng)網(wǎng)絡(luò)用于預(yù)測(cè)3. % 使用平臺(tái) - Matlab7.04. % 數(shù)據(jù)為1986年到2000年的交通量 ,網(wǎng)絡(luò)為3輸入,1輸出5. % 15組數(shù)據(jù),其中9組為正常訓(xùn)練數(shù)據(jù),3組為變量數(shù)據(jù),3組為測(cè)試數(shù)據(jù)6. %by akjuan7. %all rights preserved by 8. %2008.119.10. clc11. clear12.13. %-14. %原始數(shù)據(jù)15. %-16. year=1986:2000;%數(shù)據(jù)是從1986到2000年的17.18. p=493 372 445;372 445 176;445 176 235;176 235 378;235 378 4
28、29;.19. 378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;.20. 527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685'%輸入數(shù)據(jù),共15組,每組3個(gè)輸入21. t=176 235 378 429 561 651 467 527 668 841 526 480 567 685 507;%輸出數(shù)據(jù),共15組,每組1個(gè)輸出22.23.24. %-25. %數(shù)據(jù)歸一化處理26. %mapminm
29、ax函數(shù)默認(rèn)將數(shù)據(jù)歸一化到-1,1,調(diào)用形式如下27. %y,ps =%mapminmax(x,ymin,ymax)28. %x需歸化的數(shù)據(jù)輸入29. %ymin,ymax為需歸化到的范圍,不填默認(rèn)為歸化到-1,130. %y歸一化后的樣本數(shù)據(jù)31. %ps處理設(shè)置,ps主要在結(jié)果反歸一化中需要調(diào)用,或者使用同樣的settings歸一化另外一組數(shù)據(jù)32. %-33. normInput,ps = mapminmax(p);34. normTarget,ts = mapminmax(t);35.36.37. %-38. %數(shù)據(jù)亂序,及分類處理39. %將輸入的15組數(shù)據(jù)的20%,即3組,用來作為
30、測(cè)試數(shù)據(jù);40. % 樣本的20%,即3組,用來作為變化數(shù)據(jù);41. %另外9組用來正常輸入,用來訓(xùn)練;42. %dividevec()用來重新隨機(jī)抽取上述三種分類的數(shù)據(jù),原來的順序被打亂43. %函數(shù)調(diào)用的語法44. %trainV,valV,testV = dividevec(p,t,valPercent,testPercent)45. %輸入p為輸入數(shù)據(jù),t為輸出數(shù)據(jù)46. %valPercent為訓(xùn)練用的變化數(shù)據(jù)在總輸入中的百分比47. %testPercent為訓(xùn)練用的測(cè)試數(shù)據(jù)在總輸入中的百分比48. %輸出trainV,valV,testV分別為按亂序及相應(yīng)百分比,抽取得到的數(shù)據(jù)4
31、9. %另外,打亂后的數(shù)據(jù),p和t都是對(duì)應(yīng)的,請(qǐng)放心使用50. %-51. testPercent = 0.20; % Adjust as desired52. validatePercent = 0.20; % Adust as desired53. trainSamples,validateSamples,testSamples = dividevec(normInput,normTarget,validatePercent,testPercent);54.55.56. %-57. % 設(shè)置網(wǎng)絡(luò)參數(shù)58. %- 59. N
32、odeNum1 = 20; % 隱層第一層節(jié)點(diǎn)數(shù)60. NodeNum2=40; % 隱層第二層節(jié)點(diǎn)數(shù)61. TypeNum = 1; % 輸出維數(shù)62.63. TF1 = 'tansig'TF2 = 'tansig' TF3 = 'tansig'%各層傳輸函數(shù),TF3為輸出層傳輸函數(shù)64. %如果訓(xùn)練結(jié)果不理想,可以嘗試更改傳輸函數(shù),以下這些是各類傳輸函數(shù)65. %TF1 = 'tansig'TF2 = 'logsig'66. %TF1 = 'logsig&
33、#39;TF2 = 'purelin'67. %TF1 = 'tansig'TF2 = 'tansig'68. %TF1 = 'logsig'TF2 = 'logsig'69. %TF1 = 'purelin'TF2 = 'purelin' 70.71. %注意創(chuàng)建BP網(wǎng)絡(luò)函數(shù)newff()的參數(shù)調(diào)用,在新版本(7.6)中已改變72. net=newff(minmax(normInput),NodeNum1,NodeNum2,TypeNum,TF1 TF2 TF3,'
34、;traingdx');%創(chuàng)建四層BP網(wǎng)絡(luò)73.74.75.76. %-77. % 設(shè)置訓(xùn)練參數(shù)78. %- 79. net.trainParam.epochs=10000;%訓(xùn)練次數(shù)設(shè)置80. net.trainParam.goal=1e-6;%訓(xùn)練目標(biāo)設(shè)置81. net.trainParam.lr=0.01;%學(xué)習(xí)率設(shè)置,應(yīng)設(shè)置為較少值,太大雖然會(huì)在開始加快收斂速度,但臨近最佳點(diǎn)時(shí),會(huì)產(chǎn)生動(dòng)蕩,而致使無法收斂82. %-83. % 指定訓(xùn)練函數(shù)84. %-85. % net.trainFcn = 'traingd' % 梯度下降算法86. %
35、 net.trainFcn = 'traingdm' % 動(dòng)量梯度下降算法87. %88. % net.trainFcn = 'traingda' % 變學(xué)習(xí)率梯度下降算法89. % net.trainFcn = 'traingdx' % 變學(xué)習(xí)率動(dòng)量梯度下降算法90. %91. % (大型網(wǎng)絡(luò)的首選算法)92. % net.trainFcn = 'trainrp' % RPROP(彈性BP)算法,內(nèi)存需求最小93. %94. % (共軛梯度算法)95. % net.trainFcn = 'traincgf' %
36、Fletcher-Reeves修正算法96. % net.trainFcn = 'traincgp' % Polak-Ribiere修正算法,內(nèi)存需求比Fletcher-Reeves修正算法略大97. % net.trainFcn = 'traincgb' % Powell-Beal復(fù)位算法,內(nèi)存需求比Polak-Ribiere修正算法略大98. %99. % (大型網(wǎng)絡(luò)的首選算法)100. %net.trainFcn = 'trainscg' % Scaled Conjugate Gradient算法,內(nèi)存需求與Fletcher-Reeves修
37、正算法相同,計(jì)算量比上面三種算法都小很多101. % net.trainFcn = 'trainbfg' % Quasi-Newton Algorithms - BFGS Algorithm,計(jì)算量和內(nèi)存需求均比共軛梯度算法大,但收斂比較快102. % net.trainFcn = 'trainoss' % One Step Secant Algorithm,計(jì)算量和內(nèi)存需求均比BFGS算法小,比共軛梯度算法略大103. %104. % (中型網(wǎng)絡(luò)的首選算法)105. %net.trainFcn = 'trainlm' % Levenberg-M
38、arquardt算法,內(nèi)存需求最大,收斂速度最快106. % net.trainFcn = 'trainbr' % 貝葉斯正則化算法107. %108. % 有代表性的五種算法為:'traingdx','trainrp','trainscg','trainoss', 'trainlm'109.110. net.trainfcn='traingdm'111. net,tr = train(net,trainSamples.P,trainSamples.T,validateSamples
39、,testSamples);112.113. %-114. % 訓(xùn)練完成后,就可以調(diào)用sim()函數(shù),進(jìn)行仿真了115. %- 116. normTrainOutput,Pf,Af,E,trainPerf = sim(net,trainSamples.P,trainSamples.T);%正常輸入的9組p數(shù)據(jù),BP得到的結(jié)果t117. normValidateOutput,Pf,Af,E,validatePerf = sim(net,validateSamples.P,validateSamples.T);%用作變量3的數(shù)據(jù)p,BP得到的結(jié)果t118. normTest
40、Output,Pf,Af,E,testPerf = sim(net,testSamples.P,testSamples.T);%用作測(cè)試的3組數(shù)據(jù)p,BP得到的結(jié)果t119.120.121. %-122. % 仿真后結(jié)果數(shù)據(jù)反歸一化,如果需要預(yù)測(cè),只需將預(yù)測(cè)的數(shù)據(jù)P填入123. % 將獲得預(yù)測(cè)結(jié)果t124. %- 125. trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常輸入的9組p數(shù)據(jù),BP得到的歸一化后的結(jié)果t126. trainInsect = mapminmax('rever
41、se',trainSamples.T,ts);%正常輸入的9組數(shù)據(jù)t127. validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作變量3的數(shù)據(jù)p,BP得到的歸一化的結(jié)果t128. validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作變量3的數(shù)據(jù)t129. testOutput = mapminmax('reverse',normTestOutput,ts);%用作變量3組數(shù)據(jù)p,BP得到的歸一化
42、的結(jié)果t130. testInsect = mapminmax('reverse',testSamples.T,ts);%用作變量3組數(shù)據(jù)t131.132.133. %-134. % 數(shù)據(jù)分析和繪圖135. %- 136. figure137. plot(1:12,trainOutput validateOutput,'b-',1:12,trainInsect validateInsect,'g-',13:15,testOutput,'m*',13:15,testInsect,'ro');13
43、8. title('o為真實(shí)值,*為預(yù)測(cè)值')139. xlabel('年份');140. ylabel('交通量(輛次/晝夜)');復(fù)制代碼運(yùn)行后的結(jié)果如下圖,注意該程序是在7.0版本上實(shí)驗(yàn)的,沒法在6.5版本運(yùn)行,因?yàn)?.5版本的歸一化函數(shù)被遺棄了;在7.6以上版本也沒有辦法運(yùn)行,因?yàn)閚ewff函數(shù)參數(shù)形式改變了。但是只要將上面提到部分相應(yīng)修改下,就可以運(yùn)行了正常數(shù)據(jù),是用來正常訓(xùn)練用變量數(shù)據(jù),主要目的是防止訓(xùn)練中出現(xiàn)過擬合狀態(tài)測(cè)試數(shù)據(jù),是用來看訓(xùn)練效果的在第四節(jié),給出的BP網(wǎng)絡(luò)進(jìn)行交通預(yù)測(cè)的程序,是個(gè)基本模式,更改少數(shù)幾處參數(shù)后,可用于其它
44、方面!但通過程序運(yùn)行后,可以看出,預(yù)測(cè)效果并不理想,如何得到理想的預(yù)測(cè)訓(xùn)練結(jié)果,下面是基本思路及matlab的實(shí)現(xiàn):1、設(shè)置一個(gè)誤差項(xiàng),為測(cè)試數(shù)據(jù)的網(wǎng)絡(luò)仿真結(jié)果和實(shí)際結(jié)果偏差,并設(shè)置一個(gè)自己能接受的精度值2、每次訓(xùn)練網(wǎng)絡(luò)后,將這個(gè)誤差和設(shè)置值比較,也可通過測(cè)試獲得網(wǎng)絡(luò)能給出的最高預(yù)測(cè)精度3、得到滿意訓(xùn)練網(wǎng)絡(luò)后,保存BP結(jié)果,以便下次調(diào)用下面這個(gè)程序是在第四節(jié)程序基礎(chǔ)上優(yōu)化而來,可以運(yùn)行前面的程序和這個(gè)程序,比較兩者的差別,可以通過修改eps來控制預(yù)測(cè)的誤差!1. %bp神經(jīng)網(wǎng)絡(luò)進(jìn)行交通預(yù)測(cè)的Matlab源代碼2. % BP 神經(jīng)網(wǎng)絡(luò)用于預(yù)測(cè)3. % 使用平臺(tái) - Matlab7.04. % 數(shù)
45、據(jù)為1986年到2000年的交通量 ,網(wǎng)絡(luò)為3輸入,1輸出5. % 15組數(shù)據(jù),其中9組為正常訓(xùn)練數(shù)據(jù),3組為變量數(shù)據(jù),3組為測(cè)試數(shù)據(jù)6. %by akjuan7. %all rights preserved by 8. %2008.119.10. clc11. clear12.13. All_error=;%所有誤差存儲(chǔ)14.15. %-16. %原始數(shù)據(jù)17. %-18. year=1986:2000;%數(shù)據(jù)是從1986到2000年的19.20. p=493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;.21.
46、; 378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;.22. 527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685'%輸入數(shù)據(jù),共15組,每組3個(gè)輸入23. t=176 235 378 429 561 651 467 527 668 841 526 480 567 685 507;%輸出數(shù)據(jù),共15組,每組1個(gè)輸出24.25.26. %-27. %數(shù)據(jù)歸一化處理28. %mapminmax函數(shù)默認(rèn)將數(shù)據(jù)歸一化到
47、-1,1,調(diào)用形式如下29. %y,ps =%mapminmax(x,ymin,ymax)30. %x需歸化的數(shù)據(jù)輸入31. %ymin,ymax為需歸化到的范圍,不填默認(rèn)為歸化到-1,132. %y歸一化后的樣本數(shù)據(jù)33. %ps處理設(shè)置,ps主要在結(jié)果反歸一化中需要調(diào)用,或者使用同樣的settings歸一化另外一組數(shù)據(jù)34. %-35. normInput,ps = mapminmax(p);36. normTarget,ts = mapminmax(t);37.38.39. %-40. %數(shù)據(jù)亂序,及分類處理41. %將輸入的15組數(shù)據(jù)的20%,即3組,用來作為測(cè)試數(shù)據(jù);42. % 樣本
48、的20%,即3組,用來作為變化數(shù)據(jù);43. %另外9組用來正常輸入,用來訓(xùn)練;44. %dividevec()用來重新隨機(jī)抽取上述三種分類的數(shù)據(jù),原來的順序被打亂45. %函數(shù)調(diào)用的語法46. %trainV,valV,testV = dividevec(p,t,valPercent,testPercent)47. %輸入p為輸入數(shù)據(jù),t為輸出數(shù)據(jù)48. %valPercent為訓(xùn)練用的變化數(shù)據(jù)在總輸入中的百分比49. %testPercent為訓(xùn)練用的測(cè)試數(shù)據(jù)在總輸入中的百分比50. %輸出trainV,valV,testV分別為按亂序及相應(yīng)百分比,抽取得到的數(shù)據(jù)51. %另外,打亂后的數(shù)據(jù)
49、,p和t都是對(duì)應(yīng)的,請(qǐng)放心使用52. %-53. testPercent = 0.20; % Adjust as desired54. validatePercent = 0.20; % Adust as desired55. trainSamples,validateSamples,testSamples = dividevec(normInput,normTarget,validatePercent,testPercent);56.57. for j=1:20058. %-59. % 設(shè)置網(wǎng)絡(luò)參數(shù)60. %- 61. No
50、deNum1 = 20; % 隱層第一層節(jié)點(diǎn)數(shù)62. NodeNum2=40; % 隱層第二層節(jié)點(diǎn)數(shù)63. TypeNum = 1; % 輸出維數(shù)64.65. TF1 = 'tansig'TF2 = 'tansig' TF3 = 'tansig'%各層傳輸函數(shù),TF3為輸出層傳輸函數(shù)66. %如果訓(xùn)練結(jié)果不理想,可以嘗試更改傳輸函數(shù),以下這些是各類傳輸函數(shù)67. %TF1 = 'tansig'TF2 = 'logsig'68. %TF1 = 'logsig
51、39;TF2 = 'purelin'69. %TF1 = 'tansig'TF2 = 'tansig'70. %TF1 = 'logsig'TF2 = 'logsig'71. %TF1 = 'purelin'TF2 = 'purelin' 72.73.74. net=newff(minmax(normInput),NodeNum1,NodeNum2,TypeNum,TF1 TF2 TF3,'traingdx');%網(wǎng)絡(luò)創(chuàng)建75.76.77. %-78. %
52、設(shè)置訓(xùn)練參數(shù)79. %- 80. net.trainParam.epochs=10000;%訓(xùn)練次數(shù)設(shè)置81. net.trainParam.goal=1e-6;%訓(xùn)練目標(biāo)設(shè)置82. net.trainParam.lr=0.01;%學(xué)習(xí)率設(shè)置,應(yīng)設(shè)置為較少值,太大雖然會(huì)在開始加快收斂速度,但臨近最佳點(diǎn)時(shí),會(huì)產(chǎn)生動(dòng)蕩,而致使無法收斂83. %-84. % 指定訓(xùn)練參數(shù)85. %-86. % net.trainFcn = 'traingd' % 梯度下降算法87. % net.trainFcn = 'traingdm' % 動(dòng)量梯度下降算法8
53、8. %89. % net.trainFcn = 'traingda' % 變學(xué)習(xí)率梯度下降算法90. % net.trainFcn = 'traingdx' % 變學(xué)習(xí)率動(dòng)量梯度下降算法91. %92. % (大型網(wǎng)絡(luò)的首選算法)93. % net.trainFcn = 'trainrp' % RPROP(彈性BP)算法,內(nèi)存需求最小94. %95. % (共軛梯度算法)96. % net.trainFcn = 'traincgf' % Fletcher-Reeves修正算法97. % net.trainFcn = 'traincgp' % Polak-Ribiere修正算法,內(nèi)存需求比Fletcher-Reeves修正算法略大98. % net.trainFcn = 'traincgb' % Powell-Beal復(fù)位算法,內(nèi)存需求比Polak-Ribiere修正算法略大99. %100. % (大型網(wǎng)絡(luò)的首選算法)101. %net.trainFcn = 'trainscg' % Scaled Conjugat
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于協(xié)議離婚的撫養(yǎng)權(quán)
- 2024夫妻自愿離婚協(xié)議書
- 貝克痣病因介紹
- 落葉型天皰瘡病因介紹
- 自身免疫性腦炎病因介紹
- 房屋與室內(nèi)環(huán)境檢測(cè)技術(shù)-模塊三房屋實(shí)體查驗(yàn)與檢76課件講解
- 中小學(xué)校長(zhǎng)2024年度述職報(bào)告范文
- 2022-2023學(xué)年天津市和平區(qū)第二南開學(xué)校高二(上)期中語文試卷
- 2024秋新滬科版物理八年級(jí)上冊(cè)教學(xué)課件 第三章 光的世界 第一節(jié)第1課時(shí) 光的直線傳播
- 初中作文擬題技巧課件
- 病原微生物實(shí)驗(yàn)活動(dòng)風(fēng)險(xiǎn)評(píng)估表
- 生產(chǎn)作業(yè)指導(dǎo)書 SOP
- 報(bào)關(guān)委托書 - 空白模板
- 初中英語課堂創(chuàng)新教學(xué)策略
- 《果蔬雕刻》教案
- 報(bào)價(jià)單報(bào)價(jià)表
- 服裝投標(biāo)技術(shù)方案全
- “尚美課堂”各學(xué)科課堂要求
- 印染廠安全生產(chǎn)注意事項(xiàng)大全
評(píng)論
0/150
提交評(píng)論