次の方法で共有


DML_DIAGONAL_MATRIX1_OPERATOR_DESC構造体 (directml.h)

指定された対角スパンに沿って 1 つ (または他の明示的な値) を持つ ID に似た行列を生成し、他の要素は入力値またはゼロ ( 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 のサポート

テンソル 優しい サポートされているディメンション数 サポートされているデータ型
インプットテンソル 省略可能な入力 2 ~ 4 FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8
出力テンソル アウトプット 2 ~ 4 FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8

要求事項

   
ヘッダ directml.h