面向機器智慧的TensorFlow實戰5:目標識別與分類
本節用於訓練CNN模型的資料集為Stanford的Dogs Dataset是ImageNet的一個子集
卷積層(tf.nn.conv2d)、非線性變換層(tf.nn.relu)、池化層(tf.nn.max_pool)及全連線層(tf.nn.matmul)
TensorFlow的輸入流水線擁有一種為使用一個批資料中的多幅影像而設計的專門格式。
2、卷積
卷積核(kernel)也稱為權值、濾波器、卷積矩陣或模板。跨度(strides)
conv2d = tf.nn.conv2d(input_batch, kernel, strides=[1,3,3,1], padding="SAME")
strides引數的格式與輸入向量相同,集(image_batch_size_stride, image_height_stride, image_width_stride, image_channels_stride)。邊界填充:
資料格式:
3、常見層
單層CNN的一種實際用途是檢測邊緣。對於影像識別和分類任務而言,更常見的情形是使用不同的層型別支援某個卷積層。這些層有助於減少過擬合,並可加速訓練過程和降低記憶體佔用率。
卷積層:tf.nn.depthwise_conv2d、tf.nn.separable_conv2d、tf.nn.conv2d_transpose
啟用函式:在CNN中主要使用tf.nn.relu,是因為它雖然會帶來一些資訊損失,但效能較為突出。開始設計模型時,推薦使用tf.nn.relu,但高階使用者也可建立自己的啟用函式。評價某個啟用函式是否有用時,可考慮下列為數不多的幾個主要因素:
1)該函式應是單調的,這樣輸出便會隨著輸入的增長而增長,從而使利用梯度下降法尋找區域性極值點成為可能。
2)該函式應是可微分的,以保證該函式定義域內的任意一點上導數都存在,從而使利用梯度下降法能夠正常使用來自這類啟用函式的輸出。
tf.nn.relu:優點在於不受“梯度消失”的影響,且取值範圍為[0, +00],其缺點在於當使用較大的學習速率是,易受達到飽和的神經元的影響。
tf.sigmoid:位於區間[0,1]。當輸入接近飽和或變化劇烈時,對輸出範圍的這種縮減往往會帶來一些不利影響。
tf.tanh:主要區別在於值域為[-1.0, 1.0]。在某些特定的網路架構中,能夠輸出負值的能力可能會非常有用。
tf.nn.dropout:依據某個可配置的概率將輸出設為0.0。當引入少量隨機性有助於訓練時,這個層會有很好的表現。一種適合的場景是:當要學習的一些模式與其近鄰特徵耦合過強時。這種層會為所學習到的輸出新增少量噪聲。注:這種層應當只在訓練階段使用。如果在測試階段使用該層,它所引入的隨機噪聲將對結果產生誤導。
池化層:能夠減少過擬合,並通過減少輸入的尺寸來提高效能。它們可用於對輸入降取樣,但會為後續層保留重要的資訊。只使用tf.nn.conv2d來減少輸入的尺寸也是可以的,但池化層的效率更高。
tf.nn.max_pool、tf.nn.avg_pool
歸一化:由於ReLU是無界函式,利用某些形式的歸一化來識別那些高頻特徵通常是十分有用的。
高階層:
4、影像與TensorFlow
載入影像:Stanford Dogs資料集
JPEG與PNG:tf.image.decode_jpeg,另一種是tf.image.decode_png
TFRecord:為將二進位制資料和標籤(訓練的類別標籤)資料儲存在同一個檔案中,內建檔案格式為TFRecord,它要求在模型訓練之前通過一個預處理步驟將影像轉換為TFRecord格式。該格式的最大優點是將每副輸入影像和與之關聯的標籤放在同一檔案中。
影像操作:裁剪、邊界填充、翻轉、飽和與平衡。
顏色:灰度、HSV空間、RGB空間、LAB空間、影像資料型別轉換
5、CNN的實現
訓練資料來自Stanford的一個包含了許多狗及其品種標籤的資料集
http://vision.stanford.edu/aditya86/ImageNetDogs/,下載解壓為imagenet-dogs目錄
網路採取了Alex Krizhevsky的AlexNet的簡化版本,但並未使用AlexNet的所有層。
將影像轉為TFRecord檔案:因為影像尺寸不一,且相應的品種標籤也不在影像檔案中。轉換為TFRecord檔案將有助於加速訓練,並簡化與影像標籤的匹配。另一個好處是與訓練和測試有關的影像可以事先分離,這樣當訓練開始時,就可利用檢查點檔案對模型進行不間斷的測試。開啟每幅影像,將其轉換為灰度圖,調整其尺寸,然後將其新增到一個TFRecord檔案中。
載入影像:每次載入少量影像及相應的標籤,批處理時,必須要滿足的條件是系統有足夠的記憶體
模型:類似LeNet-5,兩個卷積層和池化層
訓練:
利用TensorBoard除錯濾波器:
相關文章
- 面向機器智慧的TensorFlow實戰8:序列分類
- 面向機器智慧的TensorFlow實戰2:TensorFlow基礎
- 面向機器智慧的TensorFlow實戰1:安裝
- 面向機器智慧的TensorFlow實戰7:詞向量嵌入
- 面向機器智慧的TensorFlow實戰4:機器學習基礎機器學習
- 面向機器智慧的TensorFlow實戰6:迴圈神經網路與自然語言處理神經網路自然語言處理
- OpenCV----實現目標識別與分割OpenCV
- 深度學習之目標檢測與目標識別深度學習
- 2.CNN圖片多標籤分類(基於TensorFlow實現驗證碼識別OCR)CNN
- 【機器學習No.1】Tensorflow智慧之別衣帽種類模型機器學習模型
- 使用Harr特徵的級聯分類器實現目標檢測特徵
- 基於深度學習的機器人目標識別和跟蹤深度學習機器人
- 模式識別與機器學習——概率分佈模式機器學習概率分佈
- 基於sklearn的分類器實戰
- Spark機器學習實戰 (十一) - 文字情感分類專案實戰Spark機器學習
- 語音識別的最終目標是真正實現人機互動
- 人工智慧中的文字分類:技術突破與實戰指導人工智慧文字分類
- 機器學習實戰-SVM模型實現人臉識別機器學習模型
- TensorFlow釋出面向JavaScript開發者的機器學習框架TensorFlow.jsJavaScript機器學習框架JS
- 目標跟蹤演算法分類演算法
- 計算機視覺—人臉識別(Haar特徵+Adaboost分類器)(7)計算機視覺特徵
- 計算機視覺—人臉識別(Hog特徵+SVM分類器)(8)計算機視覺HOG特徵
- 模式識別與機器學習筆記專欄之貝葉斯分類決策(一)模式機器學習筆記
- 機器學習之分類:真與假以及正類別與負類別機器學習
- YOLOV5 模型和程式碼修改——針對小目標識別YOLO模型
- 目標識別程式碼解讀整理
- 目標檢測和影像分類及其相關計算機視覺的影像分佈計算機視覺
- python ubuntu人臉識別 -1 SVM binary 分類器PythonUbuntu
- TensorFlow.NET機器學習入門【5】採用神經網路實現手寫數字識別(MNIST)機器學習神經網路
- 機器學習在交通標誌檢測與精細分類中的應用機器學習
- Python自然語言處理實戰(4):詞性標註與命名實體識別Python自然語言處理詞性標註
- Scikit-Learn 與 TensorFlow 機器學習實用指南學習筆記2 — 機器學習的主要挑戰機器學習筆記
- LLM應用實戰: 產業治理多標籤分類產業
- 模式識別與機器學習(二)模式機器學習
- 模擬經營類遊戲:目標感與挑戰曲線的設計遊戲
- 分類TAB商品流多目標排序模型的演進排序模型
- 【TensorFlow】 TensorFlow-Slim影像分類模型庫模型
- 影像識別垃圾分類app的製作APP