關於神經網路nn結構,在最近的課程中推進了重新認識了下nn結構。
多層向前神經網路由3部分組成,輸入層(input layer),隱藏層(hidden layers),輸出層(output layers),如下圖:
張量:張量就是多維陣列(列表),用「階」表示張量的維度。
0 階張量稱作標量,表示乙個單獨的數;
舉例 s=123
1 階張量稱作向量,表示乙個一維陣列;
舉例 v=[1,2,3]
2 階張量稱作矩陣,表示乙個二維陣列,它可以有 i 行 j 列個元素,每個元素可
以用行號和列號共同索引到;
舉例 m=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
判斷張量是幾階的,就通過張量右邊的方括號數,0 個是 0 階,n 個是 n 階,張
量可以表示 0 階到 n 階陣列(列表);
舉例 t=[ [ [... ] ] ]為 3 階。
tensorflow 的資料型別有 tf.float32、tf.int32 等。
計算圖(graph):搭建神經網路的計算過程,是承載乙個或多個計算節點的一張圖,只搭建網路,不運算。
會話(session):執行計算圖中的節點運算。
也就是說:用計算圖搭建神經網路,用會話執行計算圖,優化線上的權重(引數),得到模型。
看乙個例子: 神經網路的基本模型是神經元,神經元的基本模型其實就是數學中的乘、加運算。我們搭建如下的計算圖:
x1、x2 表示輸入,w1、w2 分別是 x1 到 y 和 x2 到 y 的權重,y=x1*w1+x2*w2。
我們在jupyter上來實現上述計算圖:
可以列印出這樣一句話:tensor(「matmul:0」, shape(1,1), dtype=float32)。
結果的意思為 y 是乙個名稱為 matmul:0 的張量, shape=(1,1)表示乙個一行一列的矩陣,dtype=float32 表示資料型別為浮點型。從這裡我們可以看出,print 的結果顯示 y 是乙個張量,只搭建承載計算過程的計算圖,並沒有運算,如果我們想得到運算結果就要用到「會話 session()」了。
執行計算圖中的節點運算。
#執行會話並列印出執行後的結果
可以列印出這樣的結果:[[11.]]
我們可以看到,執行 session()會話前只列印出 y 是個張量的提示,執行 session()會話後列印出了 y 的結果 1.0*3.0 + 2.0*4.0 = 11.0。
反觀計算圖:
輸入層和輸出層都只有1層,隱藏層可以有n層,每一層由若干個節點單元組成。上圖的神經網路是乙個兩層的神經網路,輸入層不算在內。
將例項特徵向量傳入輸入層,經過隱藏層,一系列的計算,最終可以得到輸出層的結果。輸入層後面的每一層可以通過上一層的加權求和再進行非線性方程轉化得到。
這個加權求和是怎麼做的呢?我們可以看到前一層與後一層單元之間有一些連線,每一條連線就對應乙個權重,將前一層的單元與對應 的權重相乘再相加,最後進行非線性方程轉化就能得到後一層每個單元的值。每一層的輸出是下一層的輸入。因為加權求和之後以後計算的方程是非線性的,所以理論上講有乙個很強大的功能,只要訓練集足夠大,隱藏層足夠多,可以用神經網路模擬出任何方程。今天隨著計算能力的大大增強以及資料集增大,神經網路為前身延伸出了的強大的深度學習,深度學習的強大就在於資料集和計算能力大大增強的情況下可以用更多的隱藏層模擬出更多的方程。
簡而言之:給定乙個模型,經過多次的訓練,模型會建立其對問題的相對準確的解決方案,
神經網路的實現過程:
1、準備資料集,提取特徵,作為輸入餵給神經網路(neural network,nn)
2、搭建 nn 結構,從輸入到輸出(先搭建計算圖,再用會話執行)
( nn 前向傳播演算法 -> 計算輸出)
3、大量特徵資料餵給 nn,迭代優化 nn 引數
( nn 反向傳播演算法 -> 優化引數訓練模型)
4、使用訓練好的模型**和分類
運用這些網路模型可實現函式逼近、資料聚類、模式分類、優化計算等功能。因此,神經網路廣泛應用於人工智慧、自動控制、機械人、統計學等領域的資訊處理中。雖然神經網路的應用很廣,但是在具體的使用過程中到底應當選擇哪種網路結構比較合適是值得考慮的。這就需要我們對各種神經網路結構有乙個較全面的認識。
最後在測試案例的時候,出現了關於python語法的問題,不得不說,python語法真的很嚴格。
這個錯誤的解釋是:indentationerror: unexpected indent python編譯器是在告訴你 你的檔案格式不對了,需要檢查下空格和tab縮排有沒有處理好了。
python嚴格地要求**縮排,縮排的**塊相對於上一級是從屬關係。
用if語句舉個例子:
if a==2: print 'hello world'if語句的條件為真時會執行print語句,print語句是if語句的從屬**塊,代表從屬關係,print語句之前有4個空格。
如果if語句沒有任何從屬的**塊就會報錯expected an indented block。與if語句類似的,必須包含從屬**塊的還有while、for、try-except等。
無規矩不成方圓,儘管python語法簡單,但基本的格式需要多家注意啊!
Tensorflow卷積神經網路
卷積神經網路 convolutional neural network,cnn 是一種前饋神經網路,在計算機視覺等領域被廣泛應用.本文將簡單介紹其原理並分析tensorflow官方提供的示例.關於神經網路與誤差反向傳播的原理可以參考作者的另一篇博文bp神經網路與python實現.卷積是影象處理中一種...
Tensorflow 深層神經網路
維基百科對深度學習的定義 一類通過多層非線性變換對高複雜性資料建模演算法的合集.tensorflow提供了7種不同的非線性啟用函式,常見的有tf.nn.relu,tf.sigmoid,tf.tanh.使用者也可以自己定義啟用函式.3.1.1 交叉熵 用途 刻畫兩個概率分布之間的距離,交叉熵h越小,兩...
Tensorflow(三) 神經網路
1 前饋傳播 y x w1 b1 w2 b2 import tensorflow as tf x tf.constant 0.9,0.85 shape 1,2 w1 tf.variable tf.random normal 2,3 stddev 1,seed 1 name w1 w2 tf.vari...