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)
這樣就完成了“瘦身”!哈哈哈