Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Gather(), Scatter()
Skracanie lub wydłużanie sekwencji danych na podstawie maski.
BS.Sequences.Gather (maskSequence, dataSequence)
BS.Sequences.Scatter (maskSequence, dataSequence)
Parametry
maskSequence: sekwencja 0 lub 1 (wymiar[1]statyczny tensor), gdzie 1 wskazuje próbki do zachowania. (Każda inna wartość powoduje niezdefiniowane zachowanie i może ulec zmianie w przyszłości).dataSequence: sekwencja danych do przetworzenia. W przypadkuGather()parametrumaskSequencejego długość musi być taka sama jak w przypadku elementu , natomiast w przypadkuScatter()parametru musi być równa liczbie tych w elemeciemaskSequence.
Wartość zwracana
W przypadku Gather()programu sekwencja zawierająca podzbiór dataSequenceelementów , z porzuconymi próbkami. Długość sekwencji wyników będzie równa liczbie jedynek w elemecie maskSequence.
W przypadku Scatter()programu sekwencja zawierająca próbki dataSequence zer i wstawionych zer. Sekwencja wyników będzie mieć taką samą długość jak maskSequence.
Opis
Gather() i Scatter() umożliwiają skrócenie lub wydłużenie sekwencji danych wejściowych, takich jak sekwencja słów, na podstawie sekwencji maski.
Gather() Zwraca podsekwencję tych próbek dataSequence[n] , dla których maskSequence[n] wartość to 1, a te, dla których maska ma wartość 0, zostanie porzucona.
Scatter() pobiera elementy sekwencji podrzędnej i umieszcza je w dłuższej sekwencji, wstawiając zera.
Przykład:
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() jest często używany pośrednio za pośrednictwem Slice(..., axis=-1), BS.Sequences.First()i BS.Sequences.Last().
Przykłady
Cykliczny model językowy
Biorąc pod uwagę sekwencję wyrazów formularza <s> A B C ... </s>, model językowy przyjmuje input formularz <s> A B C ... do przewidywania labels formularza A B C ... </s>. Gather() umożliwia odczytanie pojedynczej sekwencji wyrazów z pliku, a następnie utworzenie input elementu i labels przez usunięcie odpowiednio końcowego </s> i wiodącego <s>ciągu :
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)
Uwaga: Gather() Operacja może być wygodniej napisana w następujący sposób, co pod maską wywołuje metodę Gather():
input = Slice (0, -1, words, axis=-1) # strip trailing </s>
labels = ReconcileDynamicAxis (Slice (1, 0, words, axis=-1), input) # strip leading <s>
Wektor myśli
Poniżej przedstawiono ostatnią próbkę sekwencji ukrytego stanu:
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()
Utwórz maskę do użycia z Gather() , aby wybrać odpowiednio pierwszą i ostatnią próbkę sekwencji.
BS.Sequences.IsFirst (dataSequence)
BS.Sequences.IsLast (dataSequence)
Parametry
dataSequence: dowolna sekwencja, np. sekwencja wyrazów
Wartość zwracana
Maska do użycia z Gather() tym wybierze odpowiednio pierwszy lub ostatni element, jednocześnie upuszczając wszystkie inne próbki.
Opis
IsFirst() i IsLast() utwórz maskę do użycia z Gather() , aby wybrać odpowiednio pierwszą i ostatnią próbkę sekwencji, która jest zwykle potrzebna w modelach sekwencjonowania w celu wyodrębnienia "wektor myśli" (ostatni ukryty stan cyklu).
Przykłady
Zobacz tutaj.