您好,登錄后才能下訂單哦!
這篇文章給大家介紹基本RNN的Tensorflow實現是怎樣的,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
今天我們一起看下在tensorflow中基本的RNN是怎么實現的。
首先,為了更好的理解RNN的運行機制,我們不用tensorflow的相關RNN的操作,來實現一個簡單的RNN模型。這里我們創建一個初識循環神經網絡(RNN)
中所呈現的一個擁有5個循環神經元的一層RNN網絡,其中激活函數用tanh,并且假設該RNN僅運行兩個時刻,每個時刻的輸入向量的大小為3,通過兩個時刻來顯示。代碼如下:
n_inputs = 3
n_neurons = 5
X0 = tf.placeholder(tf.float32, [None, n_inputs])
X1 = tf.placeholder(tf.float32, [None, n_inputs])
Wx = tf.Variable(tf.random_normal(shape=[n_inputs, n_neurons],dtype=tf.float32))
Wy = tf.Variable(tf.random_normal(shape=[n_neurons,n_neurons],dtype=tf.float32))
b = tf.Variable(tf.zeros([1, n_neurons], dtype=tf.float32))
Y0 = tf.tanh(tf.matmul(X0, Wx) + b)
Y1 = tf.tanh(tf.matmul(Y0, Wy) + tf.matmul(X1, Wx) + b)
init = tf.global_variables_initializer()
這個網絡有點繞,咋一看像兩層向前傳輸的網絡,其實不然,首先,相同的權重和偏置項都被兩個層采用了。其次,在每一層都有輸入,并且每一層都有單獨的輸出。為了運行這個模型,我們需要在兩個時刻都對模型進行輸入數據,如下:
import numpy as np
# Mini-batch: instance 0,instance 1,instance 2,instance 3
X0_batch = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 0, 1]]) # t = 0
X1_batch = np.array([[9, 8, 7], [0, 0, 0], [6, 5, 4], [3, 2, 1]]) # t = 1
with tf.Session() as sess:
init.run()
Y0_val, Y1_val = sess.run([Y0, Y1], feed_dict={X0: X0_batch, X1: X1_batch})
上面的mini-batch包含了兩個時刻的輸入,每個時刻有4個樣本,其中每個樣本包含3個特征。最后的Y0_val和Y1_val包括了兩個時刻的網絡所有神經元在mini-batch上的輸出。 下面是輸出的結果:
>>> print(Y0_val) # output at t = 0
[[-0.2964572 0.82874775 -0.34216955 -0.75720584 0.19011548] # instance 0
[-0.12842922 0.99981797 0.84704727 -0.99570125 0.38665548] # instance 1
[ 0.04731077 0.99999976 0.99330056 -0.999933 0.55339795] # instance 2
[ 0.70323634 0.99309105 0.99909431 -0.85363263 0.7472108 ]] # instance 3
>>> print(Y1_val) # output at t = 1
[[ 0.51955646 1. 0.99999022 -0.99984968 -0.24616946] # instance 0
[-0.70553327 -0.11918639 0.48885304 0.08917919 -0.26579669] # instance 1
[-0.32477224 0.99996376 0.99933046 -0.99711186 0.10981458] # instance 2
[-0.43738723 0.91517633 0.97817528 -0.91763324 0.11047263]] # instance 3
關于基本RNN的Tensorflow實現是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。