DML_NONZERO_COORDINATES_OPERATOR_DESC構造体 (directml.h)
入力テンソルのすべての 0 以外の要素の N 次元座標を計算します。
この演算子は、値の MxN 行列を生成します。各行 M には、入力からの 0 以外の値の N 次元座標が含まれます。 FLOAT32またはFLOAT16入力を使用する場合、負と正の両方の 0 (0.0f と -0.0f) は、この演算子の目的で 0 として扱われます。
演算子では、 OutputCoordinatesTensor に、入力のすべての要素が 0 以外の最悪のシナリオに対応できる十分な大きさが必要です。 この演算子は 、OutputCountTensor を介して 0 以外の要素の数を返します。呼び出し元は 、OutputCoordinatesTensor に書き込まれた座標の数を調べることができます。
構文
struct DML_NONZERO_COORDINATES_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputCountTensor;
const DML_TENSOR_DESC *OutputCoordinatesTensor;
};
メンバー
InputTensor
型: const DML_TENSOR_DESC*
入力テンソル。
OutputCountTensor
型: const DML_TENSOR_DESC*
入力テンソル内の 0 以外の要素の数を保持する出力テンソル。 このテンソルはスカラーである必要があります。つまり、このテンソルのサイズはすべて 1 である必要があります。 このテンソルの型は UINT32 である必要があります。
OutputCoordinatesTensor
型: const DML_TENSOR_DESC*
0 以外の入力要素の N 次元座標を保持する出力テンソル。
このテンソルのサイズ{1,1,M,N}
は 、(DimensionCount が 4 の場合)、または {1,1,1,M,N}
(DimensionCount が 5 の場合) である必要があります。ここで、M は InputTensor 内の要素の合計数であり、N は入力の DimensionCount までの InputTensor の有効ランク以上である必要があります。
テンソルの有効ランクは、サイズ 1 の先頭のディメンションを除く、そのテンソルの DimensionCount によって決定されます。 たとえば、 のサイズを持つテンソルは、サイズが の {1,2,3,4}
テンソルと同様に、有効なランク 3 を持っています {1,1,5,5,5}
。 サイズ {1,1,1,1}
を持つテンソルは、有効なランク 0 を持っています。
のサイズ{1,1,12,5}
を持つ InputTensor について考えてみましょう。 この入力テンソルには 60 個の要素が含まれており、有効ランクは 2 です。 この例では 、OutputCoordinatesTensor のすべての有効なサイズは の形式 {1,1,60,N}
です。N >= 2 ですが 、DimensionCount (この例では 4) を超えるサイズはありません。
このテンソルに書き込まれた座標は、要素インデックスを昇順で並べ替えることが保証されます。 たとえば、入力テンソルの座標 {1,0}、 {1,2}、および {0,5}に 3 つのゼロ以外の値がある場合、 OutputCoordinatesTensor に書き込まれる値は になります [[0,5], [1,0], [1,2]]
。
このテンソルには、入力テンソル内の要素の数と等しいディメンション M が必要ですが、この演算子は最大の OutputCount 要素のみをこのテンソルに書き込みます。 OutputCount は、スカラー OutputCountTensor を介して返されます。
注意
OutputCount を超えるこのテンソルの残りの要素は、この演算子が完了すると未定義になります。 これらの要素の値に依存しないでください。
例
InputTensor: (Sizes:{1,1,2,4}, DataType:FLOAT32)
[[1.0f, 0.0f, 0.0f, 2.0f],
[-0.0f, 3.5f, 0.0f, -5.2f]]
OutputCountTensor: (Sizes:{1,1,1,1}, DataType:UINT32)
[4]
OutputCoordinatesTensor: (Sizes:{1,1,8,3}, DataType:UINT32)
[[0, 0, 0],
[0, 0, 3],
[0, 1, 1],
[0, 1, 3],
[0, 0, 0], //
[0, 0, 0], // Values in rows >= OutputCountTensor (4 in
[0, 0, 0], // this case) are left undefined
[0, 0, 0]] //
注釈
可用性
この演算子は で DML_FEATURE_LEVEL_3_0
導入されました。
Tensor のサポート
DML_FEATURE_LEVEL_4_0以上
テンソル | 種類 | Dimensions | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|---|
InputTensor | 入力 | { [D0], [D1], [D2], [D3], [D4], [D5], [D6], D7 } | 1 から 8 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputCountTensor | 出力 | { [1], [1], [1], [1], [1], [1], [1], 1 } | 1 から 8 | UINT32 |
OutputCoordinatesTensor | 出力 | { [1], [1], [1], [1], [1], [1], M, N } | 2 から 8 | UINT32 |
DML_FEATURE_LEVEL_3_0以上
テンソル | 種類 | Dimensions | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|---|
InputTensor | 入力 | { [D0], D1, D2, D3, D4 } | 4 から 5 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputCountTensor | 出力 | { [1], 1, 1, 1, 1 } | 4 から 5 | UINT32 |
OutputCoordinatesTensor | 出力 | { [1], 1, 1, M, N } | 4 から 5 | UINT32 |
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 10 ビルド 20348 |
サポートされている最小のサーバー | Windows 10 ビルド 20348 |
Header | directml.h |