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örGather()
måste dess längd vara samma sommaskSequence
för , medan förScatter()
måste den vara lika med antalet imaskSequence
.
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.