Tensorflow實現神經網路的前向傳播
阿新 • • 發佈:2020-06-23
我們構想有一個神經網路,輸入為兩個input,中間有一個hidden layer,這個hiddenlayer當中有三個神經元,最後有一個output。
圖例如下:
在實現這個神經網路的前向傳播之前,我們先補充一下重要的知識。
一.權重w以及input的初始化
我們初始化權重w的方法為隨機生成這些權重,一般可以使用這些隨機生成的資料正好在正態分佈的曲線上,這也是最符合生成符合自然規律的隨機數生成方法:
import tensorflow as tf #一般情況下神經網路上的引數是w的數列,當然我們一般使用隨機數來生成這些引數 w=tf.Variable(tf.random_normal([2,3],stddev=2,mean=0,seed=1)) #其中stddev表示標準差,mean表示均值,【】表示隨機生成正態分佈的數值的shape
這樣我們的權重就生成了,我們初始化input的方法有有以下幾種,虛擬碼如下:
除了這種方式,我們還可以使用 tf.constant([1,2,3]),來生成指定數值 tf.zeros([2,3],int32),用來生成全零 tf.ones([2,3],int32),同來生成全1 tf.fill([3,2],6),生成指定數值
下面我們編寫一個僅有一個初始值input的神經網路,並利用tensorflow實現對其進行前向傳播。因為初始值僅有一個,實現的方法一共有兩種,我們來看看第一種:
二.神經網路的前向傳播(僅具一個初始值,方法一)
import tensorflow as tf x=tf.constant([[0.7,0.5]])#注意這裡,寫了兩個中括號啊! w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1)) w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1)) #然後定義向前傳播的過程 a=tf.matmul(x,w1) y=tf.matmul(a,w2) #利用session計算前向傳播的結果 with tf.Session() as sess: init_op=tf.global_variables_initializer() sess.run(init_op) print(sess.run(y))#這裡使用run(y)打印出結果,因為最後一個輸出我們定義的是y
輸出:
[[3.0904665]]
三.神經網路的前向傳播(僅具一個初始值,方法二)
我們利用placeholder進行資料的初始化,賦值給input,使用placeholder既可以賦一個值,也可以賦多個值,這也是它很常見的原因,程式碼如下:
import tensorflow as tf x=tf.placeholder(tf.float32,shape=(1,2)) w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1)) w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1)) #同樣地定義前向傳播的過程 a=tf.matmul(x,w1) y=tf.matmul(a,w2) #利用session計算前向傳播的結果 with tf.Session() as sess: init_op=tf.global_variables_initializer() sess.run(init_op) print(sess.run(y,feed_dict={x:[[0.7,0.5]]}))#這裡使用run(y)打印出結果,因為最後一個輸出我們定義的是y
輸出:
[[3.0904665]]
結果和方法一相同。接下來就可以對多個數據進行前向傳播了,也是利用placeholder方法
四.神經網路的前向傳播(多個初始值)
程式碼如下:
import tensorflow as tf x=tf.placeholder(tf.float32,shape=(None,2)) w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1)) w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1) #同樣地定義前向傳播的過程 a=tf.matmul(x,w1) y=tf.matmul(a,w2 #利用session計算前向傳播的結果 with tf.Session() as sess: init_op=tf.global_variables_initializer() sess.run(init_op) print(sess.run(y,feed_dict={x:[[0.7,0.5],[0.2,0.3],[0.5,0.5]]}))
輸出:
[[3.0904665] [1.2236414] [2.5171587]]
完畢!看起來還是挺簡單的吧!tensorflow在工業界的應用還是十分廣泛的,想要創業和在業界工作的朋友就可以好好了解一下了!