1個TensorFlow樣例,終於明白如何實現前向傳播過程?
神經網路的結構,就是不同神經元間的連線結構
–圖示了一個三層全連線神經網路。
神經元結構的輸出,是所有輸入的加權、加上偏置項,再經過一個啟用(傳遞)函式得到。
全連線神經網路
全連線神經網路,就是相鄰兩層之間,任意兩個節點之間都有連線。
–這也是其與後面介紹的卷積層、LSTM結構的區分。
–除了輸入層,所有節點都代表了一個神經元的結構。
計算神經網路的前向傳播結果,要三部分資訊。
–第一個部分是神經網路的輸入,這個輸入就是從實體中提取的特徵向量。
–第二個部分為神經網路的連線結構。神經網路是由神經元構成的,神經網路的結構,給出不同神經元之間輸入、輸出的連線關係。
–第三部分是每個神經元中的引數。
示例分析
圖中,a11節點有兩個輸入,分別是x1和x2的輸出,而a11的輸出是節點Y的輸入。
–用w來表示神經元中的權重,b表示偏置項。
–w的上標表明瞭神經網路的層數,如w(1)表示第一層節點的引數,而w(2)表示第二層節點的引數。
–w的下標表明瞭連線節點編號,比如w 1,2 (1)表示連線x1和a12節點的邊上的權重。
給定神經網路的輸入、神經網路的結構,以及邊上權重,就可以通過前向傳播演算法,來計算出神經網路的輸出
•下面公式給出了在ReLU啟用函式下,前圖神經網路前向傳播的過程。此處假設x1=0.7, x2=0.9
–a11=f(W1,1(1)x1+W2,1(1)x2+b1(1))
–=f(0.7×0.2+0.9×0.3+(-0.5)) =f(-0.09)=0
–a12=f(W1,2(1)x1+W2,2(1)x2+b2(1))
–=f(0.7×0.1+0.9×(-0.5)+0.1)=f(-0.28)=0
–a13=f(W1,3(1)x1+W2,3(1)x2+b3(1))
–=f(0.7×0.4+0.9×0.2+(-0.1))=f(0.36)=0.36
–Y=f(W1,1(2)a11+W1,2(2)a12+W1,3(2)a13+b1(2))
–=f(0.054+0.028+(-0.072)+0.1)=f(0.11)=0.11
•在虛擬機器中執行相應的chap3中的前向神經網路例子,檢視相關的圖計算。
在TensorFlow中,可以通過矩陣乘法的方法,實現神經網路的前向傳播過程。
–a = tf.nn.relu(tf.matmul(x, w1)+b1)
–y = tf.nn.relu(tf.matmul(a, w2)+b2)
在上面的程式碼中並沒有定義w1、w2、b1、b2,
–TensorFlow可以通過變數(tf.Variable),來儲存和更新神經網路中的引數。
比如通過下面語句可以定義w1:
–weights = tf.Variable(tf.random_normal([2, 3], stddev=2))
–這段程式碼呼叫了TensorFlow變數的宣告函式tf.Variable。在變數宣告函式中,給出了初始化這個變數的方法。
TensorFlow中變數的初始值,可以設定成隨機數、常數或者是通過其他變數的初始值,計算得到
樣例中,tf.random_normal([2, 3], stddev=2)會產生一個2×3的矩陣,矩陣中的元素是均值為0,標準差為2的隨機數。
–注:標準差,也稱為標準偏差
tf.random_normal函式,可以通過引數mean,來指定平均值,在沒有指定時預設為0。
–通過滿足正態分佈的隨機數,來初始化神經網路中的引數,是一個常用的方法。
下面的樣例,介紹瞭如何通過變數,實現神經網路的引數,並實現前向傳播的過程。
import tensorflowas tf
# 宣告變數。
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
b1 = tf.Variable(tf.constant(0.0, shape=[3]))
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
b2 = tf.Variable(tf.constant(0.0, shape=[1]))
# 暫時將輸入的特徵向量定義為一個常量。這裡x是一個1*2的矩陣。
x = tf.constant([[0.7, 0.9]])
# 實現神經網路的前向傳播過程,並計算神經網路的輸出。
a = tf.nn.relu(tf.matmul(x, w1)+b1)
y = tf.nn.relu(tf.matmul(a, w2)+b2)
sess= tf.Session()
# 執行變數初始化過程。
init_op= tf.global_variables_initializer()
sess.run(init_op)
# 輸出[[3.95757794]]
print(sess.run(y))
–圖示了一個三層全連線神經網路。
神經元結構的輸出,是所有輸入的加權、加上偏置項,再經過一個啟用(傳遞)函式得到。
全連線神經網路
全連線神經網路,就是相鄰兩層之間,任意兩個節點之間都有連線。
–這也是其與後面介紹的卷積層、LSTM結構的區分。
–除了輸入層,所有節點都代表了一個神經元的結構。
計算神經網路的前向傳播結果,要三部分資訊。
–第一個部分是神經網路的輸入,這個輸入就是從實體中提取的特徵向量。
–第二個部分為神經網路的連線結構。神經網路是由神經元構成的,神經網路的結構,給出不同神經元之間輸入、輸出的連線關係。
–第三部分是每個神經元中的引數。
示例分析
圖中,a11節點有兩個輸入,分別是x1和x2的輸出,而a11的輸出是節點Y的輸入。
–用w來表示神經元中的權重,b表示偏置項。
–w的上標表明瞭神經網路的層數,如w(1)表示第一層節點的引數,而w(2)表示第二層節點的引數。
–w的下標表明瞭連線節點編號,比如w 1,2 (1)表示連線x1和a12節點的邊上的權重。
給定神經網路的輸入、神經網路的結構,以及邊上權重,就可以通過前向傳播演算法,來計算出神經網路的輸出
•下面公式給出了在ReLU啟用函式下,前圖神經網路前向傳播的過程。此處假設x1=0.7, x2=0.9
–a11=f(W1,1(1)x1+W2,1(1)x2+b1(1))
–=f(0.7×0.2+0.9×0.3+(-0.5)) =f(-0.09)=0
–a12=f(W1,2(1)x1+W2,2(1)x2+b2(1))
–=f(0.7×0.1+0.9×(-0.5)+0.1)=f(-0.28)=0
–a13=f(W1,3(1)x1+W2,3(1)x2+b3(1))
–=f(0.7×0.4+0.9×0.2+(-0.1))=f(0.36)=0.36
–Y=f(W1,1(2)a11+W1,2(2)a12+W1,3(2)a13+b1(2))
–=f(0.054+0.028+(-0.072)+0.1)=f(0.11)=0.11
•在虛擬機器中執行相應的chap3中的前向神經網路例子,檢視相關的圖計算。
在TensorFlow中,可以通過矩陣乘法的方法,實現神經網路的前向傳播過程。
–a = tf.nn.relu(tf.matmul(x, w1)+b1)
–y = tf.nn.relu(tf.matmul(a, w2)+b2)
在上面的程式碼中並沒有定義w1、w2、b1、b2,
–TensorFlow可以通過變數(tf.Variable),來儲存和更新神經網路中的引數。
比如通過下面語句可以定義w1:
–weights = tf.Variable(tf.random_normal([2, 3], stddev=2))
–這段程式碼呼叫了TensorFlow變數的宣告函式tf.Variable。在變數宣告函式中,給出了初始化這個變數的方法。
TensorFlow中變數的初始值,可以設定成隨機數、常數或者是通過其他變數的初始值,計算得到
樣例中,tf.random_normal([2, 3], stddev=2)會產生一個2×3的矩陣,矩陣中的元素是均值為0,標準差為2的隨機數。
–注:標準差,也稱為標準偏差
tf.random_normal函式,可以通過引數mean,來指定平均值,在沒有指定時預設為0。
–通過滿足正態分佈的隨機數,來初始化神經網路中的引數,是一個常用的方法。
下面的樣例,介紹瞭如何通過變數,實現神經網路的引數,並實現前向傳播的過程。
import tensorflowas tf
# 宣告變數。
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
b1 = tf.Variable(tf.constant(0.0, shape=[3]))
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
b2 = tf.Variable(tf.constant(0.0, shape=[1]))
# 暫時將輸入的特徵向量定義為一個常量。這裡x是一個1*2的矩陣。
x = tf.constant([[0.7, 0.9]])
# 實現神經網路的前向傳播過程,並計算神經網路的輸出。
a = tf.nn.relu(tf.matmul(x, w1)+b1)
y = tf.nn.relu(tf.matmul(a, w2)+b2)
sess= tf.Session()
# 執行變數初始化過程。
init_op= tf.global_variables_initializer()
sess.run(init_op)
# 輸出[[3.95757794]]
print(sess.run(y))
sess.close()
相關文章
- TensorFlow筆記-04-神經網路的實現過程,前向傳播筆記神經網路
- Tensorflow實現神經網路的前向傳播神經網路
- [原始碼解析]PyTorch如何實現前向傳播(1) --- 基礎類(上)原始碼PyTorch
- [原始碼解析]PyTorch如何實現前向傳播(2) --- 基礎類(下)原始碼PyTorch
- CUDA教學(1):前向轉播
- 如何通過梯度檢驗幫助實現反向傳播梯度反向傳播
- LSTM模型與前向反向傳播演算法模型反向傳播演算法
- 終於弄明白了 Singleton,Transient,Scoped 的作用域是如何實現的
- 神經網路前向和後向傳播推導(一):概覽神經網路
- [原始碼解析] Pytorch 如何實現後向傳播 (2)---- 引擎靜態結構原始碼PyTorch
- [原始碼解析] Pytorch 如何實現後向傳播 (3)---- 引擎動態邏輯原始碼PyTorch
- [原始碼解析] PyTorch 如何實現後向傳播 (4)---- 具體演算法原始碼PyTorch演算法
- 卷積神經網路(CNN)前向傳播演算法卷積神經網路CNN演算法
- CAS實現單點登入SSO執行原理探究(終於明白了)
- 實現一個前向渲染的Phong模型(一)模型
- 使用TensorFlow 來實現一個簡單的驗證碼識別過程
- 神經網路前向和後向傳播推導(二):全連線層神經網路
- 《神經網路的梯度推導與程式碼驗證》之CNN前向和反向傳播過程的程式碼驗證神經網路梯度CNN反向傳播
- 如何實現子元件向父元件傳值元件
- [原始碼解析] PyTorch 分散式(12) ----- DistributedDataParallel 之 前向傳播原始碼PyTorch分散式Parallel
- 深度神經網路(DNN)模型與前向傳播演算法神經網路DNN模型演算法
- vertica 如何實現儲存過程?儲存過程
- 如何通過UGC傳播網路口碑GC
- 使用Tensorflow實現的基於LSTM的預測例項
- 《神經網路的梯度推導與程式碼驗證》之FNN(DNN)前向和反向傳播過程的程式碼驗證神經網路梯度DNN反向傳播
- 前端實操案例丨如何實現JS向Vue傳值前端JSVue
- 如何快速實現一個無縫輪播效果
- 花了一個星期,我終於把RPC框架整明白了!RPC框架
- TensorFlow搭建神經網路最佳實踐樣例神經網路
- 【Tensorflow_DL_Note1】Windows下Tensorflow的安裝過程詳解Windows
- 迴圈神經網路(RNN)模型與前向反向傳播演算法神經網路RNN模型反向傳播演算法
- 直播帶貨軟體開發過程中,如何實現圖片上傳
- 以swoole為例,學習如何實現協程
- 【python實現卷積神經網路】卷積層Conv2D反向傳播過程Python卷積神經網路反向傳播
- promise實現過程Promise
- 終於弄明白了 RocketMQ 的儲存模型MQ模型
- 終於明白了Handler的執行機制
- 神經網路入門篇之深層神經網路:詳解前向傳播和反向傳播(Forward and backward propagation)神經網路反向傳播Forward