Поделиться через


структура 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