Сбор и точечная диаграмма
Сбор(), точечная()
Сокращение или расширение последовательности данных на основе маски.
BS.Sequences.Gather (maskSequence, dataSequence)
BS.Sequences.Scatter (maskSequence, dataSequence)
Параметры
maskSequence
: последовательность 0 или 1 (статическое измерение тензора[1]
), где 1 указывает образцы для хранения. (Любое другое значение приводит к неопределенному поведению и может измениться в будущем.)dataSequence
: последовательность данных для обработки. ДляGather()
, его длина должна быть той же, чтоmaskSequence
и , в то время как дляScatter()
, она должна быть равна числу из них вmaskSequence
.
Возвращаемое значение
Для Gather()
последовательности, содержащей подмножество dataSequence
, при этом некоторые примеры удалены. Длина последовательности результатов будет равна числу из них.maskSequence
Для Scatter()
последовательности, содержащей примеры dataSequence
и вставленные нули. Последовательность результатов будет иметь ту же длину, что maskSequence
и .
Описание
Gather()
и Scatter()
позволяет сократить или продлить входную последовательность, например последовательность слов, на основе последовательности маски.
Gather()
возвращает вложенную последовательность этих выборок dataSequence[n]
maskSequence[n]
1
, то есть те, для которых будет удалена маска 0.
Scatter()
принимает элементы вложенной последовательности и помещает их в длинную последовательность, вставляя нули.
Пример:
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()
часто используется косвенно через Slice(..., axis=-1)
, BS.Sequences.First()
и BS.Sequences.Last()
.
Примеры
Повторяющаяся языковая модель
Учитывая последовательность слов формы <s> A B C ... </s>
, языковая модель принимает input
форму <s> A B C ...
для прогнозирования labels
формы A B C ... </s>
. Gather()
позволяет считывать одну последовательность слов из файла, а затем создавать и удалять input
labels
конечные </s>
и начальные <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)
Примечание. Операция Gather()
может быть удобнее записываться следующим образом, что под вызовами Gather()
капюшона:
input = Slice (0, -1, words, axis=-1) # strip trailing </s>
labels = ReconcileDynamicAxis (Slice (1, 0, words, axis=-1), input) # strip leading <s>
Вектор мысли
В следующем примере выбирается последняя последовательность скрытых состояний:
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()
Создайте маску для использования для Gather()
выбора первой и последней выборки последовательности соответственно.
BS.Sequences.IsFirst (dataSequence)
BS.Sequences.IsLast (dataSequence)
Параметры
dataSequence
: любая последовательность, например последовательность слов
Возвращаемое значение
Маска для использования с Gather()
этим элементом будет выбирать первый или последний элемент соответственно при удалении всех остальных образцов.
Описание
IsFirst()
и IsLast()
создайте маску для использования для Gather()
выбора первой и последней выборки последовательности соответственно, которая обычно требуется в моделях последовательности в последовательности для извлечения "вектора мысли" (последнее скрытое состояние повторения).
Примеры
Дополнительные сведения см. здесь.