1. 程式人生 > >《深度學習——Andrew Ng》第四課第四周程式設計作業_2_神經網路風格遷移

《深度學習——Andrew Ng》第四課第四周程式設計作業_2_神經網路風格遷移

課程筆記

演算法將一幅圖片分為內容+風格,有了這兩像,圖片也就確定了,所以”生成圖片主要的思想,通過兩個損失函式(內容損失+風格損失)來進行迭代更新”
這裡寫圖片描述

遷移學習總體分為三步:

  • 建立內容損失函式 Jcontent(C,G)
  • 建立風格損失函式 Jstyle(S,G)
  • 加權組合起來,即總體損失函式 J(G)=αJcontent(C,G)+βJstyle(S,G).

CNN是對輸入的圖片進行處理的神經網路,一般有卷積層、池化層、全連線層,每一層都是對圖片進行畫素級的運算。圖片以矩陣的形式輸入神經網路,在經過每一層時的輸出依然時矩陣,把這個矩陣反轉回去得到的影象,就是這一層對圖片進行處理後得到的影象。

一個神經網路,前面幾層(淺層)一般檢測圖片的基礎特徵,例如邊緣和結構;後面幾層(深層)一般檢測圖片的綜合特徵,例如具體的類別。

內容損失函式

我們希望“生成的”影象G具有與輸入影象C相似的內容。但是選擇神經網路的哪些層的輸出來表示圖片的內容呢,作業中使用了中間的層, 既不太淺也不太深,可以取得好的效果。 (完成此練習後,請隨時返回並嘗試使用不同的圖層,以檢視結果的變化。)

使用已經訓練過的網路 VGG,輸出層輸入影象為C,經過VGG網路前向傳播,得到 [l] 層輸出為 a[l](C),這裡用 a(C) 表示;同時生成一張白噪聲的圖片G,重複同樣的操作得到

a(G),從而可以得到內容損失函式:

(1)Jcontent(C,G)=14×nH×nW×nCall entries(a(C)a(G))2

nH,nW and nC 時指定神經網路層的輸出矩陣,這裡為了方便計算,做舉證展開(Unrolled),如下圖:
這裡寫圖片描述


What you should remember:
- The content cost takes a hidden layer activation of the neural network, and measures how different

a(C) and a(G) are.
- When we minimize the content cost later, this will help make sure G has similar content as C.

風格損失函式

上面的內容矩陣是直接採用指定層的輸出矩陣,而風格矩陣在這裡用 “Gram matrix.” 表示,也叫相關矩陣,如下圖:

計算Gram Matrix首先對矩陣進行展開(Unrolled),隨後再進行矩陣轉置,矩陣點乘。
這裡寫圖片描述
線上性代數中, Gram matrix表示的是矩陣中不同向量之間的相關性, G 的向量是做如下運算得到的:

Gij=viTvj=np.dot(vi,vj) .
矩陣對角線上的元素是 向量內積;非對角線元素是 兩兩不同向量內積,值的大小可以反應這兩個不同向量的相關性,值越大,相關性越大。

在神經網路中,上述的進過 Unrolled 矩陣的不同向量代表同一層不同濾波器的輸出,所以 Gram Matrix 對角線上的元素 Gii 衡量該濾波器檢測的特徵值在圖片中所佔的比例;例如,di i 層卷積檢測垂直結構,則 Gii 可以衡量該圖片中垂直結構所佔比例的大小。而 Gij 衡量不同濾波器的相似程度。筆者認為風格函式的主要貢獻在 Gram Matrix 對角線。

在有了 Gram Matrix 以後,風格損失函式定義如下: