版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
§3-1人腦是如何學(xué)習(xí)的§3-2模仿人腦——神經(jīng)元(感知器)§3-3非線性神經(jīng)元§3-4神經(jīng)網(wǎng)絡(luò)架構(gòu)§3-5梯度下降§3-6反向傳播BP§3-7實現(xiàn)簡單神經(jīng)網(wǎng)絡(luò)簡單神經(jīng)網(wǎng)絡(luò)人腦是一個神奇的世界。它可以讓我們認(rèn)識許多東西,并在認(rèn)識這些東西以后得到很好的泛化能力。就好像我們認(rèn)識了一個白貓以后,就能認(rèn)識其他大大小小,顏色不同的貓一樣?;蛘弋?dāng)我們遇到某些需要做決定的事情時,我們總能根據(jù)經(jīng)驗和實際情況做出一個合乎常理的決策。既然人腦的功能如此強(qiáng)大又如此聰慧,那么我們能不能讓計算機(jī)模仿大腦,從而讓它也變得更加智能呢?本章簡介§3-1人腦是如何學(xué)習(xí)的據(jù)估計,人類大腦擁有1000億個神經(jīng)細(xì)胞,如果把它們排成一條直線,長度將達(dá)到1000公里。大腦是由許多神經(jīng)元聯(lián)結(jié)而成的巨大網(wǎng)絡(luò),如圖3-1所示。圖3-1人腦神經(jīng)網(wǎng)絡(luò)示意圖神經(jīng)元的樹突接收外界感官信息,當(dāng)神經(jīng)元被激活時,神經(jīng)元通過細(xì)胞軸突將信息傳導(dǎo)到其他神經(jīng)元,下一個神經(jīng)元的樹突繼續(xù)用來接收其他神經(jīng)元的輸入信號,以此類推。神經(jīng)元被激活有一種很特殊的性質(zhì):當(dāng)神經(jīng)元被刺激的強(qiáng)度未達(dá)到某一閾值時,神經(jīng)沖動不會發(fā)生;而當(dāng)刺激強(qiáng)度達(dá)到或超過某一閾值時,神經(jīng)沖動能夠發(fā)生并達(dá)到最大強(qiáng)度。此后刺激的強(qiáng)度即使再持續(xù)加強(qiáng)或減弱,已誘發(fā)的沖動強(qiáng)度也不再發(fā)生變化。圖3-2給出了一個簡單的神經(jīng)元結(jié)構(gòu)。圖3-2神經(jīng)元的構(gòu)成舉個現(xiàn)實生活中的例子例如,聽說當(dāng)年的老同學(xué)們打算舉辦一個聚會。你想念當(dāng)年的老同學(xué),正考慮是否去參加?;蛟S會通過如下三個因素設(shè)置權(quán)重來作出決定。1.天氣好嗎?2.你的前男朋友或者前女朋友會不會出現(xiàn)?3.這個聚會舉辦的地點是否便于前往?我們可以把天氣好設(shè)為1,不好為0;前任出現(xiàn)設(shè)為-1,不出現(xiàn)設(shè)為0;聚會地點交通方便設(shè)為1,不方便設(shè)為0。我們的大腦就會做出相應(yīng)判斷,也就是神經(jīng)元的樹突會受到刺激,并且把相應(yīng)的信息傳遞給其它神經(jīng)元,使我們做出最終的判斷,如圖3-3所示。圖3-3神經(jīng)元處理信息示意圖
(3-1)式3-1,當(dāng)Decide數(shù)值超過一定值以后,就做出去參加聚會的打算,這個值就稱為閾值。對應(yīng)神經(jīng)元的特性來講,就是當(dāng)神經(jīng)元的刺激強(qiáng)度達(dá)到或超過某一閾值時,神經(jīng)沖動才能夠發(fā)生,如圖3-4所示。圖3-4神經(jīng)元處理不同權(quán)重信息示意圖§3-2模仿人腦——神經(jīng)元(感知器)圖3-5感知器
一個龐大的神經(jīng)網(wǎng)絡(luò)是由眾多神經(jīng)元構(gòu)成的。如果想要構(gòu)造一個符合要求的大規(guī)模神經(jīng)網(wǎng)絡(luò),就必須要從單個神經(jīng)元入手。?種被稱為“感知器”的人工神經(jīng)元在20世紀(jì)五、六?年代由科學(xué)家FrankRosenblatt發(fā)明出來。對應(yīng)我們上一節(jié)所講的實際問題,神經(jīng)網(wǎng)絡(luò)的輸出,由分配權(quán)重后的總和來決定,當(dāng)這個數(shù)值大于或小于某個閾值的時候,我們就會做出去參加還是不參加聚會的決定。假設(shè)我們?nèi)⒓泳蹠那闆r用數(shù)字1來表示,不去的情況則用0來表示,那么感知器的工作方法可以用代數(shù)形式去表示:(3-2)這就是一個感知器的基本表示。我們可以根據(jù)上述的數(shù)學(xué)模型,認(rèn)為感知器是一個根據(jù)輸入與權(quán)重來做出決定的設(shè)備。圖3-6感知器網(wǎng)絡(luò)這個例?說明了一個感知器如何能權(quán)衡不同的依據(jù)來進(jìn)行決策。如果遇到更加復(fù)雜的問題,我們可以增加感知器網(wǎng)絡(luò)的復(fù)雜程度,以增加它的處理能力,如圖3-6所示。input是輸入數(shù)據(jù)。第一列的三個神經(jīng)元被稱為第一層感知器,分別對應(yīng)天氣、人員和交通這三個因素。而第二層的感知器是在權(quán)衡上一層的決策結(jié)果并做出決定。第三層中的感知器能進(jìn)行更加復(fù)雜的決策。圖3-6中第三層感知器只有一個神經(jīng)元,代表輸出output。以這種方式,一個多層的感知器網(wǎng)絡(luò)就可以從事復(fù)雜巧妙的決策。一個復(fù)雜網(wǎng)絡(luò)擁有眾多感知器,我們不可能依次去設(shè)定閾值(人為設(shè)定閾值也存在不確定性)。同時,神經(jīng)網(wǎng)絡(luò)本身也可能存在誤差。因此,我們不妨將閾值左移:可以整理為:(3-3)(3-4)我們也可以利用向量點積的形式來代替(3-5)B稱為偏置(Bias),式3-5為感知器的一般表達(dá)式?!?-3非線性神經(jīng)元
復(fù)雜的數(shù)學(xué)模型很多是非線性的。眾多線性模型的疊加無法很好地擬合非線性部分,如圖3-7所示。為了解決上述問題,我們引入激活函數(shù)(ActivationFunctions)。激活函數(shù)給神經(jīng)元引入了非線性因素,使得神經(jīng)網(wǎng)絡(luò)可以任意逼近任何非線性函數(shù),這樣神經(jīng)網(wǎng)絡(luò)就可以應(yīng)用到眾多的非線性模型中。圖3-7線性不可分(左)與線性可分(右)樣本如何引入激活函數(shù)呢?我們通常將激活函數(shù)與線性神經(jīng)元合并在一起使之成為非線性神經(jīng)元,其原理如圖3-8所示。
圖3-8非線性神經(jīng)元原理下面介紹幾種典型的激活函數(shù)①Sigmoid函數(shù)函數(shù)表達(dá)式:函數(shù)圖像:特點:它能夠把輸入的連續(xù)實值變換為0和1之間的輸出。特別的,如果輸入是非常大的負(fù)數(shù),那么輸出就是0;如果輸入是非常大的正數(shù),輸出就是1。(3-7)圖3-9Sigmoid函數(shù)將上述的表達(dá)式帶入sigmoid函數(shù),得到可以看出:這樣看來它似乎還是一個感知機(jī),只不過是將數(shù)據(jù)壓縮進(jìn)[0,1]范圍內(nèi)。當(dāng)在[0,1]之間的時候與線性神經(jīng)元有所偏離,其原因就是引入了非線性。(3-9)(3-8)②Tanh函數(shù)函數(shù)表達(dá)式:函數(shù)圖像:性質(zhì):引入Tanh非線性函數(shù)后,曲線關(guān)于坐標(biāo)軸奇對稱。(3-10)圖3-10Tanh函數(shù)③ReLu函數(shù)函數(shù)表達(dá)式:函數(shù)圖像:性質(zhì):
ReLU函數(shù)其實就是一個取最大值函數(shù),但是這并不是全區(qū)間可導(dǎo)的。由于只需要判斷輸入是否大于0,所以計算速度非???,收斂速度遠(yuǎn)快于sigmoid和tanh函數(shù)。ReLu是目前常用的激活函數(shù)。(3-11)圖3-11ReLu函數(shù)§3-4神經(jīng)網(wǎng)絡(luò)架構(gòu)
在了解了單個神經(jīng)元(感知器)和非線性激活函數(shù)后,現(xiàn)在可以考慮組建較為復(fù)雜的神經(jīng)網(wǎng)絡(luò)了。本節(jié)先介紹一些神經(jīng)網(wǎng)絡(luò)的術(shù)語。如圖3-12所示,假設(shè)我們獲得了這樣一個神經(jīng)網(wǎng)絡(luò):圖3-12神經(jīng)網(wǎng)絡(luò)基本構(gòu)造這個網(wǎng)絡(luò)中最左邊的稱為輸入層(InputLayer),其中的神經(jīng)元稱為輸入神經(jīng)元,原始數(shù)據(jù)由該層輸入到神經(jīng)網(wǎng)絡(luò)進(jìn)行后續(xù)處理。最右邊的為輸出層(OutputLayer),包含有輸出神經(jīng)元,該輸出層是神經(jīng)網(wǎng)絡(luò)對樣本處理后的最終結(jié)果,例如分類結(jié)果。在輸入層和輸出層之間的是中間層,也被稱為隱藏層或隱含層(HiddenLayer)。設(shè)計網(wǎng)絡(luò)的輸入、輸出層通常是比較簡單、直接的。例如,我們知道了一朵花的花萼長度、寬度,花瓣的長度、寬度,嘗試?yán)眠@四個特征來確定它是哪一種花。一朵花的四個特征,需要4個輸入神經(jīng)元,每個數(shù)值代表花朵一種特征的具體數(shù)值。當(dāng)輸出層為一個神經(jīng)元時,可以根據(jù)輸出的數(shù)字確定花朵的類型。如果輸出層是多個神經(jīng)元,我們可以使用每一個輸出神經(jīng)元代表一種類型的花,這種方法被稱為one-hot。圖3-13One-hot編碼示意圖One-hot是一種常用的輸出層編碼方法。例如,我們一共有三種花,則網(wǎng)絡(luò)的輸出層包含有3個神經(jīng)元,如圖3-13所示?!?-5梯度下降
我們希望尋找到一個算法,能夠自動地調(diào)整神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏置,讓網(wǎng)絡(luò)的輸出y(x)能夠擬合所有的訓(xùn)練輸入x。但是如何衡量希望輸出與實際輸出之間的偏差呢?為此引入代價函數(shù)(CostFunction)的概念,也叫損失函數(shù)(LossFunction)或目標(biāo)函數(shù)。定義如下的代價函數(shù),也被稱為二次代價函數(shù):3.5.1代價函數(shù)(3-12)其中,w為網(wǎng)絡(luò)中的權(quán)重,b為網(wǎng)絡(luò)中的偏置,n是訓(xùn)練輸入數(shù)據(jù)的個數(shù),y(x)表示目標(biāo)輸出,a代表當(dāng)輸入為x時網(wǎng)絡(luò)的實際輸出。我們把式(3-12)稱為二次代價函數(shù),也被稱為均方誤差或者M(jìn)SE。代價函數(shù)具有如下性質(zhì):①
非負(fù)性;②
所比較的兩個函數(shù)數(shù)值越接近,代價函數(shù)值就越小(最小化)。那么為什么要引入代價函數(shù)呢?直接最大化正確分類的數(shù)量不是更好嗎,何必去最小化?個代價函數(shù)這樣的間接評估量呢?
在神經(jīng)網(wǎng)絡(luò)中,通過調(diào)整權(quán)重和偏置直接進(jìn)行正確分類的函數(shù)并不是?個平滑的函數(shù),也就是說對權(quán)重和偏置做出微小的變動不會直接影響正確分類的數(shù)量。而用一個平滑的代價函數(shù)效果會更明顯。代價函數(shù)C(w,b)是由w,b這兩個變量決定的,如圖3-14所示。我們的目的是找到它的全局最小值。通常代價函數(shù)是?個復(fù)雜的多元函數(shù),只通過簡單觀察或計算很難直接找到最小值。3.5.2梯度下降圖3-14C(w,b)示意圖神經(jīng)網(wǎng)絡(luò)可能依賴大量的權(quán)重和偏置,極其復(fù)雜。把代價函數(shù)看做是一個山脈,包含有海拔高度(勢能)不同的山峰和山谷,而把某一時刻求得的函數(shù)值看作是一個可以跳動的“皮球”。我們讓這個球體不斷地在山脈中跳動,而隨著它的跳動勢能會逐漸下降,直到它跳落到整個山脈中海拔最低的谷底(全局最小值)。那么如何用數(shù)學(xué)形式來抽象出“球體”不斷跳落的過程呢?其實就是讓函數(shù)值逐漸減少,也就是函數(shù)的變化值始終為負(fù)即可:結(jié)合二次代價函數(shù)的定義公式(3-12),得到
(3-13)(3-14)(3-15)根據(jù)梯度的定義:(3-16)利用式(3-15)和式(3-16),式(3-14)可被重寫為:
帶入式(3-17)可得(3-17)(3-18)(3-19)
(3-20)
這就是我們希望得到的規(guī)則。通過式(3-21),可以持續(xù)減小C值直到獲得?個全局最小值。
(3-21)圖3-15梯度下降示意圖
由式(3-15)和式(3-21)得到了如下所示的權(quán)重和偏置這兩個參數(shù)的更新方法:(3-22)在神經(jīng)網(wǎng)絡(luò)中,代價函數(shù)C是?個關(guān)于所有權(quán)重和偏置的多元函數(shù),因此是在?個高維空間定義了?個超平面。而當(dāng)面臨有多極值函數(shù)時,梯度下降法可能會陷入局部最優(yōu)而非全局最優(yōu)。(3-23)§3-6反向傳播BP在前一節(jié)介紹了參數(shù)的更新原理,通過梯度下降法可以更新神經(jīng)網(wǎng)絡(luò)的參數(shù)。那么對于擁有多層的復(fù)雜神經(jīng)網(wǎng)絡(luò),它是如何更新每一層的參數(shù)呢?實際上是通過反向傳播(BackPropagation,BP)算法來解決的。當(dāng)我們使用前饋神經(jīng)網(wǎng)絡(luò)接收輸入x并產(chǎn)生輸出y(x)時,信息是通過網(wǎng)絡(luò)由輸入順次向輸出流動。輸入x提供初始信息,然后傳播到每一層的隱藏單元,最終產(chǎn)生輸出y(x)。這就是前向傳播(ForwardPropagation)。在訓(xùn)練過程中,前向傳播可以持續(xù)地向前直到產(chǎn)生一個代價函數(shù)。與此相反,反向傳播(BP)算法允許代價函數(shù)的信息通過網(wǎng)絡(luò)由輸出向輸入方向進(jìn)行反向流動,以此來計算梯度。3.6.1多層神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)表示
圖3-16神經(jīng)網(wǎng)絡(luò)參數(shù)A
圖3-17神經(jīng)網(wǎng)絡(luò)參數(shù)B這樣,前面討論過的式(3-6)就可以改寫為在前向傳播中,前一層神經(jīng)網(wǎng)絡(luò)的激活值將作為下一層神經(jīng)元的輸入。用向量的方式簡化上式:令(3-24)(3-25)(3-26)得到(3-27)因此,代價函數(shù)表達(dá)式可以寫成(3-28)其中,N為神經(jīng)網(wǎng)絡(luò)的總層數(shù)。3.6.2反向傳播算法原理
反向傳播算法的四個重要的基本公式:我們通過代價函數(shù)一步步地調(diào)整每一層的參數(shù),最終達(dá)到使代價函數(shù)達(dá)到最小的目的。值得注意的是,當(dāng)某一個參數(shù)發(fā)生變化后,它后面許多的參數(shù)也會隨之變化。通過展開一個權(quán)重的偏微分可以理解這個現(xiàn)象:(3-29)§3-7實現(xiàn)簡單神經(jīng)網(wǎng)絡(luò)我們利用以TensorFlow作為基礎(chǔ)的Keras框架來實現(xiàn)一個簡單的神經(jīng)網(wǎng)絡(luò)。在這個示例中,鳶尾花的數(shù)據(jù)集如圖3-18所示。鳶尾花數(shù)據(jù)集由150個樣本構(gòu)成,共有三種鳶尾花。每一條樣本記錄了花萼的長度、寬度,花瓣的長度、寬度。在使用之前,我們可以把三種鳶尾花中的“setosa”類標(biāo)記為0,“versicolor”標(biāo)記為1,“virginica”類標(biāo)記為2。圖3-18鳶尾花數(shù)據(jù)集現(xiàn)在構(gòu)建神經(jīng)網(wǎng)絡(luò)。#導(dǎo)入全部所需要的庫importnumpyasnpimportpandasaspdfromkerasimportoptimizersfromkeras.modelsimportSequentialfromkeras.layersimportDensefromkeras.wrappers.scikit_learnimportKerasClassifierfromkeras.utilsimportnp_utilsfromsklearn.model_selectionimporttrain_test_split,cross_val_scorefromsklearn.preprocessingimportLabelEncoderfromkeras.layers.coreimportDense,Activation#導(dǎo)入數(shù)據(jù)文件iris.csv(鳶尾花數(shù)據(jù)集可以通過本書作者或者從百度文庫等獲?。Wx取路徑在Windows環(huán)境下建議使用雙斜杠。假設(shè)數(shù)據(jù)文件保存在了計算機(jī)D盤的DLsample文件夾內(nèi)。dataframe=pd.read_csv("D:\\DLsample\\iris.csv",header=None)
#讀取指定文件中的數(shù)據(jù)dataset=dataframe.values#讀取指定文件中的第0列至第4列X=dataset[:,0:4].astype(float)#指定第4列為標(biāo)簽Y=dataset[:,4]#將標(biāo)簽轉(zhuǎn)化為one-hot形式encoder=LabelEncoder()encoded_Y=encoder.fit_transform(Y)dummy_y=np_utils.to_categorical(encoded_Y,3)#共三類,因此參數(shù)設(shè)為3,即用三個神經(jīng)元代表三種不同類型的花#顯示讀取的數(shù)據(jù)以及轉(zhuǎn)化后的標(biāo)簽print(X)print(dummy_y)#構(gòu)建模型model=Sequential()#全連接層,4維輸入,神經(jīng)元個數(shù)為10,激活函數(shù)為ReLu,首層必須聲明輸入的維數(shù)model.add(Dense(input_dim=4,units=10,activation='relu'))model.add(Dense(units=5,activation='relu'))#定義輸出層,由于采用one-hot形式,因此對應(yīng)著三種類型,輸出層采用3個神經(jīng)元model.add(Dense(output_dim=3,activation='softmax'))#編譯模型pile(loss='mean_squared_error',#定義損失函數(shù)為均方差optimizer='rmsprop',#定義優(yōu)化器metrics=['accuracy'])#定義評估方式為顯示識別率#顯示模型model.summary()#訓(xùn)練模型#X為輸入,dummy_y為目標(biāo)輸出,迭代次數(shù)為500,驗證集比例為20%#注意這里的驗證集是全部數(shù)據(jù)集的后20%,與訓(xùn)練集完全獨立model.fit(X,dummy_y,epochs=500,batch_size=1,validation_split=0.2)運(yùn)行后可以看到讀取的數(shù)據(jù):圖3-19讀取到的數(shù)據(jù)經(jīng)過編碼的標(biāo)簽正是one-hot形式:圖3-20編碼為one-hot形式標(biāo)簽可以看到網(wǎng)絡(luò)的結(jié)構(gòu)以及參數(shù)個數(shù):圖3-21顯示的網(wǎng)絡(luò)結(jié)構(gòu)與參數(shù)個數(shù)如圖3-22所示,在訓(xùn)練過程中顯示出來的訓(xùn)練樣本個數(shù)120(Trainon120samples)和驗證樣本個數(shù)30(validateon30samples)都與我們之前設(shè)定的80%,20%相符合。模型開始訓(xùn)練后將顯示每一次迭代所用時間(ms/step)、損失(loss)、訓(xùn)練集識別精度(acc)、驗證集損失(val_loss)、驗證集精度(val_acc):我們可以在keras中調(diào)用Tensorboard畫圖來觀察模型的性能,例如構(gòu)造數(shù)據(jù)流圖以及訓(xùn)練過程的識別精度。圖3-22顯訓(xùn)練過程#調(diào)用Tensorboardmodel.fit(X,dummy_y,epochs=10,batch_size=1,validation_split=0.2,callbacks=[TensorBoard(log_dir='./log_dir')])待訓(xùn)練完成后,在終端中輸入:Tensorboard-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 經(jīng)內(nèi)鏡逆行胰膽管造影(ERCP)護(hù)理業(yè)務(wù)學(xué)習(xí)
- Unit 4 Plants around us C (說課稿)-2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 光學(xué)樹脂系列產(chǎn)品項目可行性研究報告寫作模板-拿地備案
- 信息技術(shù)七年級上冊第八課 動感溫馨感恩卡-圖文結(jié)合說課稿(小小導(dǎo)游本領(lǐng)大)
- 福建省龍巖市新羅區(qū)2024-2025學(xué)年二年級上學(xué)期期末數(shù)學(xué)試題參考答案
- 江蘇省宿遷市(2024年-2025年小學(xué)六年級語文)部編版階段練習(xí)(下學(xué)期)試卷及答案
- 貴州師范大學(xué)《急救臨床技能訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州黔南科技學(xué)院《幼兒教師發(fā)展專題》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年度快遞貨物車輛維護(hù)與保險合同3篇
- 貴州師范大學(xué)《經(jīng)濟(jì)數(shù)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 小班《火車開了》音樂欣賞課評課稿
- 倫理學(xué)與醫(yī)學(xué)倫理學(xué) (醫(yī)學(xué)倫理學(xué)課件)
- GB/T 6344-2008軟質(zhì)泡沫聚合材料拉伸強(qiáng)度和斷裂伸長率的測定
- GA/T 1740.1-2020旅游景區(qū)安全防范要求第1部分:山岳型
- 產(chǎn)后康復(fù)客戶健康評估表格
- 企業(yè)人員組織結(jié)構(gòu)圖
- 個人現(xiàn)實表現(xiàn)材料1500字德能勤績廉(通用6篇)
- 六年級上冊數(shù)學(xué)單元測試-5.圓 青島版 (含答案)
- (精心整理)高一語文期末模擬試題
- QC成果解決鋁合金模板混凝土氣泡、爛根難題
- 管線管廊布置設(shè)計規(guī)范
評論
0/150
提交評論