DML_JOIN_OPERATOR_DESC結構 (directml.h)

沿著指定的座標軸串連輸入張量陣列。

只有在輸入張量的大小在所有維度中都相同時,輸入張量才會聯結,但聯結座標軸可能包含任何非零的大小。 輸出大小等於輸入大小,但聯結座標軸除外,這是所有輸入聯結座標軸大小的總和。 下列虛擬程式碼會說明這些條件約束。

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]);

聯結單一輸入張量只會產生輸入張量複本。

這個運算子是 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*

陣列,包含要聯結至單一輸出張量之張量的描述。 此陣列中的所有輸入張量必須具有相同的大小,但聯結座標軸可能具有任何非零值。

OutputTensor

類型:const DML_TENSOR_DESC*

要寫入聯結輸入張量的張量。 輸出大小必須與所有輸入張量的大小相同,但聯結座標軸除外,這必須等於所有輸入聯結座標軸大小的總和。

Axis

類型: UINT

要聯結之輸入張量維度的索引。 除了這個座標軸以外,所有維度中的所有輸入和輸出張量都必須具有相同的大小。 這個值必須位於 範圍 [0, OutputTensor.DimensionCount - 1] 中。

範例

範例 1. 只聯結一個可能座標軸的張量

在此範例中,張量只能沿著第四個維度聯結 (軸 3) 。 無法聯結任何其他座標軸,因為第四個維度中的張量大小不符。

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 引進。

Tensor 條件約束

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

需求

   
標頭 directml.h