tf.reverse_についてsequence()簡単に述べる


tf.reverse_sequence()簡単に述べる
ビディレクションを見ていますdynamic_rnn()のソースコードを見た時、コードの中からreverse(u)が呼び出されました。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ではこの値は入力語句の長さに統一され、文全体が反転する必要があることを表していますが、実際にはテンソルの要素値は違っていてもいいです。以下の例で見られます。
seqaxisとseq_dimの関係はソースの中で次のように操作されました。

seq_axis = deprecation.deprecated_argument_lookup("seq_axis", seq_axis,
                          "seq_dim", seq_dim)
リターン中にリセットしますアラリops.reverse_sequence(…,seq_)dim=seq_axis,…)同じように、batchに対して。axisとbatchdimも同じ処理です。意味的には、公式の説明によると、「この操作はまず次元batchに沿って行う。axisはinputを分割し、各スライスiに対して、前seq_をlengths元素は次元seq_に沿っている。axis逆転」。実は分かりやすいのですが、テンソルinputの中の第batch_axis次元の各サブテンソルは、このサブテンソルの第seq_axis次元で反転します。反転の長さはseq_です。レングステンソルに対応する数値です。
例を挙げると、batch_axis=0,seq_axis=1であれば、行単位ごとに別々に処理してほしいということです。行ごとに列を反転させます。反対に、batch_axis=1,seq_axis=0は、列の単位で、各列のテンソルに対して、該当する行の反転を行います。振り返って双方向RNNのソースコードを見れば、time me me uとして理解できます。majorという属性が異なるので、time_ディムとバッチ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()簡単に紹介すると、小編が皆さんに提供した内容が全部分かります。参考にしていただければと思います。よろしくお願いします。