VariadicSplit

バージョン名: VariadicSplit-1

カテゴリー: データ移動

簡単な説明: VariadicSplit 操作は、入力テンソルを何らかの軸に沿ってチャンクに分割します。チャンクは、split_lengths 入力テンソルに応じて可変長を持つ場合があります。

詳細説明:

VariadicSplit 操作は、指定された入力テンソル data を、[1] axis を持つスカラーまたはテンソルに沿ってチャンクに分割します。追加の入力テンソルの split_lengths に基づいて複数の出力テンソルを生成します。i 番目の出力テンソル形状は、split_lengths[i] である axis に沿った次元を除き、入力テンソル data 形状と等しくなります。

\[shape\_output\_tensor = [data.shape[0], data.shape[1], \dotsc , split\_lengths[i], \dotsc , data.shape[D-1]]\]

ここで、D は入力テンソル data のランクです。split_lengths の要素の合計は data.shape[axis] と一致する必要があります。

属性: VariadicSplit 操作には属性がありません。

入力:

  • 1: data。タイプ T1 の任意の形状のテンソル。必須。

  • 2: axis。分割する data に沿った軸。範囲 -rank(data) .. rank(data)-1 の値を持つ T2 タイプの形状 [1] を持つスカラーまたはテンソル。負の値は終端からの次元を指定します。必須。

  • 3: split_lengths。分割 axis に沿った各出力テンソル形状の次元値を含むリスト。タイプ T2 の 1D テンソル。split_lengths の要素数によって出力数が決まります。split_lengths の要素の合計は data.shape[axis] と一致する必要があります。さらに、split_lengths には単一の -1 要素を含めることができます。これは、他の部分によって消費されない、指定された axis に沿った残りの項目すべてを意味します。必須。

出力:

  • 複数の出力: T1 タイプのテンソル。i 番目の出力は、split_lengths[i] != -1 の場合、split_lengths[i] である axis に沿った次元を除いて、data 入力テンソルと同じ形状を持ちます。それ以外は、axis に沿った次元は、split_lengths 入力で説明されているように処理されます。

タイプ:

  • T1: サポートされている任意のタイプ。

  • T2: 任意の整数タイプ。

例:

 <layer id="1" type="VariadicSplit" ...>
     <input>
         <port id="0">            <!-- some data -->
             <dim>6</dim>
             <dim>12</dim>
             <dim>10</dim>
             <dim>24</dim>
         </port>
         <port id="1">            <!-- axis: 0 -->
         </port>
         <port id="2">
             <dim>3</dim>         <!-- split_lengths: [1, 2, 3] -->
         </port>
     </input>
     <output>
         <port id="3">
             <dim>1</dim>
             <dim>12</dim>
             <dim>10</dim>
             <dim>24</dim>
         </port>
         <port id="4">
             <dim>2</dim>
             <dim>12</dim>
             <dim>10</dim>
             <dim>24</dim>
         </port>
         <port id="5">
             <dim>3</dim>
             <dim>12</dim>
             <dim>10</dim>
             <dim>24</dim>
         </port>
     </output>
 </layer>
 <layer id="1" type="VariadicSplit" ...>
     <input>
         <port id="0">            <!-- some data -->
             <dim>6</dim>
             <dim>12</dim>
             <dim>10</dim>
             <dim>24</dim>
         </port>
         <port id="1">            <!-- axis: 0 -->
         </port>
         <port id="2">
             <dim>2</dim>         <!-- split_lengths: [-1, 2] -->
         </port>
     </input>
     <output>
         <port id="3">
             <dim>4</dim>         <!--  4 = 6 - 2  -->
             <dim>12</dim>
             <dim>10</dim>
             <dim>24</dim>
         </port>
         <port id="4">
             <dim>2</dim>
             <dim>12</dim>
             <dim>10</dim>
             <dim>24</dim>
         </port>
     </output>
 </layer>