【視頻】CNN(卷積神經(jīng)網(wǎng)絡(luò))模型以及R語言實現(xiàn)
原文鏈接:http://tecdat.cn/?p=18149
原文出處:拓端數(shù)據(jù)部落公眾號
?
無人駕駛汽車最早可以追溯到1989年。神經(jīng)網(wǎng)絡(luò)已經(jīng)存在很長時間了,那么近年來引發(fā)人工智能和深度學(xué)習(xí)熱潮的原因是什么呢?[1秒]答案部分在于摩爾定律以及硬件和計算能力的顯著提高。我們現(xiàn)在可以事半功倍。顧名思義,神經(jīng)網(wǎng)絡(luò)的概念是受我們自己大腦神經(jīng)元網(wǎng)絡(luò)的啟發(fā)。神經(jīng)元是非常長的細(xì)胞,每個細(xì)胞都有稱為樹突的突起,分別從周圍的神經(jīng)元接收和傳播電化學(xué)信號。結(jié)果,我們的腦細(xì)胞形成了靈活強(qiáng)大的通信網(wǎng)絡(luò),這種類似于裝配線的分配過程支持復(fù)雜的認(rèn)知能力,例如音樂播放和繪畫。
視頻:CNN(卷積神經(jīng)網(wǎng)絡(luò))模型以及R語言實現(xiàn)
?
神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
神經(jīng)網(wǎng)絡(luò)通常包含一個輸入層,一個或多個隱藏層以及一個輸出層。輸入層由p個預(yù)測變量或輸入單位/節(jié)點組成。不用說,通常最好將變量標(biāo)準(zhǔn)化。這些輸入單元可以連接到第一隱藏層中的一個或多個隱藏單元。與上一層完全連接的隱藏層稱為密集層。在圖中,兩個隱藏層都是密集的。

輸出層的計算預(yù)測
輸出層計算預(yù)測,其中的單元數(shù)由具體的問題確定。通常,二分類問題需要一個輸出單元,而具有k個類別的多類問題將需要 k個對應(yīng)的輸出單元。前者可以簡單地使用S形函數(shù)直接計算概率,而后者通常需要softmax變換,從而將所有k個輸出單元中的所有值加起來為1,因此可以將其視為概率。無需進(jìn)行分類預(yù)測。
權(quán)重
圖中顯示的每個箭頭都會傳遞與權(quán)重關(guān)聯(lián)的輸入。每個權(quán)重本質(zhì)上是許多系數(shù)估計之一,該系數(shù)估計有助于在相應(yīng)箭頭指向的節(jié)點中計算出回歸

。這些是未知參數(shù),必須使用優(yōu)化過程由模型進(jìn)行調(diào)整,以使損失函數(shù)最小化。訓(xùn)練之前,所有權(quán)重均使用隨機(jī)值初始化。
優(yōu)化和損失函數(shù)?
訓(xùn)練之前,我們需要做好兩件事一是擬合優(yōu)度的度量,用于比較所有訓(xùn)練觀測值的預(yù)測和已知標(biāo)簽;二是計算梯度下降的優(yōu)化方法,實質(zhì)上是同時調(diào)整所有權(quán)重估計值,以提高擬合優(yōu)度的方向。對于每種方法,我們分別具有損失函數(shù)和優(yōu)化器。損失函數(shù)有很多類型,所有目的都是為了量化預(yù)測誤差,例如使用交叉熵

。流行的隨機(jī)優(yōu)化方法如Adam。?
卷積神經(jīng)網(wǎng)絡(luò)?
卷積神經(jīng)網(wǎng)絡(luò)是一種特殊類型的神經(jīng)網(wǎng)絡(luò),可以很好地用于圖像處理,并以上述原理為框架。名稱中的“卷積”歸因于通過濾鏡處理的圖像中像素的正方形方塊。結(jié)果,該模型可以在數(shù)學(xué)上捕獲關(guān)鍵的視覺提示。例如,鳥的喙可以在動物中高度區(qū)分鳥。在下面描述的示例中,卷積神經(jīng)網(wǎng)絡(luò)可能會沿著一系列涉及卷積,池化和扁平化的變換鏈處理喙?fàn)罱Y(jié)構(gòu),最后,會看到相關(guān)的神經(jīng)元被激活,理想情況下會預(yù)測鳥的概率是競爭類中最大的。?

可以基于顏色強(qiáng)度將圖像表示為數(shù)值矩陣。單色圖像使用2D卷積層進(jìn)行處理,而彩色圖像則需要3D卷積層,我們使用前者。?
核(也稱為濾鏡)將像素的正方形塊卷積為后續(xù)卷積層中的標(biāo)量,從上到下掃描圖像。?
在整個過程中,核執(zhí)行逐元素乘法,并將所有乘積求和為一個值,該值傳遞給后續(xù)的卷積層。
內(nèi)核一次移動一個像素。這是內(nèi)核用來進(jìn)行卷積的滑動窗口的步長,逐步調(diào)整。較大的步長意味著更細(xì),更小的卷積特征。?
池化是從卷積層進(jìn)行的采樣,可在較低維度上呈現(xiàn)主要特征,從而防止過度擬合并減輕計算需求。池化的兩種主要類型是平均池化和最大池化。提供一個核和一個步長,合并就相當(dāng)于卷積,但取每幀的平均值或最大值。?
扁平化顧名思義,扁平只是將最后的卷積層轉(zhuǎn)換為一維神經(jīng)網(wǎng)絡(luò)層。它為實際的預(yù)測奠定了基礎(chǔ)。?
R語言實現(xiàn)
當(dāng)我們將CNN(卷積神經(jīng)網(wǎng)絡(luò))模型用于訓(xùn)練多維類型的數(shù)據(jù)(例如圖像)時,它們非常有用。我們還可以實現(xiàn)CNN模型進(jìn)行回歸數(shù)據(jù)分析。我們之前使用Python進(jìn)行CNN模型回歸?,在本視頻中,我們在R中實現(xiàn)相同的方法。
我們使用一維卷積函數(shù)來應(yīng)用CNN模型。我們需要Keras R接口才能在R中使用Keras神經(jīng)網(wǎng)絡(luò)API。如果開發(fā)環(huán)境中不可用,則需要先安裝。本教程涵蓋:
準(zhǔn)備數(shù)據(jù)
定義和擬合模型
預(yù)測和可視化結(jié)果
源代碼
我們從加載本教程所需的庫開始。
?
library(keras)
library(caret)
準(zhǔn)備
數(shù)據(jù)在本教程中,我們將波士頓住房數(shù)據(jù)集用作目標(biāo)回歸數(shù)據(jù)。首先,我們將加載數(shù)據(jù)集并將其分為訓(xùn)練和測試集。
?
set.seed(123)
boston = MASS::Boston
indexes = createDataPartition(boston$medv, p = .85, list = F)
train = boston[indexes,]
test = boston[-indexes,]
接下來,我們將訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)的x輸入和y輸出部分分開,并將它們轉(zhuǎn)換為矩陣類型。您可能知道,“ medv”是波士頓住房數(shù)據(jù)集中的y數(shù)據(jù)輸出,它是其中的最后一列。其余列是x輸入數(shù)據(jù)。
檢查維度。
?
dim(xtrain)
[1] 432 ?13
dim(ytrain)
[1] 432 ? 1
接下來,我們將通過添加另一維度來重新定義x輸入數(shù)據(jù)的形狀。
?
dim(xtrain)
[1] 432 ?13 ? 1
dim(xtest)
[1] 74 13 ?1
在這里,我們可以提取keras模型的輸入維。
?
print(in_dim)
[1] 13 ?1
定義和擬合模型
我們定義Keras模型,添加一維卷積層。輸入形狀變?yōu)樯厦娑x的(13,1)。我們添加Flatten和Dense層,并使用“ Adam”優(yōu)化器對其進(jìn)行編譯。
?
model %>% summary()
________________________________________________________________________
Layer (type) ? ? ? ? ? ? ? ? ? ?Output Shape ? ? ? ? ? ? ? ? ?Param #
========================================================================
conv1d_2 (Conv1D) ? ? ? ? ? ? ? (None, 12, 64) ? ? ? ? ? ? ? ?192
________________________________________________________________________
flatten_2 (Flatten) ? ? ? ? ? ? (None, 768) ? ? ? ? ? ? ? ? ? 0
________________________________________________________________________
dense_3 (Dense) ? ? ? ? ? ? ? ? (None, 32) ? ? ? ? ? ? ? ? ? ?24608
________________________________________________________________________
dense_4 (Dense) ? ? ? ? ? ? ? ? (None, 1) ? ? ? ? ? ? ? ? ? ? 33
========================================================================
Total params: 24,833
Trainable params: 24,833
Non-trainable params: 0
________________________________________________________________________
接下來,我們將使用訓(xùn)練數(shù)據(jù)對模型進(jìn)行擬合。
?
print(scores)
loss
24.20518

預(yù)測和可視化結(jié)果
現(xiàn)在,我們可以使用訓(xùn)練的模型來預(yù)測測試數(shù)據(jù)。
predict(xtest)
我們將通過RMSE指標(biāo)檢查預(yù)測的準(zhǔn)確性。
?
cat("RMSE:", RMSE(ytest, ypred))
RMSE: 4.935908
最后,我們將在圖表中可視化結(jié)果檢查誤差。
?
x_axes = seq(1:length(ypred))
lines(x_axes, ypred, col = "red", type = "l", lwd = 2)
legend("topl

??在本教程中,我們簡要學(xué)習(xí)了如何使用R中的keras CNN模型擬合和預(yù)測回歸數(shù)據(jù)。

最受歡迎的見解
1.r語言用神經(jīng)網(wǎng)絡(luò)改進(jìn)nelson-siegel模型擬合收益率曲線分析
2.r語言實現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測和結(jié)果可視化
3.python用遺傳算法-神經(jīng)網(wǎng)絡(luò)-模糊邏輯控制算法對樂透分析
4.用于nlp的python:使用keras的多標(biāo)簽文本lstm神經(jīng)網(wǎng)絡(luò)分類
5.用r語言實現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測股票實例
6.R語言基于Keras的小數(shù)據(jù)集深度學(xué)習(xí)圖像分類
7.用于NLP的seq2seq模型實例用Keras實現(xiàn)神經(jīng)機(jī)器翻譯
8.python中基于網(wǎng)格搜索算法優(yōu)化的深度學(xué)習(xí)模型分析糖
9.matlab使用貝葉斯優(yōu)化的深度學(xué)習(xí)