中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于tf.reverse_sequence()簡述

發布時間:2020-09-13 23:02:19 來源:腳本之家 閱讀:182 作者:Cerisier 欄目:開發技術

tf.reverse_sequence()簡述

在看bidirectional_dynamic_rnn()的源碼的時候,看到了代碼中有調用 reverse_sequence()這一方法,于是又回去看了下這個函數的用法,發現還是有點意思的。根據名字就可以能看得出,這個方法主要是用來翻轉序列的,就像雙線LSTM中在反向傳播那里需要從下文往上文處理一樣,需要對序列做一個鏡像的翻轉處理。

先來看一下這個方法的定義:

reverse_sequence(
  input,
  seq_lengths,
  seq_axis=None,
  batch_axis=None,
  name=None,
  seq_dim=None,
  batch_dim=None)

其中input是輸入的需要翻轉的目標張量,seq_lengths是一個張量;

其元素是input中每一處需要翻轉時翻轉的長度,在雙向LSTM中這個值統一被設為輸入語句的長度,代表著整句話都需要被翻轉,而實際上張量中的元素值可以是不同的,下面的例子中就可以看出;

seq_axis和seq_dim的關系,在源碼中做了如下操作:

seq_axis = deprecation.deprecated_argument_lookup("seq_axis", seq_axis,
                          "seq_dim", seq_dim)

返回中return gen_array_ops.reverse_sequence(..., seq_dim=seq_axis,...),同理,對于batch_axis和batch_dim也是相同的處理。意義上來說,按照官方給出的解釋,“此操作首先沿著維度batch_axis對input進行分割,并且對于每個切片 i,將前 seq_lengths 元素沿維度 seq_axis 反轉”。實際上通俗來理解,就是對于張量input中的第batch_axis維中的每一個子張量,在這個子張量的第seq_axis維上進行翻轉,翻轉的長度為 seq_lengths 張量中對應的數值。

舉個例子,如果 batch_axis=0,seq_axis=1,則代表我希望每一行為單位分開處理,對于每一行中的每一列進行翻轉。相反的,如果 batch_axis=1,seq_axis=0,則是以列為單位,對于每一列的張量,進行相應行的翻轉。回頭去看雙向RNN的源碼,就可以理解當time_major這一屬性不同時,time_dim 和 batch_dim 這一對組合的取值為什么恰好是相反的了。

寫一個簡單的測試代碼:

a = tf.constant([[1,2,3], [4,5,6], [7,8,9]])
l = tf.constant([1,2,3],tf.int64) # 每一次翻轉長度分別為1,2,3.由于a是(3,3)維的,所以l中數值最大只能是3
x = tf.reverse_sequence(a,seq_lengths=l,seq_axis = 0,batch_axis= 1) # 以列為單位進行翻轉,翻轉的是每一行的元素
y = tf.reverse_sequence(a,seq_lengths=l,seq_axis = 1,batch_axis= 0) # 以行為單位進行翻轉,翻轉的是每一列的元素
with tf.Session() as sess:
  print(sess.run(x))
  print(sess.run(y))

結果如下:

# 每一列上的元素種類沒有發生變化,但是從每一行來看,行的順序分別翻轉了前1,前2,前3個元素
[[1 5 9]
 [4 2 6]
 [7 8 3]]
# 每一行上的元素種類沒有發生變化,但是從每一列來看,列的順序分別翻轉了前1,前2,前3個元素
[[1 2 3]
 [5 4 6]
 [9 8 7]]

以上這篇關于tf.reverse_sequence()簡述就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

屯门区| 烟台市| 张家口市| 酒泉市| 阳新县| 瑞丽市| 安阳县| 云阳县| 若尔盖县| 天水市| 红桥区| 阿坝| 乐业县| 绵竹市| 肇东市| 普兰店市| 屯门区| 湘乡市| 运城市| 甘泉县| 富阳市| 蒙自县| 临颍县| 曲靖市| 松桃| 兴宁市| 碌曲县| 汉寿县| 叙永县| 潮州市| 河北区| 衡水市| 枝江市| 青阳县| 江门市| 洪湖市| 谷城县| 建平县| 南江县| 屯留县| 公安县|