本文來源於阿里雲-雲棲社區,原文點擊這裏。
在本教程中,我將介紹如何使用TensorFlow,從頭開始構建卷積神經網絡,並使用TensorBoard可視化我們的圖形及神經網絡性能。如果您不瞭解完全神經網絡的一些基礎知識,我強烈建議您首先看另一個教程關於TensorFlow。在這篇文章中,我也把卷積神經網絡的每個步驟講的都很仔細,所以你可以在文章中完全瞭解每個步驟發生了什麼。未來您可以看到每一層的卷積,並使用它們進行自己的網絡模型構建,所以我從頭開始構建該模型。我只會強調主要的代碼,不過你可以在GitHub上下載源碼。
一開始,我先要選擇圖像數據集。我決定用牛津大學的寵物數據集。我選擇了這個數據集的原因很簡單:標籤非常簡單,訓練數據也不錯,而且還有一些邊框。另一個我認爲對於創建第一個模型是非常好的數據集是在Kaggle上發現的辛普森數據集。
第二步,必須決定我們的卷積神經網絡的模型。一些非常受歡迎的型號例如:GoogLeNet或VGG16,它們都具有多個卷積,可以用於檢測1000種數據集imagenet中的圖像。我決定一個更簡單的卷積網絡:
我們先簡要的分解這個模型,它以一個224x224x3的圖像開始,它根據前三個通道卷積到32個特徵圖(Feature Map)。我們將這組32個特徵圖集合到另外32個特徵中。然後將其彙總到112x112x32圖像中,我們將捲入64個特徵圖,然後再次進行二次,最後彙總爲56x56x64。然後將這個最終合併的層的每個單元完全連接到一個512個的神經元中,然後基於類的數量最後放入softmax層。整個過程就是如此,如果你對上述有一些疑問,可以進一步與我交流。
首先,我們要加載我們的依賴項,其中包括我所調用的功能函數imFunctions
來處理圖像數據。
import imFunctions as imf
import tensorflow as tf
import scipy.ndimage
from scipy.misc import imsave
import matplotlib.pyplot as plt
import numpy as np
我們可以使用imFunctions
提供的下載的方式提取圖像。
imf.downloadImages('annotations.tar.gz', 19173078)
imf.downloadImages('images.tar.gz', 791918971)
imf.maybeExtract('annotations.tar.gz')
imf.maybeExtract('images.tar.gz')
然後我們可以將圖像分成不同的文件夾,其中包括訓練文件夾和測試文件夾。sortImages
函數中的數字表示的是您想從訓練數據中分離出測試數據的百分比。
imf.sortImages(0.15)
然後,我們可以使用相應的一個熱矢量(one-hot)將我們的數據集構建成一個numpy數組,以表示我們的類。該函數將會表現您要讓神經網絡做那些事,由於我有限的GPU RAM(3GB),我選擇了一個非常小的數據集,僅僅試圖區分兩種狗:來自薩摩耶的ShibaInu。
train_x, train_y, test_x, test_y, classes, classLabels = imf.buildDataset()
現在我們有一個數據集可以使用,其次就是了解卷積如何工作。在跳入彩色卷積濾波器之前,讓我們來看一下灰度圖。讓我們製作一個應用四個不同特徵圖的7x7濾鏡。TensorFlow的conv2d功能相當簡單,它包含四個變量:輸入,過濾器,步幅和填充。在TensorFlow官方網站上,他們描述的conv2d功能如下: