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 條件約束
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 |
需求
標頭 | directml.h |