структура DML_LSTM_OPERATOR_DESC (directml.h)
Выполняет одноуровневую функцию LSTM на входных данных. Этот оператор использует несколько шлюзов для выполнения этого слоя. Эти шлюзы выполняются несколько раз в цикле, что определяется измерением длины последовательности и sequenceLengthsTensor.
Уравнение для направления вперед
Уравнение для направления назад
Условные обозначения уравнений
Синтаксис
struct DML_LSTM_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *WeightTensor;
const DML_TENSOR_DESC *RecurrenceTensor;
const DML_TENSOR_DESC *BiasTensor;
const DML_TENSOR_DESC *HiddenInitTensor;
const DML_TENSOR_DESC *CellMemInitTensor;
const DML_TENSOR_DESC *SequenceLengthsTensor;
const DML_TENSOR_DESC *PeepholeTensor;
const DML_TENSOR_DESC *OutputSequenceTensor;
const DML_TENSOR_DESC *OutputSingleTensor;
const DML_TENSOR_DESC *OutputCellSingleTensor;
UINT ActivationDescCount;
const DML_OPERATOR_DESC *ActivationDescs;
DML_RECURRENT_NETWORK_DIRECTION Direction;
float ClipThreshold;
BOOL UseClipThreshold;
BOOL CoupleInputForget;
};
Члены
InputTensor
Тип: const DML_TENSOR_DESC*
Тензор, содержащий входные данные, X. Упакован (и потенциально заполнен) в один объемный тензор размером { 1, seq_length, batch_size, input_size }
. seq_length — это измерение, сопоставленное с индексом, t. Тензор не поддерживает флаг DML_TENSOR_FLAG_OWNED_BY_DML .
WeightTensor
Тип: const DML_TENSOR_DESC*
Тензор, содержащий данные о весе, W. Concatenation W_[iofc] и W_B[iofc] (если двунаправленный). Тензор имеет размеры { 1, num_directions, 4 * hidden_size, input_size }
. Тензор не поддерживает флаг DML_TENSOR_FLAG_OWNED_BY_DML .
RecurrenceTensor
Тип: const DML_TENSOR_DESC*
Тензор, содержащий данные повторения, R. Объединение R_[iofc] и R_B[iofc] (если двунаправленное). Этот тензор имеет размеры { 1, num_directions, 4 * hidden_size, hidden_size }
. Тензор не поддерживает флаг DML_TENSOR_FLAG_OWNED_BY_DML .
BiasTensor
Тип: _Maybenull_ const DML_TENSOR_DESC*
Необязательный тензор, содержащий данные смещения, B. Concatenation { W_b[iofc], R_b[iofc] }
, и { W_Bb[iofc], R_Bb[iofc] }
(если двунаправленный). Этот тензор имеет размеры { 1, 1, num_directions, 8 * hidden_size }
. Если значение не указано, смещение по умолчанию — 0. Тензор не поддерживает флаг DML_TENSOR_FLAG_OWNED_BY_DML .
HiddenInitTensor
Тип: _Maybenull_ const DML_TENSOR_DESC*
Необязательный тензор, содержащий данные скрытого инициализатора узла, H_(t-1). Содержимое этого тензора используется только для индекса первого цикла t. Если значение не указано, по умолчанию используется значение 0. Этот тензор имеет размеры { 1, num_directions, batch_size, hidden_size }
. Тензор не поддерживает флаг DML_TENSOR_FLAG_OWNED_BY_DML .
CellMemInitTensor
Тип: _Maybenull_ const DML_TENSOR_DESC*
Необязательный тензор, содержащий данные инициализатора ячейки, C_(t-1). Содержимое этого тензора используется только для индекса первого цикла t. Если значение не указано, по умолчанию используется значение 0. Этот тензор имеет размеры { 1, num_directions, batch_size, hidden_size }
. Тензор не поддерживает флаг DML_TENSOR_FLAG_OWNED_BY_DML .
SequenceLengthsTensor
Тип: _Maybenull_ const DML_TENSOR_DESC*
Необязательный тензор, содержащий независимый seq_length для каждого элемента в пакете. Если значение не указано, все последовательности в пакете имеют длину seq_length. Этот тензор имеет размеры { 1, 1, 1, batch_size }
. Тензор не поддерживает флаг DML_TENSOR_FLAG_OWNED_BY_DML .
PeepholeTensor
Тип: _Maybenull_ const DML_TENSOR_DESC*
Необязательный тензор, содержащий данные о весе для глазков, P. Если значение не указано, по умолчанию используется значение 0. Объединение P_[iof] и P_B[iof] (если двунаправленное). Этот тензор имеет размеры { 1, 1, num_directions, 3 * hidden_size }
. Тензор не поддерживает флаг DML_TENSOR_FLAG_OWNED_BY_DML .
OutputSequenceTensor
Тип: _Maybenull_ const DML_TENSOR_DESC*
Необязательный тензор, с помощью которого записывается объединение всех промежуточных выходных значений скрытых узлов, H_t. Этот тензор имеет размеры { seq_length, num_directions, batch_size, hidden_size }
. seq_length сопоставляется с индексом цикла t.
OutputSingleTensor
Тип: _Maybenull_ const DML_TENSOR_DESC*
Необязательный тензор, с помощью которого записывается последнее выходное значение скрытых узлов, H_t. Этот тензор имеет размеры { 1, num_directions, batch_size, hidden_size }
.
OutputCellSingleTensor
Тип: _Maybenull_ const DML_TENSOR_DESC*
Необязательный тензор, с помощью которого записывается последнее выходное значение ячейки, C_t. Этот тензор имеет размеры { 1, num_directions, batch_size, hidden_size }
.
ActivationDescCount
Тип: UINT
Это поле определяет размер массива ActivationDescs .
ActivationDescs
Тип: _Field_size_(ActivationDescCount) const DML_OPERATOR_DESC*
Массив DML_OPERATOR_DESC , содержащий описания операторов активации f(), g() и h(). F(), g() и h() определяются независимо от направления. Это означает, что если DML_RECURRENT_NETWORK_DIRECTION_FORWARD или DML_RECURRENT_NETWORK_DIRECTION_BACKWARD предоставляются в direction, необходимо предоставить три активации. Если определен DML_RECURRENT_NETWORK_DIRECTION_BIDIRECTIONAL , необходимо предоставить шесть активаций. Для двунаправленных активаций необходимо указать f(), g() и h() для вперед, а затем f(), g() и h() для обратного направления.
Direction
Тип: const DML_RECURRENT_NETWORK_DIRECTION*
Направление оператора: вперед, назад или двунаправленное.
ClipThreshold
Тип: float
Порог обрезки ячейки. Обрезка ограничивает элементы тензора в диапазоне [-ClipThreshold
, +ClipThreshold
] и применяется к входным данным активаций.
UseClipThreshold
Тип: BOOL
Значение TRUE , если следует использовать ClipThreshold . В противном случае — FALSE.
CoupleInputForget
Тип: BOOL
Значение TRUE , если входные и забытые шлюзы должны быть связаны. В противном случае — FALSE.
Доступность
Этот оператор появился в DML_FEATURE_LEVEL_1_0
.
Ограничения тензоров
BiasTensor, CellMemInitTensor, HiddenInitTensor, InputTensor, OutputCellSingleTensor, OutputSequenceTensor, OutputSingleTensor, PeepholeTensor, RecurrenceTensor и WeightTensor должны иметь один и тот же тип DataType.
Поддержка тензоров
Тензор | Kind | Поддерживаемые счетчики измерений | Поддерживаемые типы данных |
---|---|---|---|
InputTensor | Входные данные | 4 | FLOAT32, FLOAT16 |
WeightTensor | Входные данные | 4 | FLOAT32, FLOAT16 |
RecurrenceTensor | Входные данные | 4 | FLOAT32, FLOAT16 |
BiasTensor | Необязательные входные данные | 4 | FLOAT32, FLOAT16 |
HiddenInitTensor | Необязательные входные данные | 4 | FLOAT32, FLOAT16 |
CellMemInitTensor | Необязательные входные данные | 4 | FLOAT32, FLOAT16 |
SequenceLengthsTensor | Необязательные входные данные | 4 | UINT32 |
PeepholeTensor | Необязательные входные данные | 4 | FLOAT32, FLOAT16 |
OutputSequenceTensor | Необязательные выходные данные | 4 | FLOAT32, FLOAT16 |
OutputSingleTensor | Необязательные выходные данные | 4 | FLOAT32, FLOAT16 |
OutputCellSingleTensor | Необязательные выходные данные | 4 | FLOAT32, FLOAT16 |
Требования
Требование | Значение |
---|---|
Заголовок | directml.h |