校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 變長雙向rnn的正確使用姿勢教學

變長雙向rnn的正確使用姿勢教學

熱門標簽:朝陽手機外呼系統 北瀚ai電銷機器人官網手機版 地圖標注面積 所得系統電梯怎樣主板設置外呼 小蘇云呼電話機器人 北京電銷外呼系統加盟 儋州電話機器人 市場上的電銷機器人 佛山400電話辦理

如何使用雙向RNN

在《深度學習之TensorFlow入門、原理與進階實戰》一書的9.4.2中的第4小節中,介紹過變長動態RNN的實現。

這里在來延伸的講解一下雙向動態rnn在處理變長序列時的應用。其實雙向RNN的使用中,有一個隱含的注意事項,非常容易犯錯。

本文就在介紹下雙向RNN的常用函數、用法及注意事項。

動態雙向rnn有兩個函數:

stack_bidirectional_dynamic_rnn
bidirectional_dynamic_rnn

二者的實現上大同小異,放置的位置也不一樣,前者放在contrib下面,而后者顯得更加根紅苗正,放在了tf的核心庫下面。在使用時二者的返回值也有所區別。下面就來一一介紹。

示例代碼

先以GRU的cell代碼為例:

import tensorflow as tf
import numpy as np
tf.reset_default_graph()
# 創建輸入數據
X = np.random.randn(2, 4, 5)# 批次 、序列長度、樣本維度
# 第二個樣本長度為3
X[1,2:] = 0
seq_lengths = [4, 2]
Gstacked_rnn = []
Gstacked_bw_rnn = []
for i in range(3):
    Gstacked_rnn.append(tf.contrib.rnn.GRUCell(3))
    Gstacked_bw_rnn.append(tf.contrib.rnn.GRUCell(3))
#建立前向和后向的三層RNN
Gmcell = tf.contrib.rnn.MultiRNNCell(Gstacked_rnn)
Gmcell_bw = tf.contrib.rnn.MultiRNNCell(Gstacked_bw_rnn)
sGbioutputs, sGoutput_state_fw, sGoutput_state_bw = tf.contrib.rnn.stack_bidirectional_dynamic_rnn([Gmcell],[Gmcell_bw], X,sequence_length=seq_lengths,                                           dtype=tf.float64)
Gbioutputs, Goutput_state_fw = tf.nn.bidirectional_dynamic_rnn(Gmcell,Gmcell_bw, X,sequence_length=seq_lengths,dtype=tf.float64)

上面例子中是創建雙向RNN的方法示例。可以看到帶有stack的雙向RNN會輸出3個返回值,而不帶有stack的雙向RNN會輸出2個返回值。

這里面還要注意的是,在沒有未cell初始化時必須要將dtype參數賦值。不然會報錯。

代碼:BiRNN輸出

下面添加代碼,將輸出的值打印出來,看一下,這兩個函數到底是輸出的是啥?

#建立一個會話
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
sgbresult,sgstate_fw,sgstate_bw=sess.run([sGbioutputs,sGoutput_state_fw,sGoutput_state_bw])
print("全序列:\n", sgbresult[0])
print("短序列:\n", sgbresult[1])
print('Gru的狀態:',len(sgstate_fw[0]),'\n',sgstate_fw[0][0],'\n',sgstate_fw[0][1],'\n',sgstate_fw[0][2])
print('Gru的狀態:',len(sgstate_bw[0]),'\n',sgstate_bw[0][0],'\n',sgstate_bw[0][1],'\n',sgstate_bw[0][2])

先看一下帶有stack的雙向RNN輸出的內容:

我們輸入的數據的批次是2,第一個序列長度是4,第二個序列長度是2.

圖中共有4部分輸出,可以看到,第一部分(全序列)就是序列長度為4的結果,第二部分(短序列)就是序列長度為2的結果。由于沒一層都是由3個RNN的GRU cell組成,所以每個序列的輸出都為3.很顯然,對于這樣的結果輸出,必須要將短序列后面的0去掉才可以用。

好在該函數還有第二個輸出值,GRU的狀態。可以直接使用狀態里的值,而不需要對原始結果進行去0的變化。

由于單個GRU本來就是沒有狀態的。所以該函數將最后的輸出作為狀態返回。該函數有兩個狀態返回,分別代表前向和后向。每一個方向的狀態都會返回3個元素。這是因為每個方向的網絡都有3層GRU組成。在使用時,一般都會取最后一個狀態。圖中紅色部分為前向中,兩個樣本對應的輸出,這個很好理解。

重點要看藍色的部分,即反向的狀態值對應的是原始數據中最其實的序列輸入。因為是反向RNN,在反向循環時,是會把序列中最后的放在最前面,所以反向網絡的生成結果就會與最開始的序列相對應。

對于特征提取任務處理時,正向與反向的最后值都為該序列的特征,需要合并起來統一處理。但是對于下一個序列預測任務時,建議直接使用正向的RNN網絡就可以了。

如果要獲取雙向RNN的結果,尤其是變長情況下,通過狀態拿到值直接拼接起來才是正確的做法。即便不是變長。直接使用輸出值來拼接,會損失掉反向的一部分特征結果。這是需要值得注意的地方。

代碼:BiRNN輸出

好了。在接著看下不帶stack的函數輸出是什么樣子的

gbresult,state_fw=sess.run([Gbioutputs,Goutput_state_fw])
print("正向:\n", gbresult[0])
print("反向:\n", gbresult[1])
print('狀態:',len(state_fw),'\n',state_fw[0],'\n',state_fw[1])  #state_fw[0]:【層,批次,cell個數】 重頭到最后一個序列
print(state_fw[0][-1],state_fw[1][-1])
out  = np.concatenate((state_fw[0][-1],state_fw[1][-1]),axis = 1)
print("拼接",out)

這次,在輸出基本內容基礎上,直接將結果拼接起來。上面代碼運行后會輸出如下內容。

同樣正向用紅色,反向用藍色。改函數返回的輸出值,沒有將正反向拼接。輸出的狀態雖然是一個值,但是里面有兩個元素,一個代表正向狀態,一個代表反向狀態.

從輸出中可以看到,最后一行實現了最終結果的真正拼接。在使用雙向rnn時可以按照上面的例子代碼將其狀態拼接成一條完整輸出,然后在進行處理。

代碼:LSTM的雙向RNN

類似的如果想使用LSTM cell。將前面的GRU部分替換即可,代碼如下:

stacked_rnn = []
stacked_bw_rnn = []
for i in range(3):
    stacked_rnn.append(tf.contrib.rnn.LSTMCell(3))
    stacked_bw_rnn.append(tf.contrib.rnn.LSTMCell(3))
mcell = tf.contrib.rnn.MultiRNNCell(stacked_rnn)
mcell_bw = tf.contrib.rnn.MultiRNNCell(stacked_bw_rnn)    
bioutputs, output_state_fw, output_state_bw = tf.contrib.rnn.stack_bidirectional_dynamic_rnn([mcell],[mcell_bw], X,sequence_length=seq_lengths,
                                              dtype=tf.float64)
bioutputs, output_state_fw = tf.nn.bidirectional_dynamic_rnn(mcell,mcell_bw, X,sequence_length=seq_lengths,
                                              dtype=tf.float64)

至于輸出的內容是什么,可以按照前面GRU的輸出部分顯示出來自己觀察。如何拼接,也可以參照GRU的例子來做。

通過將正反向的狀態拼接起來才可以獲得雙向RNN的最終輸出特征。千萬不要直接拿著輸出不加處理的來進行后續的運算,這會損失一大部分的運算特征。

該部分內容屬于《深度學習之TensorFlow入門、原理與進階實戰》一書的內容補充。關于RNN的更多介紹可以參看書中第九章的詳細內容。

我對雙向RNN 的理解

1、雙向RNN使用的場景:有些情況下,當前的輸出不只依賴于之前的序列元素,還可能依賴之后的序列元素; 比如做完形填空,機器翻譯等應用。

2、Tensorflow 中實現雙向RNN 的API是:bidirectional_dynamic_rnn; 其本質主要是做了兩次reverse:

第一次reverse:將輸入序列進行reverse,然后送入dynamic_rnn做一次運算.

第二次reverse:將上面dynamic_rnn返回的outputs進行reverse,保證正向和反向輸出的time是對上的.

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Tensorflow與RNN、雙向LSTM等的踩坑記錄及解決
  • 淺談Tensorflow 動態雙向RNN的輸出問題
  • 雙向RNN:bidirectional_dynamic_rnn()函數的使用詳解

標簽:寧夏 酒泉 江蘇 定西 云南 商丘 金融催收 龍巖

巨人網絡通訊聲明:本文標題《變長雙向rnn的正確使用姿勢教學》,本文關鍵詞  變長,雙向,rnn,的,正確,使用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《變長雙向rnn的正確使用姿勢教學》相關的同類信息!
  • 本頁收集關于變長雙向rnn的正確使用姿勢教學的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美无砖砖区免费| 欧美精三区欧美精三区| 韩国成人福利片在线播放| 亚洲综合视频网| 亚洲国产日韩综合久久精品| 亚洲裸体在线观看| 国产精品短视频| 一区二区成人在线视频 | 国产一区二区日韩精品| 精品一区二区三区不卡| 国产一区二区看久久| 国产精品99久久久久久久女警| 精品一区免费av| 国产高清在线精品| 色婷婷综合久久久中文一区二区 | 蜜桃免费网站一区二区三区| 日韩在线一区二区三区| 久草在线在线精品观看| 国产精品一二三四五| av中文字幕亚洲| 欧美日韩国产在线播放网站| 日韩一区二区电影网| 国产女主播在线一区二区| 国产精品成人网| 天堂av在线一区| 国产成人亚洲精品青草天美 | 日韩欧美一区二区久久婷婷| 久久久久久久电影| 亚洲欧美日韩一区二区| 男人操女人的视频在线观看欧美| 狠狠色狠狠色综合日日91app| 成人v精品蜜桃久久一区| 色999日韩国产欧美一区二区| 在线播放视频一区| 亚洲国产精品av| 天天做天天摸天天爽国产一区 | 成人激情av网| 91麻豆精品国产91久久久更新时间 | 婷婷国产v国产偷v亚洲高清| 激情久久五月天| 欧美在线观看视频在线| 久久综合狠狠综合久久综合88| 一区二区三区不卡在线观看| 国产一区二区三区四区五区入口 | 国产精品天美传媒沈樵| 天天色综合天天| 成人99免费视频| 2欧美一区二区三区在线观看视频| 一区二区三区在线视频观看58| 国产成人在线电影| 欧美日韩一级大片网址| 日本一区二区三区电影| 美女脱光内衣内裤视频久久网站| 色94色欧美sute亚洲13| 国产亚洲精品精华液| 奇米一区二区三区| 欧美无砖专区一中文字| 中文字幕欧美一区| 国产一区二区三区免费观看| 91精品国产综合久久精品| 一区二区三区免费观看| 成人h版在线观看| 国产日韩欧美综合一区| 国产一区二区0| 337p日本欧洲亚洲大胆色噜噜| 免费欧美高清视频| 欧美一级高清片| 日本亚洲三级在线| 欧美日本高清视频在线观看| 一级中文字幕一区二区| 在线日韩一区二区| 一区二区欧美精品| 91官网在线观看| 亚洲一区二区免费视频| 在线看一区二区| 亚洲一区二区三区四区五区黄| 色综合天天性综合| 亚洲乱码日产精品bd| 在线亚洲一区观看| 一区av在线播放| 欧美日韩精品一区二区三区四区| 亚洲国产精品久久人人爱| 日本成人中文字幕在线视频| 一本一道久久a久久精品| 亚洲国产精品t66y| 成人av综合在线| 亚洲素人一区二区| 99re这里都是精品| 亚洲日本在线视频观看| 91黄色免费版| 日韩av一区二区在线影视| 91精品久久久久久久99蜜桃| 奇米影视在线99精品| 日韩欧美一二区| 国产精品1024久久| 亚洲三级在线免费观看| 欧美日韩性生活| 国内精品伊人久久久久影院对白| 精品理论电影在线观看 | 成人黄色网址在线观看| 亚洲美腿欧美偷拍| 97久久人人超碰| 亚洲高清视频的网址| 日韩视频免费观看高清完整版 | 亚洲一区二区高清| 91精品国产乱码| 国产河南妇女毛片精品久久久| 国产精品不卡在线| 欧美日韩日日摸| 国产福利一区在线观看| 亚洲精品中文在线| 欧美一区二区在线观看| 国产宾馆实践打屁股91| 亚洲成人一二三| 中文字幕欧美激情一区| 欧美日韩国产成人在线91| 岛国精品在线观看| 日韩精品一区第一页| 亚洲欧洲成人精品av97| 日韩一区国产二区欧美三区| 99国产精品国产精品久久| 麻豆91在线观看| 亚洲国产一二三| 国产精品乱码一区二三区小蝌蚪| 7878成人国产在线观看| 99精品视频中文字幕| 国产一区二区视频在线| 三级在线观看一区二区| 亚洲天堂2016| 中文字幕一区二区在线观看| 久久夜色精品国产欧美乱极品| 欧美日韩激情一区二区三区| 色婷婷综合久久久中文一区二区 | 亚洲国产精品一区二区尤物区| 国产亚洲综合av| 精品国产一区二区三区忘忧草 | 老司机午夜精品99久久| 亚洲午夜久久久久久久久电影网| 国产精品天干天干在观线| 国产日韩欧美精品在线| 久久综合九色综合欧美亚洲| 日韩欧美一级二级三级| 在线欧美日韩国产| 色欧美乱欧美15图片| 91亚洲资源网| 色综合色狠狠综合色| 99国产精品国产精品久久| 懂色av中文字幕一区二区三区| 国产精品影视在线| 国产精品资源在线看| 韩国成人福利片在线播放| 国产制服丝袜一区| 精彩视频一区二区| 不卡视频在线观看| 成人国产精品免费观看动漫| 不卡大黄网站免费看| 成人动漫av在线| 99国产精品久久久久久久久久| 成+人+亚洲+综合天堂| 91网址在线看| 欧美三级在线视频| 日韩欧美久久久| 国产区在线观看成人精品| 亚洲国产精品99久久久久久久久| 国产精品精品国产色婷婷| 中文字幕在线不卡一区| 亚洲综合男人的天堂| 午夜成人免费视频| 极品少妇一区二区三区精品视频| 国产一区二区三区久久悠悠色av| 国产另类ts人妖一区二区| 成人一区二区三区视频在线观看| 9久草视频在线视频精品| 欧美亚洲尤物久久| 欧美一区二区福利在线| 久久美女高清视频| 国产精品的网站| 日产国产欧美视频一区精品| 久久成人18免费观看| 成人福利在线看| 欧美精品第1页| 久久只精品国产| 亚洲与欧洲av电影| 国产美女精品在线| 色噜噜夜夜夜综合网| 欧美xxxxx牲另类人与| 成人欧美一区二区三区视频网页| 日韩欧美一二区| 欧美精品在线观看播放| 久久久影院官网| 亚洲福利国产精品| 国产裸体歌舞团一区二区| 色偷偷久久一区二区三区| 精品国产一区二区三区av性色| 国产精品色噜噜| 日本特黄久久久高潮| 99re视频精品| wwww国产精品欧美| 午夜久久久影院| 91日韩精品一区|