1. 程式人生 > >TensorFlow遊樂場及神經網路簡介,我以《Tensorflow:實戰Google深度學習框架》為主,基礎最重要

TensorFlow遊樂場及神經網路簡介,我以《Tensorflow:實戰Google深度學習框架》為主,基礎最重要

轉載:https://blog.csdn.net/broadview2006/article/details/80128755

本文將通過TensorFlow遊樂場來快速介紹神經網路的主要功能。TensorFlow遊樂場(http://playground.tensorflow.org)是一個通過網頁瀏覽器就可以訓練的簡單神經網路並實現了視覺化訓練過程的工具。下圖給出了TensorFlow遊樂場預設設定的截圖。 
TensorFlow遊樂場介面截圖 
從上圖中可以看出,TensorFlow遊樂場的左側提供了4個不同的資料集來測試神經網路。預設的資料為左上角被框出來的那個。被選中的資料也會顯示在上圖中最右邊的“OUTPUT”欄下。在這個資料中,可以看到一個二維平面上有黑色或者灰色的點,每一個小點代表了一個樣例,而點的顏色代表了樣例的標籤。因為點的顏色只有兩種,所以這是一個二分類的問題。在這裡舉一個例子來說明這個資料可以代表的實際問題。假設需要判斷某工廠生產的零件是否合格,那麼灰色的點可以表示所有合格的零件而黑色的表示不合格的零件。這樣判斷一個零件是否合格就變成了區分點的顏色。 
為了將一個實際問題對應到平面上不同顏色點的劃分,還需要將實際問題中的實體,比如上述例子中的零件,變成平面上的一個點①。這就是特徵提取解決的問題。還是以零件為例,可以用零件的長度和質量來大致描述一個零件。這樣一個物理意義上的零件就可以被轉化成長度和質量這兩個數字。在機器學習中,所有用於描述實體的數字的組合就是一個實體的特徵向量(feature vector)。在第1章中介紹過,特徵向量的提取對機器學習的效果至關重要,如何提取特徵本書不再贅述。通過特徵提取,就可以將實際問題中的實體轉化為空間中的點。假設使用長度和質量作為一個零件的特徵向量,那麼每個零件就是二維平面上的一個點。TensorFlow遊樂場中FEATURES一欄對應了特徵向量。在本文的樣例中,可以認為x1代表一個零件的長度,而x2代表零件的質量。 
特徵向量是神經網路的輸入,神經網路的主體結構顯示在了上圖的中間位置。目前主流的神經網路都是分層的結構,第一層是輸入層,代表特徵向量中每一個特徵的取值。比如如果一個零件的長度是0.5,那麼x1的值就是0.5。同一層的節點不會相互連線,而且每一層只和下一層連線,直到最後一層作為輸出層得到計算的結果②。在二分類問題中,比如判斷零件是否合格,神經網路的輸出層往往只包含一個節點,而這個節點會輸出一個實數值。通過這個輸出值和一個事先設定的閾值,就可以得到最後的分類結果。以判斷零件合格為例,可以認為當輸出的數值大於0時,給出的判斷結果是零件合格,反之則零件不合格。一般可以認為當輸出值離閾值越遠時得到的答案越可靠。 
在輸入和輸出層之間的神經網路叫做隱藏層,一般一個神經網路的隱藏層越多,這個神經網路越“深”。而所謂深度學習中的這個“深度”和神經網路的層數也是密切相關的。在TensorFlow遊樂場中可以通過點選“+”或者“-”來增加/減少神經網路隱藏層的數量。除了可以選擇神經網路的深度,TensorFlow遊樂場也支援選擇神經網路每一層的節點數以及學習率(learning rate)、啟用函式(activation)、正則化(regularization)。如何使用這些引數將在後面的章節中討論。在本文中都直接使用TensorFlow遊樂場預設的設定。當所有配置都選好之後,可以通過左上角的開始標誌“”來訓練這個神經網路。下圖中給出了迭代訓練100輪之後的情況。 
TensorFlow遊樂場訓練100輪之後的截圖 
如何訓練一個神經網路將在下一節中介紹,在這裡主要介紹如何解讀TensorFlow遊樂場的訓練結果。在上圖中,一個小格子代表神經網路中的一個節點,而邊代表節點之間的連線。每一個節點和邊都被塗上了或深或淺的顏色,但邊上的顏色和格子中的顏色含義有略微的區別。每一條邊代表了神經網路中的一個引數,它可以是任意實數。神經網路就是通過對引數的合理設定來解決分類或者回歸問題的。邊上的顏色體現了這個引數的取值,當邊的顏色越深時,這個引數取值的絕對值越大;當邊的顏色接近白色時,這個引數的取值接近於0③。 
每一個節點上的顏色代表了這個節點的區分平面。具體來說,如果把這個平面當成一個卡迪爾座標系,這個平面上的每一個點就代表了(x1,x2)的一種取值。而這個點的顏色就體現了x1,x2在這種取值下這個節點的輸出值。和邊類似,當節點的輸出值的絕對值越大時,顏色越深④。下面將具體解讀輸入層x1所代表的節點。從上圖中可以看到x1這個節點的區分平面就是y軸。因為這個節點的輸出就是x1本身的值,所以當x1小於0時,這個節點的輸出就是負數,而x1大於0時輸出的就是正數。於是y軸的左側都為灰色,而右側都為黑色⑤。上圖中其他節點可以類似的解讀。唯一特殊的是最右邊OUTPUT欄下的輸出節點。這個節點中除了顯示了區分平面之外,還顯示了訓練資料,也就是希望通過神經網路區分的資料點。從上圖中可以看到,經過兩層的隱藏層,輸出節點的區分平面已經可以完全區分不同顏色的資料點。 
綜上所述,使用神經網路解決分類問題主要可以分為以下4個步驟。 
1.提取問題中實體的特徵向量作為神經網路的輸入。不同的實體可以提取不同的特徵向量,本書中將不具體介紹。本文假設作為神經網路輸入的特徵向量可以直接從資料集中獲取。 
2.定義神經網路的結構,並定義如何從神經網路的輸入得到輸出。這個過程就是神經網路的前向傳播演算法,以後將進行詳細介紹。 
3.通過訓練資料來調整神經網路中引數的取值,這就是訓練神經網路的過程。下一節將先介紹TensorFlow中表示神經網路引數的方法,然後下一節將大致介紹神經網路優化演算法的框架,並介紹如何通過TensorFlow實現這個框架。 
4.使用訓練好的神經網路來預測未知的資料。這個過程和步驟2中的前向傳播演算法一致,本文不再贅述。①在真實問題中,一般會從實體中抽取更多的特徵,所以一個實體會被表示為高維空間中的點。
②有一些神經網路是可以跨層連線的,但目前大部分神經網路結構中都只是相鄰兩層有連線。
③在TensorFlow遊樂場網站上,邊的顏色有黃色(文中淺色部分)和藍色(文中深色部分)的區別,黃色越深表示負得越大,藍色越深表示正得越大。
④類似邊上的顏色,TensorFlow遊樂場網站中,點上的顏色也有黃色(文中淺色部分)和藍色(文中深色部分),和邊上顏色類似,黃色越深表示負得越大,藍色越深表示正得越大。
⑤在TensorFlow遊樂場中,y軸左側為黃色(文中淺色部分),右側為藍色(文中深色部分)。
--------------------- 
作者:博文視點 
來源:CSDN 
原文:https://blog.csdn.net/broadview2006/article/details/80128755 
版權宣告:本文為博主原創文章,轉載請附上博文連結!