Tensorflow實現神經網路的前向傳播

Geeksongs發表於2020-06-22

我們構想有一個神經網路,輸入為兩個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在工業界的應用還是十分廣泛的,想要創業和在業界工作的朋友就可以好好了解一下了!

相關文章