Recopilación y dispersión
Gather(), Scatter()
Acortar o alargar una secuencia de datos basada en una máscara.
BS.Sequences.Gather (maskSequence, dataSequence)
BS.Sequences.Scatter (maskSequence, dataSequence)
Parámetros
maskSequence
: una secuencia de 0 o 1 (dimensión[1]
tensor estática), donde 1 indica las muestras que se van a mantener. (Cualquier otro valor da lugar a un comportamiento indefinido y puede cambiar en el futuro).dataSequence
: secuencia de datos que se va a procesar. ParaGather()
, su longitud debe ser la misma que la demaskSequence
, mientras que paraScatter()
, debe ser igual al número de valoresmaskSequence
de .
Valor devuelto
Para Gather()
, una secuencia que contiene un subconjunto de dataSequence
, con algunos ejemplos quitados. La longitud de la secuencia de resultados será igual al número de uno de maskSequence
.
Para Scatter()
, una secuencia que contiene muestras de dataSequence
ceros insertados e insertados. La secuencia de resultados tendrá la misma longitud que maskSequence
.
Descripción
Gather()
y Scatter()
permiten acortar o alargar una secuencia de entrada, como una secuencia de palabras, en función de una secuencia de máscara.
Gather()
devuelve la subcadena de esas muestras dataSequence[n]
para las que maskSequence[n]
es 1
, mientras que las para las que la máscara es 0 se quitarán.
Scatter()
toma elementos de una subcadena y los coloca en una secuencia más larga, insertando ceros.
Por ejemplo:
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()
a menudo se usa indirectamente a través Slice(..., axis=-1)
de , BS.Sequences.First()
y BS.Sequences.Last()
.
Ejemplos
Modelo de lenguaje recurrente
Dada una secuencia de palabras del formulario <s> A B C ... </s>
, un modelo de lenguaje toma el input
de forma <s> A B C ...
para predecir labels
el formato A B C ... </s>
. Gather()
permite que una sola secuencia de palabras se lea desde el archivo y, a continuación, cree input
y quitando </s>
el final y el inicial <s>
, labels
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: La Gather()
operación se puede escribir más convenientemente de la siguiente manera, que en segundo plano llama a Gather()
:
input = Slice (0, -1, words, axis=-1) # strip trailing </s>
labels = ReconcileDynamicAxis (Slice (1, 0, words, axis=-1), input) # strip leading <s>
Vector de pensamiento
A continuación se selecciona el último ejemplo de una secuencia 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()
Cree una máscara para usarla con Gather()
para seleccionar la primera y la última muestra de una secuencia, respectivamente.
BS.Sequences.IsFirst (dataSequence)
BS.Sequences.IsLast (dataSequence)
Parámetros
dataSequence
: cualquier secuencia, por ejemplo, una secuencia de palabras.
Valor devuelto
Máscara para su uso con Gather()
que seleccionará el primer o último elemento, respectivamente, al quitar todos los demás ejemplos.
Descripción
IsFirst()
y IsLast()
crean una máscara para su uso con Gather()
para seleccionar la primera y la última muestra de una secuencia, respectivamente, que normalmente se necesita en los modelos de secuencia a secuencia para extraer el "vector de pensamiento" (el último estado oculto de una periodicidad).
Ejemplos
Consulte aquí.