深度学习入门笔记(九):深度学习数据处理
歡迎關(guān)注WX公眾號:【程序員管小亮】
專欄——深度學(xué)習(xí)入門筆記
聲明
1)該文章整理自網(wǎng)上的大牛和機器學(xué)習(xí)專家無私奉獻的資料,具體引用的資料請看參考文獻。
2)本文僅供學(xué)術(shù)交流,非商用。所以每一部分具體的參考資料并沒有詳細對應(yīng)。如果某部分不小心侵犯了大家的利益,還望海涵,并聯(lián)系博主刪除。
3)博主才疏學(xué)淺,文中如有不當(dāng)之處,請各位指出,共同進步,謝謝。
4)此屬于第一版本,若有錯誤,還需繼續(xù)修正與增刪。還望大家多多指點。大家都共享一點點,一起為祖國科研的推進添磚加瓦。
文章目錄
- 歡迎關(guān)注WX公眾號:【程序員管小亮】
- 專欄——深度學(xué)習(xí)入門筆記
- 聲明
- 深度學(xué)習(xí)入門筆記(九):深度學(xué)習(xí)數(shù)據(jù)處理
- 1、訓(xùn)練集,驗證集,測試集
- 2、偏差,方差
- 3、機器學(xué)習(xí)基礎(chǔ)
- 補充
- 推薦閱讀
- 參考文章
深度學(xué)習(xí)入門筆記(九):深度學(xué)習(xí)數(shù)據(jù)處理
1、訓(xùn)練集,驗證集,測試集
在深度學(xué)習(xí)的實踐中,如何配置 訓(xùn)練、驗證 和 測試 數(shù)據(jù)集?比例是怎么樣的?哪一個數(shù)據(jù)集應(yīng)該更多一些?這個過程中能否做出正確決策,會在很大程度上決定我們能否創(chuàng)建高效的神經(jīng)網(wǎng)絡(luò)。訓(xùn)練神經(jīng)網(wǎng)絡(luò)時,需要做出很多決策,例如:
神經(jīng)網(wǎng)絡(luò)分多少層
每層含有多少個隱藏單元
學(xué)習(xí)速率是多少
各層采用哪些激活函數(shù)
除了上面說的這些超參數(shù)之外,能否創(chuàng)建一個高質(zhì)量的 訓(xùn)練集,驗證集 和 測試集 也有助于提高循環(huán)的效率。
這是個什么循環(huán)?我們在 深度學(xué)習(xí)入門筆記(七):深層神經(jīng)網(wǎng)絡(luò) 中說過這個循環(huán),是 Idea—Code—Experiment—Idea 這個大循環(huán),好的數(shù)據(jù)集可以提高這個過程的循環(huán)效率,從而加快實驗的進程,更快更好地得到最后的記過。
假設(shè)整個數(shù)據(jù)集用一個長方形表示,我們通常會將這些數(shù)據(jù)劃分成幾部分:一部分作為 訓(xùn)練集;一部分作為 簡單交叉驗證集,有時也稱之為 驗證集,一般都叫它 驗證集(dev set),其實都是同一個概念;最后一部分則作為 測試集。
接下來,我們開始對 訓(xùn)練集 執(zhí)行算法,通過 驗證集 選擇最好的模型,經(jīng)過充分驗證,選定最終模型,然后就可以在 測試集 上進行評估了,為了無偏評估算法的運行狀況,選用的測試集應(yīng)該是沒有參與過訓(xùn)練過程的!!!
在機器學(xué)習(xí)發(fā)展的小數(shù)據(jù)量時代,常見做法是 將所有數(shù)據(jù)三七分,就是人們常說的70%訓(xùn)練集,30%測試集。如果明確設(shè)置了 驗證集,也可以按照 60%訓(xùn)練集,20%驗證集和20%測試集 來劃分。這是這些年機器學(xué)習(xí)領(lǐng)域普遍認可的最好的實踐方法。
如果只有100條,1000條或者1萬條數(shù)據(jù),那么上述比例劃分是非常合理的。但是在大數(shù)據(jù)時代,現(xiàn)在的數(shù)據(jù)量可能是百萬級別,那么 驗證集 和 測試集 占數(shù)據(jù)總量的比例會趨向于變得更小。因為 驗證集 的目的就是驗證不同的算法,檢驗?zāi)姆N算法更有效,因此,驗證集 只要足夠大到能評估不同的算法,比如2個甚至10個不同算法,并迅速判斷出哪種算法更有效,不需要拿出20%的數(shù)據(jù)作為驗證集。
比如現(xiàn)在有100萬條數(shù)據(jù),那么取1萬條數(shù)據(jù)便足以進行評估即可,找出其中表現(xiàn)最好的1-2種算法。同樣地,根據(jù)最終選擇的分類器,測試集 的主要目的是正確評估分類器的性能,所以,如果擁有百萬數(shù)據(jù),我們只需要1000條數(shù)據(jù),便足以評估單個分類器,并且準(zhǔn)確評估該分類器的性能。
- 假設(shè)我們有100萬條數(shù)據(jù),其中1萬條作為 驗證集,1萬條作為 測試集,100萬里取1萬,比例是1%,即:訓(xùn)練集占98%,驗證集和測試集各占1%。
- 對于數(shù)據(jù)量過百萬的應(yīng)用,訓(xùn)練集可以占到99.5%,驗證和測試集各占0.25%,或者驗證集占0.4%,測試集占0.1%。
總結(jié)一下,在機器學(xué)習(xí)中,我們通常將樣本分成 訓(xùn)練集,驗證集 和 測試集 三部分,數(shù)據(jù)集規(guī)模相對較小,適用傳統(tǒng)的劃分比例,數(shù)據(jù)集規(guī)模較大的,驗證集 和 測試集 要小于數(shù)據(jù)總量的20%或10%,具體要怎么做?別著急,后面會給出如何劃分驗證集和測試集的具體指導(dǎo)。
現(xiàn)代深度學(xué)習(xí)的另一個趨勢是 越來越多的人在訓(xùn)練和測試集分布不匹配的情況下進行訓(xùn)練,假設(shè)你要構(gòu)建一個用戶可以上傳大量圖片的應(yīng)用程序,目的是找出并呈現(xiàn)所有貓咪圖片,可能你的用戶都是愛貓人士,訓(xùn)練集可能是從網(wǎng)上下載的貓咪圖片,而 驗證集 和 測試集 是用戶在這個應(yīng)用上上傳的貓的圖片,就是說,訓(xùn)練集 可能是從網(wǎng)絡(luò)上抓下來的圖片,而 驗證集 和 測試集 是用戶上傳的圖片。結(jié)果許多網(wǎng)頁上的貓咪圖片分辨率很高,很專業(yè),后期制作精良,而用戶上傳的照片可能是用手機隨意拍攝的,像素低,比較模糊,這兩類數(shù)據(jù)有所不同,針對這種情況,根據(jù)經(jīng)驗,建議大家要確保 驗證集 和 測試集 的數(shù)據(jù)來自同一分布,學(xué)術(shù)說法就是 獨立同分布(IID)。
定義:獨立同分布(iid,independently identically distribution) 在概率統(tǒng)計理論中,指隨機過程中,任何時刻的取值都為隨機變量,如果這些隨機變量服從同一分布,并且互相獨立,那么這些隨機變量是獨立同分布。
但由于深度學(xué)習(xí)算法需要 大量的訓(xùn)練數(shù)據(jù),為了獲取更大規(guī)模的訓(xùn)練數(shù)據(jù)集,我們可以采用當(dāng)前流行的各種創(chuàng)意策略,例如,網(wǎng)頁抓取,代價就是訓(xùn)練集數(shù)據(jù)與驗證集和測試集數(shù)據(jù)有可能不是來自同一分布。但只要遵循這個經(jīng)驗法則,你就會發(fā)現(xiàn)機器學(xué)習(xí)算法會變得更快。
最后一點,就算沒有測試集也不要緊,測試集的目的是對最終所選定的神經(jīng)網(wǎng)絡(luò)系統(tǒng)做出無偏估計,如果不需要無偏估計,也可以不設(shè)置測試集。所以如果只有 驗證集,沒有 測試集,我們要做的就是,在 訓(xùn)練集 上訓(xùn)練,嘗試不同的模型框架,在 驗證集 上評估這些模型,然后迭代并選出適用的模型。因為 驗證集 中已經(jīng)涵蓋測試集數(shù)據(jù),其不再提供無偏性能評估。當(dāng)然,如果你不需要無偏估計,那就再好不過了。
在機器學(xué)習(xí)中,如果只有一個 訓(xùn)練集 和一個 驗證集,而沒有獨立的測試集,遇到這種情況,訓(xùn)練集 還被人們稱為 訓(xùn)練集,而 驗證集 則被稱為 測試集,不過在實際應(yīng)用中,人們只是把 測試集 當(dāng)成 簡單交叉驗證集 使用,并沒有完全實現(xiàn)該術(shù)語的“驗證”功能,因為他們把 驗證集 數(shù)據(jù)過度擬合到了 測試集 中。
如果某團隊跟你說他們只設(shè)置了一個 訓(xùn)練集 和一個 測試集,你要小心了!!!要想他們是不是真的有 訓(xùn)練驗證集,因為他們把 驗證集 數(shù)據(jù)過度擬合到了 測試集 中,讓這些團隊改變叫法,改稱其為 訓(xùn)練驗證集,而不是 訓(xùn)練測試集,可能不太容易。即便 訓(xùn)練驗證集 在專業(yè)用詞上更準(zhǔn)確。實際上,如果你不需要無偏評估算法性能,那么這樣是可以的。
所以說,搭建 訓(xùn)練驗證集 和 測試集 能夠加速神經(jīng)網(wǎng)絡(luò)的集成,也可以更有效地衡量算法地 偏差 和 方差,從而幫助我們更高效地選擇合適方法來優(yōu)化算法。
有的同學(xué)還是不懂這個數(shù)據(jù)集都是什么意思,尤其是驗證集和測試集,來看一個例子:
- 訓(xùn)練集——課本;學(xué)生學(xué)習(xí)并根據(jù)課本里的內(nèi)容來掌握知識。
- 驗證集——作業(yè);通過學(xué)生完成作業(yè)的水平,可以知道學(xué)習(xí)質(zhì)量的好壞。
- 測試集——考試;通過學(xué)生考試的結(jié)果(考的題是平常都沒有見過的),來考察學(xué)生舉一反三的能力,也可以知道學(xué)習(xí)質(zhì)量的好壞。
例子不是特別嚴謹,只是提供一種理解的方式!
2、偏差,方差
如果你細心的話,就會注意到,幾乎所有機器學(xué)習(xí)從業(yè)人員都期望深刻理解 偏差 和 方差(我也是這樣的=-=),這兩個概念易學(xué)難精,即使你認為已經(jīng)理解了 偏差 和 方差 的基本概念,卻總有一些意想不到的新東西出現(xiàn)。關(guān)于深度學(xué)習(xí)的誤差問題,另一個趨勢是對 偏差 和 方差 的權(quán)衡研究甚淺,你可能聽說過這兩個概念,但深度學(xué)習(xí)的誤差很少權(quán)衡二者,我們總是分別考慮 偏差 和 方差,卻很少放在一起。
如上圖,假設(shè)這就是數(shù)據(jù)集,如果想要對這個數(shù)據(jù)集擬合一條直線,可能得到一個邏輯回歸擬合,但它并不能很好地擬合該數(shù)據(jù),這是 高偏差(high bias) 的情況,我們稱之為 欠擬合(underfitting)。
相反的如果我們擬合一個非常復(fù)雜的分類器,比如深度神經(jīng)網(wǎng)絡(luò)或含有隱藏單元的神經(jīng)網(wǎng)絡(luò),可能就非常適用于這個數(shù)據(jù)集,但是這看起來也不是一種很好的擬合方式,即 高方差(high variance) 的情況,我們稱之為 過擬合(overfitting)。
在兩者之間,可能還有一些像下面三個圖的中間圖這樣的,復(fù)雜程度適中,數(shù)據(jù)擬合適度的分類器,這個數(shù)據(jù)擬合看起來更加合理,我們稱之為 適度擬合(just right),是介于 過擬合 和 欠擬合 中間的一類。
在這樣一個只有 x1x_1x1? 和 x2x_2x2? 兩個特征的二維數(shù)據(jù)集中,我們可以繪制數(shù)據(jù),將 偏差 和 方差 可視化。在多維空間數(shù)據(jù)中,繪制數(shù)據(jù)和可視化分割邊界無法實現(xiàn),但我們可以通過幾個指標(biāo),來研究 偏差 和 方差。
還是沿用貓咪圖片分類這個例子(深度學(xué)習(xí)入門筆記(一):深度學(xué)習(xí)引言),左邊一張是貓咪圖片,右邊一張不是。理解 偏差 和 方差 的兩個關(guān)鍵數(shù)據(jù)是 訓(xùn)練集誤差(Train set error) 和 驗證集誤差(Dev set error),為了方便論證,假設(shè)我們可以辨別圖片中的小貓,用肉眼識別的結(jié)果幾乎是不會出錯的。
假定 訓(xùn)練集誤差 是1%,為了方便論證,假定 驗證集誤差 是11%,可以看出 訓(xùn)練集 設(shè)置得非常好,而 驗證集 設(shè)置相對較差,可能是 過度擬合 了 訓(xùn)練集,在某種程度上,驗證集 并沒有充分利用 交叉驗證集 的作用,像這種情況,我們稱之為 高方差。
通過查看 訓(xùn)練集誤差 和 驗證集誤差,我們便可以診斷算法是否具有 高方差。也就是說衡量 訓(xùn)練集 和 驗證集誤差 就可以得出不同結(jié)論。
假設(shè) 訓(xùn)練集誤差 是15%,我們把 訓(xùn)練集誤差 寫在首行,驗證集誤差 是16%。算法并沒有在 訓(xùn)練集 中得到很好訓(xùn)練,如果訓(xùn)練數(shù)據(jù)的擬合度不高,就是數(shù)據(jù) 欠擬合,就可以說這種算法 偏差比較高。相反,它對于 驗證集 產(chǎn)生的結(jié)果卻是合理的,驗證集 中的錯誤率只比訓(xùn)練集的多了1%,所以這種算法 偏差高,因為它甚至不能擬合訓(xùn)練集,這與下圖的最左邊的圖片相似。
再舉一個例子,訓(xùn)練集誤差 是15%,偏差相當(dāng)高,但是,驗證集 的評估結(jié)果更糟糕,錯誤率達到30%,在這種情況下,我會認為這種算法 偏差高,因為它在 訓(xùn)練集 上結(jié)果不理想,而且 方差也很高,這是 方差偏差都很糟糕 的情況,不要覺得 方差 好像是更高。。。
再看最后一個例子,訓(xùn)練集誤差 是0.5%,驗證集誤差 是1%,用戶看到這樣的結(jié)果會很開心,貓咪分類器只有1%的錯誤率,偏差和方差都很低。
這些分析都是基于假設(shè)預(yù)測的,假設(shè)人眼辨別的錯誤率接近0%,一般來說,最優(yōu)誤差 也被稱為 貝葉斯誤差,所以,最優(yōu)誤差 接近0%。但是如果 最優(yōu)誤差 或 貝葉斯誤差 非常高,比如時15%。再看看這個分類器(訓(xùn)練誤差15%,驗證誤差16%),15%的錯誤率對 訓(xùn)練集 來說也是非常合理的,偏差不高,方差也非常低。
小結(jié)一下:要看我們的最優(yōu)誤差是多少,才能判斷你的 偏差 和 方差 !!!
當(dāng)所有分類器都不適用時,如何分析 偏差 和 方差 呢?比如,圖片很模糊,即使是人眼,或者沒有系統(tǒng)可以準(zhǔn)確無誤地識別圖片,在這種情況下,最優(yōu)誤差 會更高,那么分析過程就要做些改變了。
以上分析的前提都是 假設(shè)基本誤差很小,訓(xùn)練集和驗證集數(shù)據(jù)來自相同分布,如果沒有這些假設(shè)作為前提,分析過程更加復(fù)雜,后面會討論這個問題的。
有一個疑問出現(xiàn)了,偏差 和 方差 都高是什么樣子呢?這種情況對于兩個衡量標(biāo)準(zhǔn)來說都是非常糟糕的。
之前講過,這樣的分類器,會產(chǎn)生 高偏差,偏差高 是因為它幾乎是一條線性分類器,并未擬合數(shù)據(jù),像這種接近線性的分類器,數(shù)據(jù)擬合度低。
但是如果稍微改變一下分類器,用紫色筆畫出,它會 過度擬合 部分數(shù)據(jù)。用紫色線畫出的分類器具有 高偏差 和 高方差:偏差高 是因為它幾乎是一條線性分類器,并未擬合數(shù)據(jù);方差高 是因為它靈活性太高以致擬合了這兩個錯誤樣本和中間這些活躍數(shù)據(jù)。
這看起來有些不自然,從兩個維度數(shù)據(jù)上看,怎么看都不太自然,但對于高維數(shù)據(jù),有些數(shù)據(jù)區(qū)域 偏差高,有些數(shù)據(jù)區(qū)域 方差高,所以看起來就不會那么牽強了。
總結(jié):擬合地好是最好的,但是過擬合是方差大,欠擬合是偏差大,還有一種可能是兩個差都大!!!
3、機器學(xué)習(xí)基礎(chǔ)
下圖就是在訓(xùn)練神經(jīng)網(wǎng)絡(luò)用到的基本方法:(嘗試這些方法,可能有用,可能沒用)
吳恩達老師手稿:
初始模型訓(xùn)練完成后,首先要知道算法的 偏差 高不高,如果 偏差較高,試著評估 訓(xùn)練集 或 訓(xùn)練數(shù)據(jù) 的性能。如果 偏差 的確很高,甚至無法擬合訓(xùn)練集,那么要做的就是選擇一個新的網(wǎng)絡(luò),比如含有更多隱藏層或者隱藏單元的網(wǎng)絡(luò),或者花費更多時間來訓(xùn)練網(wǎng)絡(luò),或者嘗試更先進的優(yōu)化算法,后面會講到。訓(xùn)練學(xué)習(xí)算法時,要不斷嘗試這些方法,直到解決掉 偏差 問題,這是 最低標(biāo)準(zhǔn),反復(fù)嘗試,直到可以擬合數(shù)據(jù)為止,至少能夠擬合訓(xùn)練集。當(dāng)然你也可以嘗試其他方法,可能有用,也可能沒用。
博主注:訓(xùn)練神經(jīng)網(wǎng)絡(luò)時,建議先盡量過擬合,再通過各種方法解決過擬合的問題,這樣的代價更小,成功的可能性更大。
如果網(wǎng)絡(luò)足夠大,通??梢院芎玫財M合 訓(xùn)練集,實在不行的話,只要你能擴大網(wǎng)絡(luò)規(guī)模,即使圖片很模糊,至少可以很好地擬合 訓(xùn)練集,或者 過擬合 訓(xùn)練集。一旦 偏差 降低到可以接受的數(shù)值,檢查一下 方差 有沒有問題,為了評估 方差,我們要查看 驗證集 的性能,從一個性能理想的 訓(xùn)練集 推斷出 驗證集 的性能是否也理想,如果 方差高,最好的解決辦法就是采用更多數(shù)據(jù),讓網(wǎng)絡(luò)見識到更多的數(shù)據(jù)類型,擁有更強的擬合泛化能力。如果你能做到這一點,會有一定的幫助,但有時候,無法獲得更多數(shù)據(jù),我們也可以嘗試通過 正則化 來減少 過擬合,這個下一個筆記會講。
有同學(xué)抱怨麻煩,沒法子,有時候我們不得不反復(fù)嘗試這些操作,但是,如果能找到更合適的神經(jīng)網(wǎng)絡(luò)框架,有時它可能會一箭雙雕,同時減少 方差 和 偏差。如何實現(xiàn)呢?想系統(tǒng)地說出做法很難,總之就是不斷重復(fù)嘗試,直到找到一個 低偏差,低方差 的框架,這時你就成功了。
有兩點需要特別注意:
第一點,高偏差 和 高方差 是兩種不同的情況,所以后續(xù)要嘗試的方法也可能完全不同,通常會用 訓(xùn)練驗證集 來診斷算法是否存在 偏差 或 方差 問題,然后根據(jù)結(jié)果選擇嘗試部分方法。舉個例子,如果算法存在 高偏差 問題,準(zhǔn)備更多訓(xùn)練數(shù)據(jù)其實也沒什么用處,至少這不是更有效的方法,所以一定要清楚存在的問題是 偏差 還是 方差,還是兩者都有問題,明確這一點有助于我們選擇出最有效的方法,不然就相當(dāng)于做無用功,瞎忙乎。
第二點,在機器學(xué)習(xí)的初期階段,關(guān)于所謂的 偏差方差權(quán)衡 的討論屢見不鮮,原因是能嘗試的方法有很多。可以增加 偏差,減少 方差,也可以減少 偏差,增加 方差,但是在深度學(xué)習(xí)的早期階段,沒有太多工具可以做到只減少 偏差 或 方差 卻不影響到另一方。然而當(dāng)前的深度學(xué)習(xí)和大數(shù)據(jù)時代,只要持續(xù)訓(xùn)練一個更大的網(wǎng)絡(luò),只要準(zhǔn)備了更多數(shù)據(jù),那么也并非只有這兩種情況,簡單情況下,只要 正則 適度,通常構(gòu)建一個更大的網(wǎng)絡(luò)便可以,在不影響 方差 的同時減少 偏差,而采用更多數(shù)據(jù)通??梢栽诓贿^多影響 偏差 的同時減少 方差。這兩步實際要做的工作是:訓(xùn)練網(wǎng)絡(luò),選擇網(wǎng)絡(luò)或者準(zhǔn)備更多數(shù)據(jù),現(xiàn)在有了一個可以做到在減少 偏差 或 方差 的同時,不對另一方產(chǎn)生過多不良影響的工具。這就是深度學(xué)習(xí)對監(jiān)督式學(xué)習(xí)大有裨益的一個重要原因,也是不用太過關(guān)注如何 平衡偏差和方差 的一個重要原因。
最終,我們會得到一個非常規(guī)范化的網(wǎng)絡(luò)!!!
補充
正則化,是一種非常實用的減少 方差 的方法,正則化 時會出現(xiàn) 偏差方差權(quán)衡 問題,偏差 可能略有增加,但是如果網(wǎng)絡(luò)足夠大的話,增幅通常不會太高,從而完美地解決 方差大 的問題。
推薦閱讀
- 深度學(xué)習(xí)入門筆記(一):深度學(xué)習(xí)引言
- 深度學(xué)習(xí)入門筆記(二):神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
- 深度學(xué)習(xí)入門筆記(三):求導(dǎo)和計算圖
- 深度學(xué)習(xí)入門筆記(四):向量化
- 深度學(xué)習(xí)入門筆記(五):神經(jīng)網(wǎng)絡(luò)的編程基礎(chǔ)
- 深度學(xué)習(xí)入門筆記(六):淺層神經(jīng)網(wǎng)絡(luò)
- 深度學(xué)習(xí)入門筆記(七):深層神經(jīng)網(wǎng)絡(luò)
- 深度學(xué)習(xí)入門筆記(八):深層網(wǎng)絡(luò)的原理
- 深度學(xué)習(xí)入門筆記(九):深度學(xué)習(xí)數(shù)據(jù)處理
- 深度學(xué)習(xí)入門筆記(十):正則化
- 深度學(xué)習(xí)入門筆記(十一):權(quán)重初始化
- 深度學(xué)習(xí)入門筆記(十二):深度學(xué)習(xí)數(shù)據(jù)讀取
- 深度學(xué)習(xí)入門筆記(十三):批歸一化(Batch Normalization)
- 深度學(xué)習(xí)入門筆記(十四):Softmax
- 深度學(xué)習(xí)入門筆記(十五):深度學(xué)習(xí)框架(TensorFlow和Pytorch之爭)
- 深度學(xué)習(xí)入門筆記(十六):計算機視覺之邊緣檢測
- 深度學(xué)習(xí)入門筆記(十七):深度學(xué)習(xí)的極限在哪?
- 深度學(xué)習(xí)入門筆記(十八):卷積神經(jīng)網(wǎng)絡(luò)(一)
- 深度學(xué)習(xí)入門筆記(十九):卷積神經(jīng)網(wǎng)絡(luò)(二)
- 深度學(xué)習(xí)入門筆記(二十):經(jīng)典神經(jīng)網(wǎng)絡(luò)(LeNet-5、AlexNet和VGGNet)
參考文章
- 吳恩達——《神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)》視頻課程
總結(jié)
以上是生活随笔為你收集整理的深度学习入门笔记(九):深度学习数据处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笔记本电脑如何用c语言开无线网卡,笔记本
- 下一篇: 梳理百年深度学习发展史-七月在线机器学习