DML_DIAGONAL_MATRIX1_OPERATOR_DESC 構造体 (directml.h)
指定された対角スパンに沿って単位 (または他の明示的な値) 行列に似た行列を生成します。他の要素には入力値またはゼロ (InputTensor が渡されなかった場合) が格納されます。 対角線の値は、DiagonalFillBegin と DiagonalFillEnd の間の任意の場所にシフトできます。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
Value メンバーのデータ型。OutputTensor::D ataType と一致する必要があります。
Value
メンバーの解釈方法を決定する 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]]
解説
この演算子は、DiagonalFillBegin が DML_OPERATOR_DIAGONAL_MATRIX::Offset に設定されていて、DiagonalFillEnd が DML_OPERATOR_DIAGONAL_MATRIX::Offset + 1 に設定されている場合の DML_DIAGONAL_MATRIX_OPERATOR_DESC と同じです。
可用性
この演算子は、DML_FEATURE_LEVEL_5_1 で導入されました。
Tensor 制約
InputTensor と OutputTensor には、同じ DataType と DimensionCount が必要です。
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 |