共用方式為


DML_DIAGONAL_MATRIX1_OPERATOR_DESC結構 (directml.h)

使用指定的對角線範圍產生一個類似識別的矩陣(或其他明確值),而其他元素則填入輸入值或零(如果沒有傳遞 InputTensor )。 對角線值可能會在 DiagonalFillBeginDiagonalFillEnd 之間移動,其中大於零的值會將所有值移向右邊,而小於零會將值移向左邊。 此產生器運算子適用於模型,以避免儲存大型常數張量。 最後兩個之前的任何前置維度都會被視為批次計數,這表示張量會視為 2D 矩陣的堆疊。 此運算子會執行下列虛擬程式代碼:

// Given each current coordinate's x, figure out the corresponding x on the top (0th) row.
// Then fill it with Value if that x coordinate is either within the fill bounds, or outside
// the fill bounds when inverted. Otherwise, use the original input value or zero.

for each coordinate in OutputTensor
    topX = coordinate.x - coordinate.y
    useValue = (DiagonalFillEnd >= DiagonalFillBegin) ^ (topX >= DiagonalFillBegin) ^ (topX < DiagonalFillEnd)
    OutputTensor[coordinate] = if useValue then Value
                               else if InputTensor not null then InputTensor[coordinate]
                               else 0
endfor

這很重要

此 API 是 DirectML 獨立可轉散發套件的一部分,請參閱 Microsoft.AI.DirectML 1.9 版和更新版本。 另請參閱 DirectML 版本歷程記錄。

語法

struct DML_DIAGONAL_MATRIX1_OPERATOR_DESC
{
    _Maybenull_ const DML_TENSOR_DESC* InputTensor;
    const DML_TENSOR_DESC* OutputTensor;
    DML_TENSOR_DATA_TYPE ValueDataType;
    DML_SCALAR_UNION Value;
    INT DiagonalFillBegin;
    INT DiagonalFillEnd;
};

成員

InputTensor

類型: _Maybenull_ const DML_TENSOR_DESC*

選擇性的輸入張量。

OutputTensor

類型: const DML_TENSOR_DESC*

要寫入結果的張量。 維度為 { Batch1, Batch2, OutputHeight, OutputWidth }。 高度和寬度不需要是正方形。

ValueDataType

類型: DML_TENSOR_DATA_TYPE

Value 成員的數據類型,必須符合 OutputTensor::D ataType

Value

類型: DML_SCALAR_UNION

要填入輸出的常數值,以 ValueDataType 決定如何解譯成員。

DiagonalFillBegin

類型: INT

要填入 Value 的範圍下限(開頭包含)。 如果開頭和結尾是反轉的(開始 > 結束),則會反轉填滿。

DiagonalFillEnd

類型: INT

要填入 Value 之範圍的上限(結束獨佔)。 如果開頭和結尾是反轉的(開始 > 結束),則會反轉填滿。

範例

預設身分識別矩陣:

InputTensor: none
ValueDataType: FLOAT32
Value: 7
DiagonalFillBegin: 0
DiagonalFillEnd: 1
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[1, 0, 0, 0, 0],
     [0, 1, 0, 0, 0],
     [0, 0, 1, 0, 0],
     [0, 0, 0, 1, 0]]

填入 3 元素寬對角線:

InputTensor: none
ValueDataType: FLOAT32
Value: 7
DiagonalFillBegin: 0
DiagonalFillEnd: 3
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[7, 7, 7, 0, 0],
     [0, 7, 7, 7, 0],
     [0, 0, 7, 7, 7],
     [0, 0, 0, 7, 7]]

保持右上對角線半角線(嚴格上三角形),將左下角零。

InputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[4, 7, 3, 7, 9],
     [1, 2, 8, 6, 9],
     [9, 4, 1, 8, 7],
     [4, 3, 4, 2, 4]]
ValueDataType: FLOAT32
Value: 0
DiagonalFillBegin: INT32_MIN
DiagonalFillEnd: 1
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[0, 7, 3, 7, 9],
     [0, 0, 8, 6, 9],
     [0, 0, 0, 8, 7],
     [0, 0, 0, 0, 4]]

只保留對角線中的值,將所有其他值都零。

InputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[4, 7, 3, 7, 9],
     [1, 2, 8, 6, 9],
     [9, 4, 1, 8, 7],
     [4, 3, 4, 2, 4]]
ValueDataType: FLOAT32
Value: 0
DiagonalFillBegin: 1
DiagonalFillEnd: 0
OutputTensor: (Sizes:{4,5} DataType:FLOAT32)
    [[4, 0, 0, 0, 0],
     [0, 2, 0, 0, 0],
     [0, 0, 1, 0, 0],
     [0, 0, 0, 2, 0]]

備註

DiagonalFillBegin 設定為 DML_OPERATOR_DIAGONAL_MATRIX::Offset,而 DiagonalFillEnd 設定為 DML_OPERATOR_DIAGONAL_MATRIX::Offset + 1 時,這個運算符相當於DML_DIAGONAL_MATRIX_OPERATOR_DESC。

可用性

此運算子是在 DML_FEATURE_LEVEL_5_1 中引進的。

Tensor 條件約束

InputTensorOutputTensor 必須具有相同 的 DataTypeDimensionCount

Tensor 支援

張量 仁慈 (if context refers to kindness) 支援的維度計數 支援的數據類型
InputTensor 的 選擇性輸入 2 到 4 FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8
OutputTensor 輸出 2 到 4 FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8

需求

   
頁眉 directml.h