python用TensorFlow 2二維卷積神經(jīng)網(wǎng)絡CNN對圖像物體識別混淆矩陣評估|附代碼數(shù)據(jù)
原文鏈接:http://tecdat.cn/?p=26230?
原文出處:拓端數(shù)據(jù)部落公眾號
最近我們被客戶要求撰寫關于卷積神經(jīng)網(wǎng)絡CNN的研究報告,包括一些圖形和統(tǒng)計輸出。
什么是CNN
本文演示了如何訓練一個簡單的卷積神經(jīng)網(wǎng)絡 (CNN) 來對 圖像進行分類。
Convolutional?Neural?Networks
?(ConvNets 或 CNNs)是一類神經(jīng)網(wǎng)絡,已被證明在圖像識別和分類等領域非常有效。與傳統(tǒng)的多層感知器架構不同,它使用兩個稱為?convolution
?和?pooling
?的操作將圖像簡化為其基本特征,并使用這些特征來理解和分類圖像。
CNN重要術語
卷積層
卷積是從輸入圖像中提取特征的第一層。卷積通過使用輸入數(shù)據(jù)的小方塊學習圖像特征來保留像素之間的關系。這是一個數(shù)學運算,需要兩個輸入,例如?image matrix
?和?filter
?或?kernel
。然后圖像矩陣的卷積乘以過濾器矩陣,稱為?Feature?Map
。
使用不同濾波器對圖像進行卷積可以通過應用濾波器來執(zhí)行邊緣檢測、模糊和銳化等操作。
激活函數(shù)
由于卷積是線性操作,圖像遠非線性,非線性層通常直接放在卷積層之后,以引入?nonlinearity
?激活圖。
有幾種類型的非線性操作,流行的是:
Sigmoid
: sigmoid 非線性具有數(shù)學形式 f(x) = 1 / 1 + exp(-x)。它取一個實數(shù)值并將其標準化到 0 到 1 之間的范圍內(nèi)。
Tanh
: Tanh 將實數(shù)值壓縮到 [-1, 1] 范圍內(nèi)。
ReLU
: 線性單元 (ReLU) 計算函數(shù) ?(κ)=max (0,κ)。
Leaky?ReL
:Leaky ReLU 函數(shù)只不過是 ReLU 函數(shù)的改進版本。Leaky ReLU 就是為了解決這個問題而定義的。
Maxout
:Maxout 激活是 ReLU 和leaky ReLU 函數(shù)的泛化。
ELU
:Exponential?Linear?Unit
?或簡稱ELU,也是Rectiufied Linear Unit (ReLU)的一種變體。與leaky relu和parametric ReLU函數(shù)不同,ELU不是直線,而是使用對數(shù)曲線來定義負值。

過濾器 | 核大小 | 過濾器數(shù)量
卷積使用a?從輸入圖像kernel
?中提取某些 特征內(nèi)容。核是一個矩陣,它?slide
跨越圖像并與輸入相乘,從而以某種理想的方式增強輸出。
在我們深入研究之前,核是一個權重矩陣,它與輸入相乘以提取相關特征。核矩陣的維度是卷積的名稱。例如,在 中?2D?convolutions
,核矩陣是?2D?matrix
。
一個普通的卷積層實際上由多個這樣的過濾器組成。

步長
在輸入矩陣上移動的像素數(shù)。當步長為 1 時,我們一次將過濾器移動到 1 個像素。當步長為 2 時,我們一次將過濾器移動到 2 個像素,依此類推。下圖顯示卷積將以 1 的步長工作。
填充
padding
?意味著在數(shù)據(jù)的邊界處提供額外的像素。有時過濾器不能完全適合輸入圖像,那么我們將使用填充。
我們有兩個選擇:
用零填充圖片(零填充),使其適合
刪除過濾器不適合的圖像部分。這稱為有效填充,它只保留圖像的有效部分。

池化層
A?pooling layer
?是在卷積層之后添加的新層。具體來說,在對卷積層輸出的特征圖應用非線性(例如 ReLU)之后;
當圖像太大時,池化層部分會減少參數(shù)的數(shù)量。?Spatial?pooling
?也稱為?subsampling
?或?downsampling
?減少每個地圖的維數(shù)但保留重要信息。
空間池可以有不同的類型:
最大池化
平均池化
Max?pooling
?從校正后的特征圖中取最大元素。計算特征圖上每個補丁的平均值稱為?average pooling
。特征圖調用中每個補丁的所有元素的總和為?sum pooling
.

扁平化和密集層
Flattening
?正在將數(shù)據(jù)轉換為一維數(shù)組以將其輸入到下一層。我們展平卷積層的輸出以創(chuàng)建單個長特征向量。
Fully?connected layer
?:傳統(tǒng)的多層感知器結構。它的輸入是一個一維向量,表示前幾層的輸出。它的輸出是附在圖像上的不同可能標簽的概率列表(例如狗、貓、鳥)。接收概率最高的標簽是分類決策。
下載數(shù)據(jù)和模型構建
該?數(shù)據(jù)集包含 60,000 張彩色圖像?10?classes
,每個類別有 6,000 張圖像。數(shù)據(jù)集分為 50,000 張訓練圖像和 10,000 張測試圖像。這些類是互斥的,它們之間沒有重疊。
X_train = X_train/255X_test = X_test/255X_train.shape, X_test.shape



驗證數(shù)據(jù)
為了驗證數(shù)據(jù)集看起來是否正確,讓我們繪制測試集中的第一張圖像并顯示圖像。
plt.imshow(X_test[0])

y_test

構建 CNN 模型
下面的 8 行代碼使用一個通用模式定義了卷積基:一堆?Conv2D
?、MaxPooling2D
? 、?Dropout
和Flatten
?層?Dense
?。
作為輸入,a?Conv2D
?采用形狀 (image_height, image_width, color_channels) 的張量。
Maxpool2D()
通過對沿特征軸的每個維度在 (2,2)Downsamples
?定義的窗口上取最大值來對輸入表示進行??分層?。
Dropout
() 用于在訓練階段的每次更新時將隱藏單元的出邊隨機設置為 0。
Flatten()
?用于將數(shù)據(jù)轉換為一維數(shù)組,用于輸入到下一層。
Dense()
?層是具有 128 個神經(jīng)元的常規(guī)深度連接神經(jīng)網(wǎng)絡層。輸出層也是一個密集層,有 10 個神經(jīng)元用于 10 個類。
使用的激活函數(shù)是?softmax
。Softmax 將實數(shù)向量轉換為分類概率向量。輸出向量的元素在 (0, 1) 范圍內(nèi)并且總和為 1。
model.add(Flatten())model.add(Dense(units = 128, activation='relu'))model.add(Dense(units=10, activation='softmax'))model.summary()

編譯和訓練模型
這是?compiling
?模型和?fitting
?訓練數(shù)據(jù)。我們將使用 10?epochs
?來訓練模型。一個時期是對所提供的整個數(shù)據(jù)的迭代。??是在每個 epoch 結束時validation_data
?評估和任何模型指標的?數(shù)據(jù)。loss
模型不會根據(jù)這些數(shù)據(jù)進行訓練。由于指標 =?['sparse_categorical_accuracy']
?模型將基于?accuracy
.
history = model.fit(X_train

我們現(xiàn)在將繪制?model accuracy
?and??model loss
。在模型準確度中,我們將繪制訓練準確度和驗證準確度,在模型損失中,我們將繪制訓練損失和驗證損失。
# 繪制訓練和驗證的準確值epoch_range = range(1, 11)plt.plot(epoch_range, history.history['sparse_categorical_accuracy'])# 繪制訓練和驗證的損失值plt.plot(epoch_range, history.history['loss'])


y_pred = model.predict_classes(X_test)confusion_matrixmatplot


結論:
在本教程中,我們訓練了簡單的卷積神經(jīng)網(wǎng)絡 (CNN) 來對 圖像進行分類。從學習曲線圖中我們觀察到,在 3 個 epoch 之后,驗證準確度低于訓練集準確度,即我們的模型是過擬合,這意味著我們增加了模型的復雜性。還使用混淆矩陣評估模型。觀察到該模型對鳥、貓、鹿、狗等標簽的預測精度較低。
?

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