Partilhar via


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. Pois Gather(), o seu comprimento deve ser o mesmo que o de maskSequence, enquanto para Scatter(), deve ser igual ao número de outros em maskSequence.

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.