次の方法で共有


収集と散布

Gather()、Scatter()

マスクに基づいてデータ シーケンスを短縮または延長します。

BS.Sequences.Gather  (maskSequence, dataSequence)
BS.Sequences.Scatter (maskSequence, dataSequence)

パラメーター

  • maskSequence: 0 または 1 (静的テンソル 次元 [1]) のシーケンス。ここで、1 は保持するサンプルを示します。 (その他の値は未定義の動作を生み出し、将来変更される可能性があります)。
  • dataSequence: 処理するデータ シーケンス。 の場合Gather()、その長さは 、 Scatter()の長さと同じであるmaskSequence必要がありますmaskSequence

戻り値

Gather()サブセットを含むシーケンスで、一部の dataSequenceサンプルが削除されます。 結果シーケンスの長さは、次の値の maskSequence数と等しくなります。

Scatter()場合、ゼロのサンプルと挿入されたゼロを dataSequence 含むシーケンス。 結果シーケンスの長さは maskSequence.

説明

Gather() マスク Scatter() シーケンスに基づいて、単語のシーケンスなどの入力シーケンスを短縮または延長できます。

Gather()1、マスクが 0 であるサンプルdataSequence[n]maskSequence[n]のサブシーケンスを返します。

Scatter() はサブシーケンスの要素を受け取り、長いシーケンスに配置し、ゼロを挿入します。

次に例を示します。

g = Gather  (m, d)
s = Scatter (m, g)

d = A B C D E F G H I J K L M N O P Q R S T U V W X Y Z  # data
m = 1 1 0 1 0 0 1 0 1 1 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0 1  # mask
g = A B D G I J M P Q T W X Z
s = A B 0 D 0 0 G 0 I J 0 0 M 0 0 P Q 0 0 T 0 0 W X 0 Z

Gather()を介してSlice(..., axis=-1)BS.Sequences.First()BS.Sequences.Last()間接的に使用されることがよくあります。

リカレント言語モデル

フォーム<s> A B C ... </s>の単語シーケンスを指定すると、言語モデルはフォームのinput予測形式<s> A B C ...labelsA B C ... </s>受け取ります。 Gather()では、1 つの単語シーケンスをファイルから読み取り、末尾とlabels先頭<s>をそれぞれ削除</s>して作成inputします。

words  = Input {inputDim}
inputMask  = !BS.Sequences.IsFirst (words)
labelsMask = !BS.Sequences.IsLast  (words)
input  =                       Gather (inputMask,  words)          # drop trailing </s>
labels = ReconcileDynamicAxis (Gather (labelsMask, words), input)  # drop leading <s>

lstmLM = Sequential
(
    EmbeddingLayer {300} :
    RecurrentLSTMLayer {512} :
    DenseLayer {inputDim, activation=LogSoftmax}
)

logP = lstmLM (input)
ce = -TransposeTimes (labels, logP)
criterionNodes = (ce)

注: 操作はより Gather() 便利に次のように書くことができます。これは、内部呼び出し Gather()の下で次のようになります。

input  =                       Slice (0, -1, words, axis=-1)          # strip trailing </s>
labels = ReconcileDynamicAxis (Slice (1,  0, words, axis=-1), input)  # strip leading <s>

思考ベクトル

次に、非表示状態シーケンスの最後のサンプルを選択します。

h = RecurrentLSTMLayer {} (x)       # sequence of hidden states
lastMask = BS.Sequences.IsLast (h)  # mask to denote the last step
thoughtVector = BS.Sequences.Gather (lastMask, h)  # select the last

IsFirst()、IsLast()

シーケンスの最初と最後のサンプルをそれぞれ選択するために使用 Gather() するマスクを作成します。

BS.Sequences.IsFirst (dataSequence)
BS.Sequences.IsLast  (dataSequence)

パラメーター

  • dataSequence: 任意のシーケンス (単語シーケンスなど)

戻り値

使用する Gather() マスクは、他のすべてのサンプルを削除しながら、それぞれ最初または最後の項目を選択します。

説明

IsFirst()シーケンスの最初と最後のサンプルをそれぞれ選択するために使用Gather()するマスクを作成しますIsLast()。これは通常、シーケンス間モデルで "思考ベクトル" (繰り返しの最後の非表示状態) を抽出するために必要です。

こちらを参照してください。