Recolha e Dispersão
Gather(), Scatter()
Encurtar ou alongar uma sequência de dados com base numa máscara.
BS.Sequences.Gather (maskSequence, dataSequence)
BS.Sequences.Scatter (maskSequence, dataSequence)
Parâmetros
maskSequence
: sequência de 0 ou 1 (dimensão estática do tensor[1]
), onde 1 indica amostras a manter. (Qualquer outro valor dá origem a comportamentos indefinidos e podem mudar no futuro.)dataSequence
: a sequência de dados a processar. PoisGather()
, o seu comprimento deve ser o mesmo que o demaskSequence
, enquanto paraScatter()
, deve ser igual ao número de outros emmaskSequence
.
Valor devolvido
Para Gather()
, uma sequência que contém um subconjunto de dataSequence
, com algumas amostras largadas. O comprimento da sequência de resultados será igual ao número de uns em maskSequence
.
Para Scatter()
, uma sequência que contém amostras de dataSequence
zeros inseridos e inseridos. A sequência de resultados terá o mesmo comprimento que maskSequence
.
Description
Gather()
e Scatter()
permitir-lhe encurtar ou alongar uma sequência de entrada, como uma sequência de palavras, baseada numa sequência de máscara.
Gather()
devolve a sub-sequência das amostras dataSequence[n]
para as quais maskSequence[n]
é 1
, enquanto aquelas para as quais a máscara é 0 serão largadas.
Scatter()
pega elementos de uma sub-sequência e coloca-os numa sequência mais longa, inserindo zeros.
Por exemplo:
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()
é frequentemente usado indiretamente através Slice(..., axis=-1)
de BS.Sequences.First()
, e BS.Sequences.Last()
.
Exemplos
Modelo linguística recorrente
Dada uma sequência de palavras da forma<s> A B C ... </s>
, uma linguagem modelo toma a input
forma <s> A B C ...
de prever labels
a forma A B C ... </s>
. Gather()
permite que uma única sequência de palavras seja lida a partir do ficheiro e, em seguida, crie o input
e labels
, deixando cair o rasto e liderando </s>
<s>
, respectivamente:
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)
Nota: A Gather()
operação pode ser escrita da seguinte forma, que sob a chamada Gather()
do capuz:
input = Slice (0, -1, words, axis=-1) # strip trailing </s>
labels = ReconcileDynamicAxis (Slice (1, 0, words, axis=-1), input) # strip leading <s>
Vetor de pensamento
O seguinte seleciona a última amostra de uma sequência de estado oculto:
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()
Crie uma máscara para utilização para Gather()
selecionar a primeira e última amostra de uma sequência, respectivamente.
BS.Sequences.IsFirst (dataSequence)
BS.Sequences.IsLast (dataSequence)
Parâmetros
dataSequence
: qualquer sequência, por exemplo, uma sequência de palavras
Valor devolvido
Uma máscara para utilização com Gather()
esta irá selecionar o primeiro ou último item, respectivamente, enquanto larga todas as outras amostras.
Description
IsFirst()
e IsLast()
criar uma máscara para ser usada Gather()
para selecionar a primeira e última amostra de uma sequência, respectivamente, que é tipicamente necessária em modelos de sequência-a-sequência para extrair o "vetor de pensamento" (o último estado oculto de uma recorrência).
Exemplos
Veja aqui.