欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python循環(huán)神經(jīng)網(wǎng)絡(luò)RNN函數(shù)tf.nn.dynamic_rnn使用

 更新時間:2022年05月05日 10:20:46   作者:Bubbliiiing  
這篇文章主要為大家介紹了python循環(huán)神經(jīng)網(wǎng)絡(luò)RNN的tf.nn.dynamic_rnn使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

學(xué)習(xí)前言

已經(jīng)完成了RNN網(wǎng)絡(luò)的構(gòu)建,但是我們對于RNN網(wǎng)絡(luò)還有許多疑問,特別是tf.nn.dynamic_rnn函數(shù),其具體的應(yīng)用方式我們并不熟悉,查詢了一下資料,我心里的想法是這樣的。

tf.nn.dynamic_rnn的定義

tf.nn.dynamic_rnn(
    cell,
    inputs,
    sequence_length=None,
    initial_state=None,
    dtype=None,
    parallel_iterations=None,
    swap_memory=False,
    time_major=False,
    scope=None
)
  1. cell:上文所定義的lstm_cell。
  2. inputs:RNN輸入。如果time_major==false(默認(rèn)),則必須是如下shape的tensor:[batch_size,max_time,…]或此類元素的嵌套元組。如果time_major==true,則必須是如下形狀的tensor:[max_time,batch_size,…]或此類元素的嵌套元組。
  3. sequence_length:Int32/Int64矢量大小。用于在超過批處理元素的序列長度時復(fù)制通過狀態(tài)和零輸出。因此,它更多的是為了性能而不是正確性。
  4. initial_state:上文所定義的_init_state。
  5. dtype:數(shù)據(jù)類型。
  6. parallel_iterations:并行運行的迭代次數(shù)。那些不具有任何時間依賴性并且可以并行運行的操作將是。這個參數(shù)用時間來交換空間。值>>1使用更多的內(nèi)存,但花費的時間更少,而較小的值使用更少的內(nèi)存,但計算需要更長的時間。
  7. time_major:輸入和輸出tensor的形狀格式。如果為True,這些張量的形狀必須是[max_time,batch_size,depth]。如果為False,這些張量的形狀必須是[batch_size,max_time,depth]。使用time_major=true會更有效率,因為它可以避免在RNN計算的開始和結(jié)束時進(jìn)行換位。但是,大多數(shù)TensorFlow數(shù)據(jù)都是批處理主數(shù)據(jù),因此默認(rèn)情況下,此函數(shù)為False。
  8. scope:創(chuàng)建的子圖的可變作用域;默認(rèn)為“RNN”。

其返回值為outputs,states。

outputs:RNN的最后一層的輸出,是一個tensor。如果為time_major== False,則它的shape為[batch_size,max_time,cell.output_size]。如果為time_major== True,則它的shape為[max_time,batch_size,cell.output_size]。

states:是每一層的最后一個step的輸出,是一個tensor。state是最終的狀態(tài),也就是序列中最后一個cell輸出的狀態(tài)。一般情況下states的形狀為 [batch_size, cell.output_size],但當(dāng)輸入的cell為BasicLSTMCell時,states的形狀為[2,batch_size, cell.output_size ],其中2也對應(yīng)著LSTM中的cell state和hidden state。

tf.nn.dynamic_rnn的使用舉例

單層實驗

我們首先使用單層的RNN進(jìn)行實驗。

使用的代碼為:

import tensorflow as tf
import numpy as np
n_steps = 2         #兩個step
n_inputs = 3        #每個input是三維
n_nerve = 4         #神經(jīng)元個數(shù)
X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])
basic_cell = tf.nn.rnn_cell.BasicRNNCell(num_units=n_nerve)
outputs, states = tf.nn.dynamic_rnn(basic_cell, X, dtype=tf.float32)
init = tf.global_variables_initializer()
X_batch = np.array([[[0, 1, 2], [1, 2, 3]],
                    [[3, 4, 5], [4, 5, 6]],
                    [[5, 6, 7], [6, 7, 8]],
                    [[7, 8, 9], [8, 9, 10]]])
with tf.Session() as sess:
    sess.run(init)
    outputs_val, states_val = sess.run([outputs, states], feed_dict={X: X_batch})
    print("outputs:", outputs_val) 
    print("states:", states_val)

輸出的log為:

outputs: [[[0.92146313 0.6069534  0.24989243 0.9305415 ]
		   [0.9234855  0.8470011  0.7865616  0.99935764]]
 	  	   [[0.9772771  0.9713368  0.99483156 0.9999987 ]
  	 	   [0.9753329  0.99538314 0.9988139  1.        ]]
		   [[0.9901842  0.99558043 0.9998626  1.        ]
  		   [0.989398   0.9992842  0.9999691  1.        ]]
 		   [[0.99577546 0.9993256  0.99999636 1.        ]
  		   [0.9954579  0.9998903  0.99999917 1.        ]]]
states: [[0.9234855  0.8470011  0.7865616  0.99935764]
 		 [0.9753329  0.99538314 0.9988139  1.        ]
		 [0.989398   0.9992842  0.9999691  1.        ]
 		 [0.9954579  0.9998903  0.99999917 1.        ]]
  • Xin的shape是[batch_size = 4, max_time = 2, depth = 3]。
  • outputs的shape是[batch_size = 4, max_time = 2, cell.output_size = 4]。
  • states的shape是[batch_size = 4, cell.output_size = 4]

在time_major = False的時候:

  • Xin、outputs、states的第一維,都是batch_size,即用于訓(xùn)練的batch的大小。
  • Xin、outputs的第二維,都是max_time,在本文中對應(yīng)著RNN的兩個step。
  • outputs、states的最后一維指的是每一個RNN的Cell的輸出,本文的RNN的Cell的n_nerve為4,所以cell.output_size = 4。Xin的最后一維指的是每一個輸入樣本的維度。
  • outputs對應(yīng)的是RNN的最后一層的輸出,states對應(yīng)的是每一層的最后一個step的輸出。在RNN的層數(shù)僅1層的時候,states的輸出對應(yīng)為outputs最后的step的輸出。

多層實驗

接下來我們使用兩層的RNN進(jìn)行實驗。

使用的代碼為:

import tensorflow as tf
import numpy as np
n_steps = 2         #兩個step
n_inputs = 3        #每個input是三維
n_nerve = 4         #神經(jīng)元個數(shù)
X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])
#定義多層
layers = [tf.nn.rnn_cell.BasicRNNCell(num_units=n_nerve) for i in range(2)]
multi_layer_cell = tf.contrib.rnn.MultiRNNCell(layers)
outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)
init = tf.global_variables_initializer()
X_batch = np.array([[[0, 1, 2], [1, 2, 3]],
                    [[3, 4, 5], [4, 5, 6]],
                    [[5, 6, 7], [6, 7, 8]],
                    [[7, 8, 9], [8, 9, 10]]])
with tf.Session() as sess:
    sess.run(init)
    outputs_val, states_val = sess.run([outputs, states], feed_dict={X: X_batch})
    print("outputs:", outputs_val) 
    print("states:", states_val)

輸出的log為:

outputs: [[[-0.577939   -0.3657474  -0.21074213  0.8188577 ]
		   [-0.67090076 -0.47001836 -0.40080917  0.6026697 ]]
 		   [[-0.72777444 -0.36500326 -0.7526911   0.86113644]
  		   [-0.7928404  -0.6413429  -0.61007065  0.787065  ]]
 		   [[-0.7537433  -0.35850585 -0.83090436  0.8573037 ]
  		   [-0.82016116 -0.6559162  -0.7360482   0.7915131 ]]
 		   [[-0.7597004  -0.35760364 -0.8450942   0.8567379 ]
  		   [-0.8276395  -0.6573326  -0.7727142   0.7895221 ]]]
states: (array([[-0.71645427, -0.0585744 ,  0.95318353,  0.8424729 ],
       		   [-0.99845   , -0.5044571 ,  0.9955299 ,  0.9750488 ],
       		   [-0.99992913, -0.8408632 ,  0.99885863,  0.9932366 ],
       		   [-0.99999577, -0.9672    ,  0.9996866 ,  0.99814796]],
      		   dtype=float32), 
      	array([[-0.67090076, -0.47001836, -0.40080917,  0.6026697 ],
       		   [-0.7928404 , -0.6413429 , -0.61007065,  0.787065  ],
       		   [-0.82016116, -0.6559162 , -0.7360482 ,  0.7915131 ],
       		   [-0.8276395 , -0.6573326 , -0.7727142 ,  0.7895221 ]],
      		   dtype=float32))

可以看出來outputs對應(yīng)的是RNN的最后一層的輸出,states對應(yīng)的是每一層的最后一個step的輸出,在完成了兩層的定義后,outputs的shape并沒有變化,而states的內(nèi)容多了一層,分別對應(yīng)RNN的兩層輸出。

state中最后一層輸出對應(yīng)著outputs最后一步的輸出。

以上就是python循環(huán)神經(jīng)網(wǎng)絡(luò)RNN函數(shù)tf.nn.dynamic_rnn使用的詳細(xì)內(nèi)容,更多關(guān)于RNN函數(shù)tf.nn.dynamic_rnn的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 關(guān)于你不想知道的所有Python3 unicode特性

    關(guān)于你不想知道的所有Python3 unicode特性

    我的讀者知道我是一個喜歡痛罵Python3 unicode的人。這次也不例外。我將會告訴你用unicode有多痛苦和為什么我不能閉嘴。我花了兩周時間研究Python3,我需要發(fā)泄我的失望。在這些責(zé)罵中,仍然有有用的信息,因為它教我們?nèi)绾蝸硖幚鞵ython3。如果沒有被我煩到,就讀一讀吧
    2014-11-11
  • Python如何識別 MySQL 中的冗余索引

    Python如何識別 MySQL 中的冗余索引

    冗余索引也是一個非常重要的巡檢目,表中索引過多,會導(dǎo)致表空間占用較大,索引的數(shù)量與表的寫入速度與索引數(shù)成線性關(guān)系(微秒級),如果發(fā)現(xiàn)有冗余索引,建議立即審核刪除,這篇文章主要介紹了Python 識別 MySQL 中的冗余索引,需要的朋友可以參考下
    2022-10-10
  • 學(xué)會python操作excel永不加班系列

    學(xué)會python操作excel永不加班系列

    這篇文章主要介紹了python操作excel的詳解,,需要的朋友可以參考下,小編覺得這篇文章寫的還不錯,希望能夠給你帶來幫助
    2021-11-11
  • Python+Pygame實戰(zhàn)之炫舞小游戲的實現(xiàn)

    Python+Pygame實戰(zhàn)之炫舞小游戲的實現(xiàn)

    提到QQ炫舞,可能很多人想到的第一個詞是“青春”。恍然間,這個承載了無數(shù)人回憶與時光的游戲品牌,已經(jīng)走到了第十幾個年頭。今天小編就來給大家嘗試做一款簡單的簡陋版的小游戲——《舞動青春*炫舞》,感興趣的可以了解一下
    2022-12-12
  • 樹莓派實現(xiàn)移動拍照

    樹莓派實現(xiàn)移動拍照

    這篇文章主要為大家詳細(xì)介紹了樹莓派實現(xiàn)移動拍照,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • python之pyinstaller組件打包命令和異常解析實戰(zhàn)

    python之pyinstaller組件打包命令和異常解析實戰(zhàn)

    前段時間在制作小工具的時候,直接在命令行用pyinstaller工具打包成功后,啟動exe可執(zhí)行文件的時候各種報錯, 今天,我們就分享一下踩坑經(jīng)過,需要的朋友可以參考下
    2021-09-09
  • 使用Python對MySQL數(shù)據(jù)操作

    使用Python對MySQL數(shù)據(jù)操作

    本文介紹Python3使用PyMySQL連接數(shù)據(jù)庫,并實現(xiàn)簡單的增刪改查。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • python 申請內(nèi)存空間,用于創(chuàng)建多維數(shù)組的實例

    python 申請內(nèi)存空間,用于創(chuàng)建多維數(shù)組的實例

    今天小編就為大家分享一篇python 申請內(nèi)存空間,用于創(chuàng)建多維數(shù)組的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python 遍歷子文件和所有子文件夾的代碼實例

    Python 遍歷子文件和所有子文件夾的代碼實例

    本篇文章主要介紹了Python 遍歷子文件和所有子文件夾的代碼實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • 利用Python實現(xiàn)快速批量轉(zhuǎn)換HEIC文件

    利用Python實現(xiàn)快速批量轉(zhuǎn)換HEIC文件

    HEIC 是蘋果采用的新的默認(rèn)圖片格式,它能在不損失圖片畫質(zhì)的情況下,減少圖片大小。本篇文章將使用 Python 批量實現(xiàn) HEIC 圖片文件的格式轉(zhuǎn)換,需要的可以參考一下
    2022-07-07

最新評論