指定された対角スパンに沿って 1 つ (または他の明示的な値) を持つ ID に似た行列を生成し、他の要素は入力値またはゼロ ( 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 のサポート
| テンソル | 優しい | サポートされているディメンション数 | サポートされているデータ型 |
|---|---|---|---|
| インプットテンソル | 省略可能な入力 | 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 |