本章包括:
- 神經(jīng)網(wǎng)絡(luò)的核心組件
- 對(duì)Keras的介紹
- 設(shè)置深度學(xué)習(xí)工作站
- 使用神經(jīng)網(wǎng)絡(luò)解決基本分類和回歸問(wèn)題
一、神經(jīng)網(wǎng)絡(luò)的剖析
??訓(xùn)練神經(jīng)網(wǎng)絡(luò)圍繞以下對(duì)象:
- 圖層,組合成網(wǎng)絡(luò)(或模型)。層是數(shù)據(jù)處理模塊,其將一個(gè)或多個(gè)張量作為輸入并且輸出一個(gè)或多個(gè)張量。存儲(chǔ)在形狀(樣本,特征)的2D張量中的簡(jiǎn)單矢量數(shù)據(jù)通常由密集連接的層處理,也稱為完全連接或密集層(Keras中的密集類)。存儲(chǔ)在形狀(樣本,時(shí)間步長(zhǎng),特征)的3D張量中的序列數(shù)據(jù)通常由諸如LSTM層的循環(huán)層處理。 存儲(chǔ)在4D張量中的圖像數(shù)據(jù)通常由2D卷積層(Conv2D)處理。
- 輸入數(shù)據(jù)和相應(yīng)的目標(biāo) 常見的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu):Two-branch、networks、 Multihead networks、 Inception blocks。通過(guò)選擇網(wǎng)絡(luò)拓?fù)洌梢詫⒖赡苄钥臻g(假設(shè)空間)約束到一系列特定的張量,將輸入數(shù)據(jù)映射到輸出數(shù)據(jù)。 接下來(lái)將要搜索的是這些張量操作中涉及的權(quán)重張量的一組很好的值。
- 損失函數(shù),定義用于學(xué)習(xí)的反饋信號(hào)。使其最小化。
-
優(yōu)化器,決定學(xué)習(xí)的進(jìn)度。
二、 Keras
??目前,三個(gè)現(xiàn)有的后端實(shí)現(xiàn)是TensorFlow后端,Theano后端和Microsoft Cognitive Toolkit(CNTK)后端。使用Keras編寫的任何代碼都可以使用任何這些后端運(yùn)行,而無(wú)需更改代碼中的任何內(nèi)容。
??定義模型有兩種方法:使用Sequential類(僅用于線性堆棧的層,這是迄今為止最常見的網(wǎng)絡(luò)架構(gòu))或功能API(用于層的有向非循環(huán)圖,它允許您構(gòu)建完全任意的體系結(jié)構(gòu))。
三、建立深度學(xué)習(xí)工作站—NVIDIA GPU。
四、電影評(píng)論分類:二分分類示例
查看GitHub源碼
??學(xué)習(xí)根據(jù)評(píng)論的文本內(nèi)容將電影評(píng)論分類為正面或負(fù)面。
??使用IMDB數(shù)據(jù)集:來(lái)自Internet電影數(shù)據(jù)庫(kù)的一組50,000個(gè)高度極化的評(píng)論。 他們分為25,000條培訓(xùn)評(píng)論和25,000條測(cè)試評(píng)論,每組評(píng)估50%為負(fù),50%為正面評(píng)價(jià)。
1. IMDB數(shù)據(jù)集
??1)Loading the IMDB dataset
2、準(zhǔn)備數(shù)據(jù)
??1)Encoding the integer sequences into a binary matrix
??因?yàn)闊o(wú)法將整數(shù)列表提供給神經(jīng)網(wǎng)絡(luò),將列表轉(zhuǎn)換為張量的兩種方法:
- 填充列表,使它們都具有相同的長(zhǎng)度,將它們轉(zhuǎn)換為整數(shù)張形狀(samples,word_indices),然后將網(wǎng)絡(luò)中的第一層用作處理此類整數(shù)張量的層(嵌入層);
- 對(duì)您的列表進(jìn)行One-hot encode,將其轉(zhuǎn)換為0和1的向量。這里使用的是這個(gè)。將整數(shù)序列編碼為二進(jìn)制矩陣。
3、構(gòu)建網(wǎng)絡(luò)
??輸入數(shù)據(jù)是向量,標(biāo)簽是標(biāo)量(1和0):這是將遇到的最簡(jiǎn)單的設(shè)置。Dense(16,activation=‘relu’),傳遞給每個(gè)Dense層(16)的參數(shù)是該層的隱藏單元的數(shù)量。 隱藏單元是圖層的表示空間中的維度。
??關(guān)于這樣一堆Dense圖層,有兩個(gè)關(guān)鍵的架構(gòu)決策:1)要使用多少層;2)每層選擇多少個(gè)隱藏單位;這里使用了兩個(gè)中間層,每個(gè)層有16個(gè)隱藏單元,第三層將輸出關(guān)于當(dāng)前評(píng)論情緒的標(biāo)量預(yù)測(cè)。中間層將使用relu作為其激活功能,最后一層將使用sigmoid激活以輸出可執(zhí)行性(得分在0和1之間,越靠近1越積極)
??1) The model definition
??2) Compiling the model
??3) Configuring the optimizer
??4) Using custom losses and metrics
4、驗(yàn)證方法
??1)Setting aside a validation set
??2)Training your model
??3)Plotting the training and validation loss
??4)Plotting the training and validation accuracy
??5)Retraining a model from scratch
5、使用經(jīng)過(guò)訓(xùn)練的網(wǎng)絡(luò)生成對(duì)新數(shù)據(jù)的預(yù)測(cè)
6、進(jìn)一步實(shí)驗(yàn)
7、總結(jié)
- 通常需要對(duì)原始數(shù)據(jù)進(jìn)行相當(dāng)多的預(yù)處理,以便能夠?qū)⑵渥鳛閺埩總魉偷缴窠?jīng)網(wǎng)絡(luò)中。單詞序列可以編碼為二進(jìn)制向量,但也有其他編碼選項(xiàng)。
- 具有relu激活的密集層堆棧可以解決各種問(wèn)題(包括情感分類),可能經(jīng)常使用。
- 在二分分類問(wèn)題(兩個(gè)輸出類)中,網(wǎng)絡(luò)應(yīng)該以一個(gè)單元和一個(gè)sigmoid激活的Dense層結(jié)束:網(wǎng)絡(luò)的輸出應(yīng)該是0到1之間的標(biāo)量,編碼概率。
- 在二分分類問(wèn)題上使用這樣的標(biāo)量sigmoid輸出,應(yīng)該使用的損失函數(shù)是binary_crossentropy。
- 無(wú)論遇到什么問(wèn)題,rmsprop優(yōu)化器通常都是一個(gè)不錯(cuò)的選擇。
- 隨著模型的訓(xùn)練數(shù)據(jù)越來(lái)越好,神經(jīng)網(wǎng)絡(luò)最終開始過(guò)度擬合,并最終獲得越來(lái)越糟糕的數(shù)據(jù),這些數(shù)據(jù)是模型以前從未見過(guò)的。
-
務(wù)必始終監(jiān)控訓(xùn)練集之外的數(shù)據(jù)的性能。
運(yùn)行結(jié)果:
五、新聞專線分類:多類分類示例
查看GitHub源碼
這是一個(gè)single-label, multiclass classification的例子
1、 Reuters數(shù)據(jù)集
??Reuters數(shù)據(jù)集是一個(gè)簡(jiǎn)單,廣泛使用的文本分類數(shù)據(jù)集。 有46個(gè)不同的主題; 某些主題比其他主題更具代表性,但每個(gè)主題在訓(xùn)練集中至少有10個(gè)示例。
??1) Loading the Reuters dataset
??2) Decoding newswires back to text
2、 準(zhǔn)備數(shù)據(jù)
??1) Encoding the data
??要對(duì)標(biāo)簽進(jìn)行矢量化,有兩種方法:可以將標(biāo)簽列表轉(zhuǎn)換為整數(shù)張量,也可以使用one-hot encoding(也叫做分類編碼,經(jīng)常使用)。除此外,在Keras中有一種內(nèi)置的方法。(from keras.utils.np_utils import to_categorical)
3、 構(gòu)建網(wǎng)絡(luò)
??1) Model definition
??2) Compiling the model
4、 驗(yàn)證方法
??1) Setting aside a validation set
??2) Training the model
??3) Plotting the training and validation loss
??4) Plotting the training and validation accuracy
??5) Retraining a model from scratch
5、 生成對(duì)新數(shù)據(jù)的預(yù)測(cè)
??1) Generating predictions for new data
6、 處理標(biāo)簽和損失的不同方式
??處理標(biāo)簽和損失的不同方式,我們之前提到過(guò),編碼標(biāo)簽的另一種方法是將它們轉(zhuǎn)換為整數(shù)張量,這種方法唯一會(huì)改變的是損失函數(shù)的選擇,從頭開始重新訓(xùn)練模型中使用的損失函數(shù)是ategorical_crossentropy,期望標(biāo)簽遵循分類編碼。但是對(duì)于整數(shù)標(biāo)簽,應(yīng)該使用sparse_categorical_crossentropy。
7、 具有足夠大的中間層的重要性
??1) 一個(gè)具有信息瓶頸的模型的例子,以4維為例
8、 進(jìn)一步實(shí)驗(yàn)
??1)嘗試使用更大或更小的層:32個(gè)單位,128個(gè)單位,依此類推。
??2)嘗試使用單個(gè)隱藏層或三個(gè)隱藏層。
9、總結(jié)
- 如果嘗試在N個(gè)類別中對(duì)數(shù)據(jù)點(diǎn)進(jìn)行分類,則網(wǎng)絡(luò)應(yīng)以大小為N的Dense層結(jié)束。
- 在單標(biāo)簽,多類別分類問(wèn)題中,網(wǎng)絡(luò)應(yīng)以softmax激活結(jié)束,以便在N個(gè)輸出類別上輸出概率分布。
- Categorical crossentropy幾乎總是我們應(yīng)該用于此類問(wèn)題的損失函數(shù)。它最小化了網(wǎng)絡(luò)輸出的概率分布與目標(biāo)的真實(shí)分布之間的距離。
- 在多類分類中有兩種處理標(biāo)簽的方法:a) 通過(guò)分類編碼(也稱為單熱編碼)對(duì)標(biāo)簽進(jìn)行編碼,并使用categorical_crossentropy作為丟失函數(shù); b) 將標(biāo)簽編碼為整數(shù)并使用arse_categorical_crossentropy損失函數(shù)。
-
如果需要將數(shù)據(jù)分類為大量類別,則應(yīng)避免由于中間層太小而在網(wǎng)絡(luò)中造成信息瓶頸。
運(yùn)行結(jié)果:
顯示loss 和 accuracy 曲線:
顯示準(zhǔn)確度和與random baseline的對(duì)比:
六、預(yù)測(cè)房?jī)r(jià):一個(gè)回歸的例子
查看GitHub源碼
??前兩個(gè)示例被認(rèn)為是分類問(wèn)題,其目標(biāo)是預(yù)測(cè)輸入數(shù)據(jù)點(diǎn)的單個(gè)離散標(biāo)簽。 另一種常見類型的機(jī)器學(xué)習(xí)問(wèn)題是回歸,它包括預(yù)測(cè)連續(xù)值而不是離散標(biāo)簽。
??注意:不要混淆回歸和算法邏輯回歸。 邏輯回歸不是回歸算法 - 它是一種分類算法。
1、 波士頓住房?jī)r(jià)格數(shù)據(jù)集–Loading the Boston housing dataset
??本次采用的數(shù)據(jù)集具有相對(duì)較少的數(shù)據(jù):僅506,在404個(gè)訓(xùn)練樣本和102個(gè)測(cè)試樣本之間分配。 輸入數(shù)據(jù)中的每個(gè)功能(例如,犯罪率)都有不同的比例。目標(biāo)是自住房屋的中位數(shù),價(jià)值數(shù)千美元
2、 準(zhǔn)備數(shù)據(jù)—Normalizing the data
??將神經(jīng)網(wǎng)絡(luò)輸入所有采用不同范圍的值都是有問(wèn)題的,處理此類數(shù)據(jù)的一種廣泛的最佳實(shí)踐是進(jìn)行特征標(biāo)準(zhǔn)化:對(duì)于輸入數(shù)據(jù)中的每個(gè)特征(輸入數(shù)據(jù)矩陣中的一列),減去feature的平均值并除以標(biāo)準(zhǔn)偏差,以便該要素以0為中心并具有單位標(biāo)準(zhǔn)差。 這很容易在Numpy中完成。
??注意,使用訓(xùn)練數(shù)據(jù)計(jì)算用于歸一化測(cè)試數(shù)據(jù)的量。 不應(yīng)該在工作流程中使用在測(cè)試數(shù)據(jù)上計(jì)算的任何數(shù)量,即使對(duì)于像數(shù)據(jù)規(guī)范化這樣簡(jiǎn)單的事情也是如此。
3、 構(gòu)建網(wǎng)絡(luò)—Model definition
??擁有的訓(xùn)練數(shù)據(jù)越少,過(guò)度擬合就越差,使用小型網(wǎng)絡(luò)是緩解過(guò)度擬合的一種方法。
??網(wǎng)絡(luò)以單個(gè)單元結(jié)束而不激活(它將是線性層)。 這是標(biāo)量回歸的典型設(shè)置(嘗試預(yù)測(cè)單個(gè)連續(xù)值的回歸)。應(yīng)用激活函數(shù)會(huì)限制輸出可以采用的范圍, 例如,如果將sigmoid激活函數(shù)應(yīng)用于最后一層,網(wǎng)絡(luò)只能學(xué)習(xí)預(yù)測(cè)0到1之間的值。這里,因?yàn)樽詈笠粚邮羌兙€性的,所以網(wǎng)絡(luò)可以自由地學(xué)習(xí)預(yù)測(cè)任何范圍內(nèi)的值。
??對(duì)于回歸問(wèn)題,廣泛使用的損失函數(shù):mse loss函數(shù) - 均方誤差編譯網(wǎng)絡(luò),即預(yù)測(cè)和目標(biāo)之間差異的平方。
??在訓(xùn)練期間監(jiān)控新指標(biāo):平均絕對(duì)誤差(MAE)。 它是預(yù)測(cè)和目標(biāo)之間差異的絕對(duì)值。 例如,此問(wèn)題的MAE為0.5意味著您的預(yù)測(cè)平均減少500美元。
4、 使用K-fold驗(yàn)證來(lái)驗(yàn)證我們的方法
??1) K-fold validation
??它包括將可用數(shù)據(jù)拆分為K個(gè)分區(qū)(通常為K = 4或5),實(shí)例化K個(gè)相同模型,并在評(píng)估剩余分區(qū)時(shí)對(duì)K-1分區(qū)進(jìn)行訓(xùn)練。所用模型的驗(yàn)證分?jǐn)?shù)是獲得的K驗(yàn)證分?jǐn)?shù)的平均值。
??2) Saving the validation logs at each fold
??3) Building the history of successive mean K-fold validation scores
??4) Plotting validation scores
??5) Plotting validation scores, excluding the first 10 data points
??6) Training the final model
5、總結(jié)
- 使用與我們用于分類的不同的損失函數(shù)進(jìn)行回歸。 均方誤差(MSE)是通常用于回歸的損失函數(shù)。
- 用于回歸的評(píng)估指標(biāo)與用于分類的評(píng)估指標(biāo)不同; 自然地,準(zhǔn)確性的概念不適用于回歸。 常見的回歸度量是平均絕對(duì)誤差(MAE)。
- 當(dāng)輸入數(shù)據(jù)中的要素具有不同范圍的值時(shí),應(yīng)將每個(gè)要素作為預(yù)處理步驟單獨(dú)進(jìn)行縮放。
- 當(dāng)數(shù)據(jù)很少時(shí),使用K-fold驗(yàn)證是可靠評(píng)估模型的好方法。
- 當(dāng)可用的訓(xùn)練數(shù)據(jù)很少時(shí),最好使用一個(gè)隱藏層較少的小型網(wǎng)絡(luò)(通常只有一個(gè)或兩個(gè)),以避免嚴(yán)重的過(guò)度擬合。
??運(yùn)行結(jié)果:
??K-fold validation:
??繪制驗(yàn)證分?jǐn)?shù):
??繪制排除前10個(gè)數(shù)據(jù)點(diǎn)的驗(yàn)證分?jǐn)?shù) :
??訓(xùn)練最終模型,結(jié)果:
??我們?nèi)匀黄x約$ 2,678
本章總結(jié)
- 目前為止,可以處理矢量數(shù)據(jù)中最常見的機(jī)器學(xué)習(xí)任務(wù):二分分類,多類分類和標(biāo)量回歸。
- 通常需要在將原始數(shù)據(jù)輸入神經(jīng)網(wǎng)絡(luò)之前對(duì)其進(jìn)行預(yù)處理。
- 當(dāng)數(shù)據(jù)具有不同范圍的要素時(shí),要在預(yù)處理過(guò)程中單獨(dú)縮放每個(gè)要素。
- 隨著訓(xùn)練的進(jìn)行,神經(jīng)網(wǎng)絡(luò)最終開始過(guò)度擬合并在前所未見的數(shù)據(jù)上獲得更差的結(jié)果。
- 如果沒(méi)有太多的訓(xùn)練數(shù)據(jù),使用只有一個(gè)或兩個(gè)隱藏層的小型網(wǎng)絡(luò),避免嚴(yán)重過(guò)度擬合。
- 如果數(shù)據(jù)分為多個(gè)類別,如果使中間層太小,可能會(huì)導(dǎo)致信息瓶頸。
- 回歸使用不同的損失函數(shù)和不同的評(píng)估指標(biāo)而不是分類。
- 當(dāng)處理少量數(shù)據(jù)時(shí),K-fold驗(yàn)證可以可靠地評(píng)估模型。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

