原文鏈接:http://tecdat.cn/?p=18149
無人駕駛汽車最早可以追溯到1989年。神經網絡已經存在很長時間了,那么近年來引發人工智能和深度學習熱潮的原因是什么呢?[1秒]答案部分在於摩爾定律以及硬件和計算能力的顯著提高。我們現在可以事半功倍。顧名思義,神經網絡的概念是受我們自己大腦神經元網絡的啟發。神經元是非常長的細胞,每個細胞都有稱為樹突的突起,分別從周圍的神經元接收和傳播電化學信號。結果,我們的腦細胞形成了靈活強大的通信網絡,這種類似於裝配線的分配過程支持復雜的認知能力,例如音樂播放和繪畫。
視頻:CNN(卷積神經網絡)模型以及R語言實現
神經網絡結構
神經網絡通常包含一個輸入層,一個或多個隱藏層以及一個輸出層。輸入層由p個預測變量或輸入單位/節點組成。不用說,通常最好將變量標准化。這些輸入單元可以連接到第一隱藏層中的一個或多個隱藏單元。與上一層完全連接的隱藏層稱為密集層。在圖中,兩個隱藏層都是密集的。
輸出層的計算預測
輸出層計算預測,其中的單元數由具體的問題確定。通常,二分類問題需要一個輸出單元,而具有k個類別的多類問題將需要 k個對應的輸出單元。前者可以簡單地使用S形函數直接計算概率,而后者通常需要softmax變換,從而將所有k個輸出單元中的所有值加起來為1,因此可以將其視為概率。無需進行分類預測。
權重
圖中顯示的每個箭頭都會傳遞與權重關聯的輸入。每個權重本質上是許多系數估計之一,該系數估計有助於在相應箭頭指向的節點中計算出回歸。這些是未知參數,必須使用優化過程由模型進行調整,以使損失函數最小化。訓練之前,所有權重均使用隨機值初始化。
優化和損失函數
訓練之前,我們需要做好兩件事一是擬合優度的度量,用於比較所有訓練觀測值的預測和已知標簽;二是計算梯度下降的優化方法,實質上是同時調整所有權重估計值,以提高擬合優度的方向。對於每種方法,我們分別具有損失函數和優化器。損失函數有很多類型,所有目的都是為了量化預測誤差,例如使用交叉熵。流行的隨機優化方法如Adam。
卷積神經網絡
卷積神經網絡是一種特殊類型的神經網絡,可以很好地用於圖像處理,並以上述原理為框架。名稱中的“卷積”歸因於通過濾鏡處理的圖像中像素的正方形方塊。結果,該模型可以在數學上捕獲關鍵的視覺提示。例如,鳥的喙可以在動物中高度區分鳥。在下面描述的示例中,卷積神經網絡可能會沿着一系列涉及卷積,池化和扁平化的變換鏈處理喙狀結構,最后,會看到相關的神經元被激活,理想情況下會預測鳥的概率是競爭類中最大的。
可以基於顏色強度將圖像表示為數值矩陣。單色圖像使用2D卷積層進行處理,而彩色圖像則需要3D卷積層,我們使用前者。
核(也稱為濾鏡)將像素的正方形塊卷積為后續卷積層中的標量,從上到下掃描圖像。
在整個過程中,核執行逐元素乘法,並將所有乘積求和為一個值,該值傳遞給后續的卷積層。
內核一次移動一個像素。這是內核用來進行卷積的滑動窗口的步長,逐步調整。較大的步長意味着更細,更小的卷積特征。
池化是從卷積層進行的采樣,可在較低維度上呈現主要特征,從而防止過度擬合並減輕計算需求。池化的兩種主要類型是平均池化和最大池化。提供一個核和一個步長,合並就相當於卷積,但取每幀的平均值或最大值。
扁平化顧名思義,扁平只是將最后的卷積層轉換為一維神經網絡層。它為實際的預測奠定了基礎。
R語言實現
當我們將CNN(卷積神經網絡)模型用於訓練多維類型的數據(例如圖像)時,它們非常有用。我們還可以實現CNN模型進行回歸數據分析。我們之前使用Python進行CNN模型回歸 ,在本視頻中,我們在R中實現相同的方法。
我們使用一維卷積函數來應用CNN模型。我們需要Keras R接口才能在R中使用Keras神經網絡API。如果開發環境中不可用,則需要先安裝。本教程涵蓋:
- 准備數據
- 定義和擬合模型
- 預測和可視化結果
- 源代碼
我們從加載本教程所需的庫開始。
-
library(keras)
-
library(caret)
准備
數據在本教程中,我們將波士頓住房數據集用作目標回歸數據。首先,我們將加載數據集並將其分為訓練和測試集。
-
set.seed(123)
-
boston = MASS::Boston
-
indexes = createDataPartition(boston$medv, p = .85, list = F)
-
-
train = boston[indexes,]
-
test = boston[-indexes,]
接下來,我們將訓練數據和測試數據的x輸入和y輸出部分分開,並將它們轉換為矩陣類型。您可能知道,“ medv”是波士頓住房數據集中的y數據輸出,它是其中的最后一列。其余列是x輸入數據。
檢查維度。
-
dim(xtrain)
-
[1] 432 13
-
-
dim(ytrain)
-
[1] 432 1
接下來,我們將通過添加另一維度來重新定義x輸入數據的形狀。
-
dim(xtrain)
-
[1] 432 13 1
-
-
dim(xtest)
-
[1] 74 13 1
在這里,我們可以提取keras模型的輸入維。
-
print(in_dim)
-
[1] 13 1
定義和擬合模型
我們定義Keras模型,添加一維卷積層。輸入形狀變為上面定義的(13,1)。我們添加Flatten和Dense層,並使用“ Adam”優化器對其進行編譯。
-
-
-
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
-
________________________________________________________________________
-
-
接下來,我們將使用訓練數據對模型進行擬合。
-
-
print(scores)
-
loss
-
24.20518

預測和可視化結果
現在,我們可以使用訓練的模型來預測測試數據。
predict(xtest)
我們將通過RMSE指標檢查預測的准確性。
-
cat("RMSE:", RMSE(ytest, ypred))
-
RMSE: 4.935908
最后,我們將在圖表中可視化結果檢查誤差。
-
x_axes = seq(1:length(ypred))
-
-
lines(x_axes, ypred, col = "red", type = "l", lwd = 2)
-
legend("topl
在本教程中,我們簡要學習了如何使用R中的keras CNN模型擬合和預測回歸數據。
最受歡迎的見解
1.r語言用神經網絡改進nelson-siegel模型擬合收益率曲線分析
3.python用遺傳算法-神經網絡-模糊邏輯控制算法對樂透分析
4.用於nlp的python:使用keras的多標簽文本lstm神經網絡分類