DML_JOIN_OPERATOR_DESC構造体 (directml.h)
指定した軸に沿って入力テンソルの配列を連結します。
入力テンソルは、0 以外のサイズを含む結合軸を除くすべてのディメンションでサイズが同じ場合にのみ結合できます。 出力サイズは、結合軸を除く入力サイズと等しくなります。これは、すべての入力の結合軸サイズの合計です。 これらの制約は、以下の擬似コードに示されています。
joinSize = 0;
for (i = 0; i < InputCount; i++) {
assert(inputTensors[i]->DimensionCount == outputTensor->DimensionCount);
for (dim = 0; dim < outputTensor->DimensionCount; dim++) {
if (dim == Axis) { joinSize += inputTensors[i]->Sizes[dim]; }
else { assert(inputTensors[i]->Sizes[dim] == outputTensor->Sizes[dim]); }
}
}
assert(joinSize == outputTensor->Sizes[Axis]);
1 つの入力テンソルを結合すると、入力テンソルのコピーが生成されます。
この演算子は、 DML_SPLIT_OPERATOR_DESCの逆関数です。
構文
struct DML_JOIN_OPERATOR_DESC {
UINT InputCount;
const DML_TENSOR_DESC *InputTensors;
const DML_TENSOR_DESC *OutputTensor;
UINT Axis;
};
メンバー
InputCount
型: UINT
このフィールドは 、InputTensors 配列のサイズを決定します。 この値は 0 より大きくする必要があります。
InputTensors
型: _Field_size_(InputCount) const DML_TENSOR_DESC*
1 つの出力テンソルに結合するテンソルの説明を含む配列。 この配列内のすべての入力テンソルは、0 以外の値を持つ結合軸を除き、同じサイズにする必要があります。
OutputTensor
型: const DML_TENSOR_DESC*
結合された入力テンソルを書き込むテンソル。 出力サイズは、結合軸を除くすべての入力テンソルと同じサイズにする必要があります。これは、すべての入力の結合軸サイズの合計と等しい必要があります。
Axis
型: UINT
結合する入力テンソルのディメンションのインデックス。 入力テンソルと出力テンソルはすべて、この軸を除くすべての寸法で同じサイズにする必要があります。 この値は、 の範囲内 [0, OutputTensor.DimensionCount - 1]
にある必要があります。
例
例 1. 可能な軸を 1 つだけ使用してテンソルを結合する
この例では、テンソルは 4 次元 (軸 3) に沿ってのみ結合できます。 4 番目の次元のテンソルのサイズが一致しないため、他の軸を結合することはできません。
InputCount: 2
Axis: 3
InputTensors[0]: (Sizes:{1, 1, 2, 3}, DataType:FLOAT32)
[[[[ 1, 2, 3],
[ 4, 5, 6]]]]
InputTensors[1]: (Sizes:{1, 1, 2, 4}, DataType:FLOAT32)
[[[[ 7, 8, 9, 10],
[11, 12, 13, 14]]]]
OutputTensor: (Sizes:{1, 1, 2, 7}, DataType:FLOAT32)
[[[[ 1, 2, 3, 7, 8, 9, 10],
[ 4, 5, 6, 11, 12, 13, 14]]]]
例 2. 複数の可能な軸を持つテンソルを結合する:
次の例では、同じ入力テンソルを使用します。 すべての入力は、すべてのディメンションで同じサイズを持つため、任意のディメンションに沿って結合できます。
InputCount: 3
InputTensors[0]: (Sizes:{1, 1, 2, 2}, DataType:FLOAT32)
[[[[1, 2],
[3, 4]]]]
InputTensors[1]: (Sizes:{1, 1, 2, 2}, DataType:FLOAT32)
[[[[5, 6],
[7, 8]]]]
InputTensors[2]: (Sizes:{1, 1, 2, 2}, DataType:FLOAT32)
[[[[9, 10],
[11, 12]]]]
結合軸 1:
Axis: 1
OutputTensor: (Sizes:{1, 3, 2, 2}, DataType:FLOAT32)
[[[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]],
[[9, 10],
[11, 12]]]]
結合軸 2:
Axis: 2
OutputTensor: (Sizes:{1, 1, 6, 2}, DataType:FLOAT32)
[[[[1, 2],
[3, 4],
[5, 6],
[7, 8],
[9, 10],
[11, 12]]]]
結合軸 3:
Axis: 3
OutputTensor: (Sizes:{1, 1, 2, 6}, DataType:FLOAT32)
[[[[1, 2, 5, 6, 9, 10],
[3, 4, 7, 8, 11, 12]]]]
可用性
この演算子は で DML_FEATURE_LEVEL_1_0
導入されました。
テンソル制約
InputTensors と OutputTensor には、同じ DataType と DimensionCount が必要です。
Tensor のサポート
DML_FEATURE_LEVEL_4_1以上
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
InputTensors | 入力の配列 | 1 から 8 | FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8 |
OutputTensor | 出力 | 1 から 8 | FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8 |
DML_FEATURE_LEVEL_3_0以上
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
InputTensors | 入力の配列 | 4 から 5 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputTensor | 出力 | 4 から 5 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
DML_FEATURE_LEVEL_2_1以上
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
InputTensors | 入力の配列 | 4 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
OutputTensor | 出力 | 4 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
DML_FEATURE_LEVEL_1_0以上
テンソル | 種類 | サポートされているディメンション数 | サポートされるデータ型 |
---|---|---|---|
InputTensors | 入力の配列 | 4 | FLOAT32、FLOAT16、INT32、INT16、UINT32、UINT16 |
OutputTensor | 出力 | 4 | FLOAT32、FLOAT16、INT32、INT16、UINT32、UINT16 |
要件
Header | directml.h |