Dela via


Samla in och punktdiagram

Gather(), Scatter()

Förkorta eller förlänga en datasekvens baserat på en mask.

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

Parametrar

  • maskSequence: en sekvens med 0 eller 1 (statisk tensordimension [1]), där 1 indikerar att prover ska behållas. (Andra värden ger upphov till odefinierat beteende och kan ändras i framtiden.)
  • dataSequence: den datasekvens som ska bearbetas. För Gather()måste dess längd vara samma som maskSequenceför , medan för Scatter()måste den vara lika med antalet i maskSequence.

Returvärde

För Gather(), en sekvens som innehåller en delmängd av dataSequence, med några exempel borttagna. Längden på resultatsekvensen är lika med antalet i maskSequence.

För Scatter(), en sekvens som innehåller exempel på dataSequence och infogade nollor. Resultatsekvensen har samma längd som maskSequence.

Description

Gather() och Scatter() gör att du kan förkorta eller förlänga en indatasekvens, till exempel en ordsekvens, baserat på en masksekvens.

Gather() returnerar delsekvensen för de exempel dataSequence[n] som maskSequence[n] är 1, medan de som masken är 0 för kommer att tas bort.

Scatter() tar element i en undersekvens och placerar dem i en längre sekvens och infogar nolla.

Exempel:

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() används ofta indirekt via Slice(..., axis=-1), BS.Sequences.First()och BS.Sequences.Last().

Exempel

Återkommande språkmodell

Med en ordsekvens i formuläret <s> A B C ... </s>tar input en språkmodell formen <s> A B C ... för att förutsäga labels formuläret A B C ... </s>. Gather() låter en enda ordsekvens läsas från filen och sedan skapa input och labels genom att släppa efterföljande </s> respektive inledande <s>:

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)

Obs! Åtgärden Gather() kan mer bekvämt skrivas på följande sätt, som under huven anropar Gather():

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

Tankevektor

Följande väljer det sista exemplet på en sekvens med dolt tillstånd:

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()

Skapa en mask för användning med Gather() för att välja det första respektive sista exemplet på en sekvens.

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

Parametrar

  • dataSequence: valfri sekvens, t.ex. en ordsekvens

Returvärde

En mask för användning med Gather() som väljer det första eller sista objektet, samtidigt som alla andra exempel tas bort.

Description

IsFirst() och IsLast() skapa en mask för användning med Gather() för att välja det första respektive sista exemplet på en sekvens, vilket vanligtvis behövs i sekvens-till-sekvens-modeller för att extrahera "tankevektorn" (det sista dolda tillståndet för en upprepning).

Exempel

Se här.