Building your first neural network in tensorflow(吳恩達)

0 說在前面 

在網易雲課堂上學完了吳恩達老師的前兩課(神經網絡和深度學習,改善深層神經網絡),不過總是覺得自己學的不是很紮實。正好藉着“Building your first neural network in tensorflow”這個小項目,將自己之前學習知識進行一個總結。

1 基本思路

這一節主要對在TensorFlow中編寫神經網絡(深度學習)的基本思路進行總結,在下面的章節中就對主要思路進行展開敘述。

  • 導入相關數據集
  • 對訓練集(training datasets)進行批量(batch)處理
  • 初始化參數:包括權重(weights)和偏差(biases)
  • 計算每層神經網絡的線性函數值(Z)以及激勵函數值(A)值
  • 計算損失函數(loss function)以及成本函數(cost function)
  • 選擇合適的梯度下降法進行反向傳播計算

2 數據集的處理

問題:一幅圖像在計算機中是怎樣存儲的?

計算機和人腦有着千絲萬縷的聯繫,當然也有截然不同的區別。就拿人腦和計算機存儲一幅圖像(這幅圖像可能是你的另一個ta)來說,人腦可能不會十分準確的記住一幅圖像的所有細節,人腦只會記住圖像的大概輪廓以及某些特別的局部細節。當我們回憶那幅圖像時,我們腦海中會漂浮它的大體樣子,伴隨而來的是心情愉悅,嘴角上揚;但是,計算機“記住”一幅圖像就顯得比較“直男”了,計算機可不管這麼多,在它眼中,這幅圖片就是0和1,因爲它的存儲機理就是以二進制的方式存儲數據。當然,計算機是一個比較“有原則的直男”,它注重數據的存儲順序,因爲0和1不同組合就可能完全創造出一幅截然不同的圖像。一個龐大的包含0和1的數據矩陣就能夠構造出一幅圖像。

值得注意的是:一幅色彩斑斕的圖像和一幅黑白圖像又有很大的不同,前者在是由RGB三通道矩陣合成的,後者則是有單通道矩陣構成,這其實就相當於三張紙和一張紙的區別。

在神經網絡的數據集處理中,我們需要對三通道圖像進行“減肥”,需要將“三張紙”變成“一張紙”,這樣方便對數據進行處理。變化的過程肯定是有一定的順序和技巧的,因爲計算機是一個“很有原則的直男”嘛。我們首先會找到能夠盛放“三張紙”等數量的大矩陣,將三張紙按照一定的順序,依次放到這個大矩陣中,只不過這個矩陣很“瘦”,只有一行或者一列。這一行或者一列就完完全全能夠表示這一幅圖像。

我們瘦身的時候要知道自己的體重,以及需要選擇相應的健身器材。矩陣“瘦身”當然也要知道自己“幾斤幾兩”和怎樣瘦身的“健身器材”。下面就介紹我們會用到的兩個輔助“器材”:

1.shape():獲取矩陣的維度(dimension)
    比如A代表一個2行3列的矩陣,那麼shape(A)的返回結果就是(2,3),2表示兩行,3表示3列.如果A表示的是一幅RGB圖像,那麼A.shape[0]就表示獲得A的行數,A.shape[1]表示獲得A的列數,A.shape[2]表示獲得A的深度(depth).也就是有“幾張紙”.

2.reshape():表示將矩陣變成指定的維度(dimension)
    比如A代表一個2行3列的矩陣,但是我想把A變成一個1行6列的向量,可以這樣寫A = A.reshape(1,6)或者A = A.reshape(1,-1),其中-1表示根據原來矩陣的元素的個數自適應調整列的維度

如果“三張紙”的尺寸都是(68,68),那麼我們所需“一張紙”的尺寸就是(68*68*3,1)。用代碼的形式就是:

image = [...]  # A是一個68*68的深度爲3的矩陣
image = image.reshape(image.shape[0]*image.shape[1]*image.shape[2],1)

這樣就完成了“瘦身”!哈哈哈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章