使用TensorFlow構建卷積神經網絡CNN

2020-12-04 AI火箭營

深度學習的最新進展使得計算機視覺應用的飛躍:從我們的手機解鎖方式到更安全的自動駕駛汽車。

卷積神經網絡(CNN)是計算機視覺應用背後的架構。本文將闡述CNN和計算機視覺的基礎,例如卷積運算,填充,跨步卷積和池化層。然後,我們將使用TensorFlow構建用於圖像識別的CNN。

理解卷積

卷積運算是卷積神經網絡的積木。

現在,在計算機視覺領域,圖像可以表示為RGB值的矩陣。這個概念實際上是在之前的文章中介紹。

要完成卷積操作,我們需要一個圖像和一個過濾器。

因此,讓我們將下面的6x6矩陣視為圖像的一部分:

6x6矩陣

過濾器將是以下矩陣:

3x3過濾器

然後,卷積涉及將濾波器疊加到圖像矩陣上,來自濾波器的值和來自圖像矩陣的的乘積,其將生成4×4的旋繞層。

這很難用文字表達,但這裡有一個很好的動畫來解釋卷積:

卷積操作

在上面的圖像矩陣上執行此操作並使用上面定義的過濾器,獲得以下結果矩陣:

4x4輸出層

你如何解釋輸出層?

好吧,考慮到每個值都表示顏色,或者像素有多暗(正值表示光,負值表示暗),那麼可以將輸出層解釋為:

輸出層解釋

因此,似乎這個特定的濾鏡負責檢測圖像中的垂直邊緣!

你如何選擇合適的過濾器?

這是一個自然的問題,因為你可能會發現可以應用於圖像的無限數量的過濾器。

事實證明,濾波器矩陣中的精確值可以是基於模型目標的可訓練參數。因此,可以選擇適用於特定應用程式的過濾器,也可以使用來確定過濾器的最佳值,從而產生最佳結果。

在計算機視覺中填充

以前,我們已經看到一個3x3濾波器與6x6圖像進行卷積,將產生4x4矩陣。這是因為濾波器有4x4個可能的位置以適合6x6圖像。

因此,在每個卷積步驟之後,圖像縮小,這意味著只能執行有限數量的卷積,直到圖像不再縮小為止。此外,位於圖像角落的像素僅使用一次,這導致神經網絡的信息丟失。

為了解決上述兩個問題,使用填充。填充包括在輸入圖像周圍添加邊框,如下所示:

填充為1的輸入圖像

正如你所看到的一樣,添加的邊框通常用零填充。現在,圖像的角點像素將被多次使用來計算輸出,從而有效地防止信息丟失。此外,它允許我們在輸出中保持輸入矩陣形狀。

考慮到我們的6x6輸入圖像,如果我們添加1的填充,我們得到一個8x8矩陣。應用3x3濾波器,這將產生6x6輸出。

一個簡單的等式可以幫助我們找出輸出的形狀:

其中n是輸入形狀,p是填充大小,f是濾波器形狀

重申一下,我們有:

6x6輸入 填充1 3x3過濾器因此,輸出形狀將是:6 + 2(1)-3 + 1 = 6.因此,輸出將是6x6矩陣,就像輸入圖像一樣!

填充並不總是必需的。但是,使用填充時,通常輸出的大小與輸入圖像的大小相同。這產生兩種類型的卷積。

當沒有應用填充時,這稱為" 有效卷積"。否則,它被稱為" 相同的卷積"。要確定保持輸入圖像尺寸所需的填充大小,只需將上面的公式等同於n即可。解決p後,你應該得到:

可能已經注意到f應該是奇數,以便填充為整數。因此,計算機視覺領域的慣例是具有奇數濾波器。

跨步卷積

以前,我們已經看到了一個步幅為1 的卷積。這意味著濾波器水平和垂直移動了1個像素。

一個跨步卷積是當步幅大於1.在下面的動畫中,步幅為2:

捲入2的步幅

現在,考慮到步幅,計算輸出矩陣形狀的公式是:

s是步幅

作為慣例,如果上面的公式不產生整數,那麼我們向下捨入到最接近的整數。

匯集層

池化層是減少圖像解釋大小以增加計算速度的另一種方法,它使檢測到的特徵更加健壯。

最好用圖像解釋池化。以下是最大池的示例:

使用2x2過濾器進行最大池化

我們選擇了一個步長為2的2x2濾波器。這相當於將輸入分成4個相同的方塊,然後我們取每個方塊的最大值,並在輸出中使用它。

也可以執行平均池化,但它不如最大池化。

您可以將池化視為防止過度擬合的一種方法,因為我們正在從輸入圖像中刪除某些功能。

為什麼要使用卷積神經網絡?

我們現在對卷積神經網絡有很強的基礎知識。但是,為什麼深度學習從業者會使用它們呢?

與完全連接的層不同,卷積層具有要學習的小得多的參數集。這是因為:

參數共享 連接稀疏參數共享指的是一個特徵檢測器,例如垂直邊緣檢測器,將在圖像的許多部分中有用。然後,連接的稀疏性指的是只有少數特徵與某個輸出值相關的事實。

考慮到上面的最大池化示例,輸出的左上角值僅取決於輸入圖像的左上角2x2平方。

因此,我們可以訓練較小的數據集並大大減少要學習的參數數量,使CNN成為計算機視覺任務的一個很好的工具。

使用TensorFlow構建CNN

足夠理論,讓我們編碼CNN進行手勢識別。我們重新審視之前的項目,看看CNN是否會表現更好。

與往常一樣,有完整的筆記本電腦。

第1步:預處理圖像

導入所需的庫和資源後,我們加載數據並預處理圖像:

第2步:創建佔位符

然後,我們為功能和目標創建佔位符:

第3步:初始化參數

然後我們使用Xavier初始化初始化我們的參數:

第4步:定義前向傳播

現在,我們定義前向傳播步驟,這實際上是我們CNN的架構。我們將使用具有2個卷積層和最終完全連接層的簡單3層網絡:

第5步:計算成本函數

最後,我們定義一個計算成本的函數:

第6步:將所有功能組合到一個模型中

現在,我們將上述所有功能合併到一個CNN網絡中。我們將使用小批量梯度下降進行訓練:

現在,我們可以運行我們的模型並查看它的執行情況:

_,_,parameters = model(X_train,Y_train,X_test,Y_test)

現在你對CNN和計算機視覺領域有很好的了解。雖然還有很多東西需要學習,但更高級的技術都是使用這裡介紹的概念作為基本構建塊。

相關焦點

  • 用TensorFlow和Keras構建卷積神經網絡
    全文共9940字,預計學習時長20分鐘或更長不同神經網絡結構各有所長。本文主要介紹如何在Python中使用TensorFlow和Keras構建卷積神經網絡。卷積神經網絡是過去十年中深度學習成為一大熱點的部分原因。今天將使用TensorFlow的eager API來訓練圖像分類器,以辨別圖像內容是狗還是貓。人工神經網絡在許多領域都展現出了其強大功能,最近已經應用到很多行業中。
  • 一步一步學用Tensorflow構建卷積神經網絡
    在過去的一年中,我一直在研究深度學習技術,因此,我想和大家分享一下如何使用Tensorflow從頭開始構建和訓練卷積神經網絡。這樣,我們以後就可以將這個知識作為一個構建塊來創造有趣的深度學習應用程式了。  為此,你需要安裝Tensorflow(請參閱安裝說明),你還應該對Python編程和卷積神經網絡背後的理論有一個基本的了解。
  • 機器之心GitHub項目:從零開始用TensorFlow搭建卷積神經網絡
    機器之心基於 Ahmet Taspinar 的博文使用 TensorFlow 手動搭建卷積神經網絡,並提供所有代碼和注釋的 Jupyter Notebook 文檔。conda 環境: activate tensorflow 運行後會變為「(tensorflow) C:Users用戶名>」,然後我們就可以繼續在該 conda 環境內安裝 TensorFlow(本文只使用 CPU 進行訓練,所以可以只安裝 CPU 版):
  • 如何在PyTorch和TensorFlow中訓練圖像分類模型
    然後,我們將使用MNIST手寫數字分類數據集,並在PyTorch和TensorFlow中使用CNN(卷積神經網絡)建立圖像分類模型。這將是你的起點,然後你可以選擇自己喜歡的任何框架,也可以開始構建其他計算機視覺模型。
  • 使用卷積神經網絡,構建圖像分類模型檢測肺炎
    來源 | DeepHub IMBA作者 | Eunjoo Byeon在本篇文章中,我將概述如何使用卷積神經網絡構建可靠的圖像分類模型,以便從胸部x光圖像中檢測肺炎的存在。肺炎是一種常見的感染,它使肺部的氣囊發炎,引起呼吸困難和發燒等症狀。
  • 作為TensorFlow的底層語言,你會用C++構建深度神經網絡嗎?
    在本文中,我將展示如何使用 TensorFlow 在 C++ 上構建深度神經網絡,並通過車齡、公裡數和使用油品等條件為寶馬 1 系汽車進行估價。目前,我們還沒有可用的 C++ 優化器,所以你會看到訓練代碼看起來不那麼吸引人,但是我們會在未來加入的。
  • 使用Keras構建具有自定義結構和層次圖卷積神經網絡
    來源:DeepHub IMBA本文約3600字,建議閱讀5分鐘本文為你介紹了如何構建具有自定義結構和層次的神經網絡:Keras中的圖卷積神經網絡(GCNN)。如何構建具有自定義結構和層次的神經網絡:Keras中的圖卷積神經網絡(GCNN)在生活中的某個時刻我們會發現,在Tensorflow Keras中預先定義的層已經不夠了!我們想要更多的層!我們想要建立一個具有創造性結構的自定義神經網絡!幸運的是,通過定義自定義層和模型,我們可以在Keras中輕鬆地執行此任務。
  • TensorFlow 攜手 NVIDIA,使用 TensorRT 優化 TensorFlow Serving...
    HTTP/REST API at:localhost:8501 …$ curl -o /tmp/resnet/resnet_client.py https://raw.githubusercontent.com/tensorflow/serving/master/tensorflow_serving/example/resnet_client.py
  • TensorFlow 資源大全中文版
    無監督圖片形態轉換的實現Show, Attend and Tell算法 -基於聚焦機制的自動圖像生成器Neural Style – Neural Style 算法的TensorFlow實現Pretty Tensor – Pretty Tensor提供了高級別的TensorFlow封裝接口Neural Style – neural style的又一實現
  • 卷積神經網絡(CNN)介紹與實踐
    - 來源:http://cs231n.github.io/classification/為了「教會」一種算法如何識別圖像中的對象,我們使用特定類型的人工神經網絡:卷積神經網絡(CNN)。他們的名字源於網絡中最重要的一個操作:卷積。卷積神經網絡受到大腦的啟發。
  • 從框架優缺點說起,這是一份TensorFlow入門極簡教程
    這一系列教程分為 6 部分,從為什麼選擇 TensorFlow 到卷積神經網絡的實現,介紹了初學者所需要的技能。機器之心在本文介紹了 PyTorch 和 Caffe 等深度學習框架的優缺點及 TensorFlow 基礎,包括靜態計算圖、張量、TensorBoard 可視化和模型參數的保存等。
  • Keras和TensorFlow究竟哪個會更好?
    如果你陷於「我應該使用 Keras 還是 TensorFlow」這樣的問題,你可以退一步再看,其實這是一個錯誤的問題,因為你可以選擇同時使用兩個。 我會使用基於 TensorFlow 的標準 keras 模塊和 tf.keras 模塊,來實現一個卷積神經網絡(CNN)。
  • 步履不停:TensorFlow 2.4新功能一覽!
    對於這種稱為 All Reduce 的匯總, MultiWorkerMirroredStrategy 會使用集合運算保持變量同步。集合運算是 TensorFlow 圖表中的單個算子,可以根據硬體、網絡拓撲和張量大小在 TensorFlow 運行時中自動選擇 All Reduce 算法。集合運算還可實現其他集合運算,例如廣播和 All Gather。
  • 教程| 如何使用TensorFlow構建、訓練和改進循環神經網絡
    目前有很多人工智慧應用都依賴於循環深度神經網絡,在谷歌(語音搜索)、百度(DeepSpeech)和亞馬遜的產品中都能看到RNN的身影。然而,當我們開始著手構建自己的 RNN 模型時,我們發現在使用神經網絡處理語音識別這樣的任務上,幾乎沒有簡單直接的先例可以遵循。
  • 教程 | 如何使用TensorFlow構建、訓練和改進循環神經網絡
    目前有很多人工智慧應用都依賴於循環深度神經網絡,在谷歌(語音搜索)、百度(DeepSpeech)和亞馬遜的產品中都能看到RNN的身影。然而,當我們開始著手構建自己的 RNN 模型時,我們發現在使用神經網絡處理語音識別這樣的任務上,幾乎沒有簡單直接的先例可以遵循。
  • 最全面的卷積神經網絡介紹(含代碼實戰詳解)
    它是一種流行的深度學習軟體包,廣泛用於構建各種真實世界的系統中。在本節,我們將熟悉它的工作原理。在使用軟體包前先安裝它。安裝說明傳送門:https://www.tensorflow.org/get_started/os_setup。
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    如果你對這一領域還不是很熟悉,那麼簡單來說,深度學習使用了「人工神經網絡」,這是一種類似大腦的特殊架構,這個領域的發展目標是開發出能解決真實世界問題的類人計算機。為了幫助開發這些架構,谷歌、Facebook 和 Uber 等科技巨頭已經為 Python 深度學習環境發布了多款框架,這讓人們可以更輕鬆地學習、構建和訓練不同類型的神經網絡。
  • TensorFlow極速入門
    Tensorflow 擁有易用的 python 接口,而且可以部署在一臺或多臺 cpu , gpu 上,兼容多個平臺,包括但不限於 安卓/windows/linux 等等平臺上,而且擁有 tensorboard這種可視化工具,可以使用 checkpoint 進行實驗管理,得益於圖計算,它可以進行自動微分計算,擁有龐大的社區,而且很多優秀的項目已經使用 tensorflow
  • 深度解讀TensorFlow,了解它的最新發展!
    TensorFlow.js 可以為開發者提供高性能的、易於使用的機器學習構建模塊,允許研發人員在瀏覽器上訓練模型,或以推斷模式運行預訓練的模型。TensorFlow.js 不僅可以提供低級的機器學習構建模塊,還可以提供高級的類似 Keras 的 API 來構建神經網絡。
  • 手把手教你用 TensorFlow 實現卷積神經網絡(附代碼)
    第二步中,這個小的神經網絡對這77張大小相同的小圖片都進行同樣的計算,也稱權重共享(SharedWeights)。這樣做是因為,第一,對圖像等數組數據來說,局部數組的值經常是高度相關的,可以形成容易被探測到的獨特的局部特徵;第二,圖像和其它信號的局部統計特徵與其位置是不太相關的,如果特徵圖能在圖片的一個部分出現,也能出現在任何地方。