技術文章 | 用TensorFlow和TensorBoard從零開始構建ConvNet(CNN)

本文來源於阿里雲-雲棲社區,原文點擊這裏


在本教程中,我將介紹如何使用TensorFlow,從頭開始構建卷積神經網絡,並使用TensorBoard可視化我們的圖形及神經網絡性能。如果您不瞭解完全神經網絡的一些基礎知識,我強烈建議您首先看另一個教程關於TensorFlow。在這篇文章中,我也把卷積神經網絡的每個步驟講的都很仔細,所以你可以在文章中完全瞭解每個步驟發生了什麼。未來您可以看到每一層的卷積,並使用它們進行自己的網絡模型構建,所以我從頭開始構建該模型。我只會強調主要的代碼,不過你可以GitHub下載源碼。


1.選擇數據集

一開始,我先要選擇圖像數據集。我決定用牛津大學的寵物數據集。我選擇了這個數據集的原因很簡單:標籤非常簡單,訓練數據也不錯,而且還有一些邊框。另一個我認爲對於創建第一個模型是非常好的數據集是Kaggle上發現的辛普森數據集


2.選擇一個模型

第二步,必須決定我們的卷積神經網絡的模型。一些非常受歡迎的型號例如:GoogLeNetVGG16,它們都具有多個卷積,可以用於檢測1000種數據集imagenet中的圖像。我決定一個更簡單的卷積網絡:

8bc7067b2414679aab060ae228ae5c461bae5a5f

我們先簡要的分解這個模型,它以一個224x224x3的圖像開始,它根據前三個通道卷積到32個特徵圖(Feature Map)。我們將這組32個特徵圖集合到另外32個特徵中。然後將其彙總到112x112x32圖像中,我們將捲入64個特徵圖,然後再次進行二次,最後彙總爲56x56x64。然後將這個最終合併的層的每個單元完全連接到一個512個的神經元中,然後基於類的數​​量最後放入softmax層。整個過程就是如此,如果你對上述有一些疑問,可以進一步與我交流。


3.處理和構建數據集:

首先,我們要加載我們的依賴項,其中包括我所調用的功能函數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 RAM3GB),我選擇了一個非常小的數據集,僅僅試圖區分兩種狗:來自薩摩耶ShibaInu

train_x, train_y, test_x, test_y, classes, classLabels = imf.buildDataset()


4.如何卷積實現功能

現在我們有一個數據集可以使用,其次就是了解卷積如何工作。在跳入彩色卷積濾波器之前,讓我們來看一下灰度圖。讓我們製作一個應用四個不同特徵圖的7x7濾鏡。TensorFlowconv2d功能相當簡單,它包含四個變量:輸入,過濾器,步幅和填充。在TensorFlow官方網站上,他們描述的conv2d功能如下:

 展開全文

發佈了2 篇原創文章 · 獲贊 52 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章