Pad

バージョン名: Pad-1

カテゴリー: データ移動

簡単な説明: Pad 操作はエッジ上の入力テンソルを拡張します。パディングされた要素の量と値は、入力と属性によって定義されます。

詳細な説明: 属性は、各軸に沿って追加する要素の数と、新しい要素値が生成される規則 (例えば、要素値が指定された定数で満たされるか、入力テンソルの内容に基づいて生成されるかなど) を指定します。

次の例は、指定された入力テンソル、属性、pad_mode に対して Pad レイヤーの出力テンソルがどのように生成されるかを示しています。

入力テンソル:

INPUT =
[[ 1  2  3  4 ]
[ 5  6  7  8 ]
[ 9 10 11 12 ]]

属性:

pads_begin = [0, 1]
pads_end = [2, 3]

pad_mode:

  • pad_mode = "constant":

OUTPUT =
[[ 0  1  2  3  4  0  0  0 ]
[ 0  5  6  7  8  0  0  0 ]
[ 0  9 10 11 12  0  0  0 ]
[ 0  0  0  0  0  0  0  0 ]
[ 0  0  0  0  0  0  0  0 ]]
  • pad_mode = "edge":

OUTPUT =
[[ 1  1  2  3  4  4  4  4 ]
[ 5  5  6  7  8  8  8  8 ]
[ 9  9 10 11 12 12 12 12 ]
[ 9  9 10 11 12 12 12 12 ]
[ 9  9 10 11 12 12 12 12 ]]
  • pad_mode = "reflect":

OUTPUT =
[[  2  1  2  3  4  3  2  1 ]
[  6  5  6  7  8  7  6  5 ]
[ 10  9 10 11 12 11 10  9 ]
[  6  5  6  7  8  7  6  5 ]
[  2  1  2  3  4  3  2  1 ]]
  • pad_mode = "symmetric":

OUTPUT =
[[ 1  1  2  3  4  4  3  2 ]
[ 5  5  6  7  8  8  7  6 ]
[ 9  9 10 11 12 12 11 10 ]
[ 9  9 10 11 12 12 11 10 ]
[ 5  5  6  7  8  8  7  6 ]]

属性:

  • pad_mode

    • 説明: pad_mode は、新しい要素値を生成するのに使用する方法を指定します。

    • 値の範囲: 文字列形式のメソッド名。

      • constant - パディングされた値は、pad_value 入力の値と等しくなります。入力がない場合は、ゼロ値がパディングされます。

      • edge - パディングされた値は、入力 data テンソルのそれぞれのエッジからコピーされます。

      • reflect - パディングされた値は入力 data テンソルを反映しています。エッジの値は複製されません。pads_begin[D] また、pads_end[D] は、有効な D に対して data.shape[D] 1 より大きくてはなりません。

      • symmetric - パディングされた値は、入力 data テンソルから対称的に追加されます。この方法は reflect と似ていますが、エッジの値が複製されます。詳細については、上記の例を参照してください。有効な D は、pads_begin[D]pads_end[D]data.shape[D] を超えてはなりません。

    • タイプ: string

    • 必須: はい

入力:

  • 1: 任意の形状およびタイプ Tdata テンソル。必須。

  • 2: pads_begin T_INT タイプの 1D テンソル。要素の数は data 属性のインデックス数と一致します。各軸の先頭のパディング要素の数を指定します。必須。

  • 3: pads_end T_INT タイプの 1D テンソル。要素の数は data 属性のインデックス数と一致します。各軸の終わりのパディング要素の数を指定します。必須。

  • 4: pad_value T タイプのスカラーテンソル。pad_mode = "constant" でのみ使用されます。すべての新しい要素にはこの値が設定されるか、入力がない場合は 0 が設定されます。他の pad_mode 値には設定しないでください。オプション。

出力:

  • 1: 0 から len(data.shape) - 1 までの各 D について次元 pads_begin[D] + data.shape[D] + pads_end[D] を持つタイプ T のパディングされたテンソルを出力します。

タイプ:

  • T: 任意の数値タイプ。

  • T_INT: 負でない整数タイプ。

例: 定数モード

 <layer ... type="Pad" ...>
     <data pad_mode="constant"/>
     <input>
         <port id="0">
             <dim>1</dim>
             <dim>3</dim>
             <dim>32</dim>
             <dim>40</dim>
         </port>
         <port id="1">
             <dim>4</dim>     <!-- pads_begin = [0, 5, 2, 1]  -->
         </port>
         <port id="2">
             <dim>4</dim>     <!-- pads_end = [1, 0, 3, 7] -->
         </port>
         <port id="3">
                             <!-- pad_value = 15.0 -->
         </port>
     </input>
     <output>
         <port id="0">
             <dim>2</dim>     <!-- 2 = 0 + 1 + 1 = pads_begin[0] + input.shape[0] + pads_end[0] -->
             <dim>8</dim>     <!-- 8 = 5 + 3 + 0 = pads_begin[1] + input.shape[1] + pads_end[1] -->
             <dim>37</dim>    <!-- 37 = 2 + 32 + 3 = pads_begin[2] + input.shape[2] + pads_end[2] -->
             <dim>48</dim>    <!-- 48 = 1 + 40 + 7 = pads_begin[3] + input.shape[3] + pads_end[3] -->
                             <!-- all new elements are filled with 15.0 value -->
         </port>
     </output>
 </layer>

例: エッジモード

 <layer ... type="Pad" ...>
     <data pad_mode="edge"/>
     <input>
         <port id="0">
             <dim>1</dim>
             <dim>3</dim>
             <dim>32</dim>
             <dim>40</dim>
         </port>
         <port id="1">
             <dim>4</dim>     <!-- pads_begin = [0, 5, 2, 1]  -->
         </port>
         <port id="2">
             <dim>4</dim>     <!-- pads_end = [1, 0, 3, 7] -->
         </port>
     </input>
     <output>
         <port id="0">
             <dim>2</dim>     <!-- 2 = 0 + 1 + 1 = pads_begin[0] + input.shape[0] + pads_end[0] -->
             <dim>8</dim>     <!-- 8 = 5 + 3 + 0 = pads_begin[1] + input.shape[1] + pads_end[1] -->
             <dim>37</dim>    <!-- 37 = 2 + 32 + 3 = pads_begin[2] + input.shape[2] + pads_end[2] -->
             <dim>48</dim>    <!-- 48 = 1 + 40 + 7 = pads_begin[3] + input.shape[3] + pads_end[3] -->
         </port>
     </output>
 </layer>