次の方法で共有


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導入されました。

テンソル制約

InputTensorsOutputTensor には、同じ DataTypeDimensionCount が必要です。

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