DML_DIAGONAL_MATRIX1_OPERATOR_DESC 構造体 (directml.h)

指定された対角スパンに沿って単位 (または他の明示的な値) 行列に似た行列を生成します。他の要素には入力値またはゼロ (InputTensor が渡されなかった場合) が格納されます。 対角線の値は、DiagonalFillBeginDiagonalFillEnd の間の任意の場所にシフトできます。0 より大きい値はすべての値を右にシフトし、0 未満の場合は左にシフトします。 このジェネレーター演算子は、モデルで大きな定数テンソルの格納を回避する際に役立ちます。 最後の 2 つより前の次元はすべてバッチ カウントとして扱われます。つまり、テンソルは 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 で埋める範囲の上限 (末尾は除く)。 開始と終了が反転 (開始 > 終了) の場合、格納された内容は反転されます。

既定の ID マトリックス:

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]]

解説

この演算子は、DiagonalFillBeginDML_OPERATOR_DIAGONAL_MATRIX::Offset に設定されていて、DiagonalFillEndDML_OPERATOR_DIAGONAL_MATRIX::Offset + 1 に設定されている場合の DML_DIAGONAL_MATRIX_OPERATOR_DESC と同じです。

可用性

この演算子は、DML_FEATURE_LEVEL_5_1 で導入されました。

Tensor 制約

InputTensorOutputTensor には、同じ DataTypeDimensionCount が必要です。

Tensor のサポート

Tensor 種類 サポートされているディメンション数 サポートされるデータ型
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