Broadcast#
バージョン名: Broadcast-3
カテゴリー: データ移動
簡単な説明: Broadcast は、最初の入力のデータを複製して、2 番目の入力の特定の形状に適合させます。
詳細な説明:
Broadcast は最初のテンソル data を取得し、mode 属性と 3 番目の入力 axes_mapping で指定されたブロードキャスト・ルールに従って、2 番目の入力テンソル target_shape に一致する形状を持つ新しいテンソルを構築します。target_shape 入力は、出力の必要な形状を表す 1D 整数テンソルです。
mode 属性と 3 番目の入力 axes_mapping は、入力 data テンソルのランクが target_shape 入力のサイズと一致しない場合に関連します。どちらも、data 形状の軸を出力軸にマッピングする方法を定義します。mode が numpy に設定されている場合、標準の一方向 numpy ブロードキャスト・ルールが適用されることを意味します。これらのルールは、一方向ブロードキャストのみが適用される場合、要素ごとの操作のブロードキャスト・ルールで説明されています: 入力テンソル data は target_shape にブロードキャストされますが、その逆は行われません。
mode が bidirectional に設定されている場合、ブロードキャスト・ルールは numpy.array(input) * numpy.ones(target_shape) と同様になります。次元は右揃えです。2 つの対応する次元が同じ値を持つか、そのうちの 1 つが 1 に等しい必要があります。この属性値を使用する場合、操作の 3 番目の入力を指定しないでください。この動作については、双方向ブロードキャスト・ルールで説明されています。
mode が explicit に設定されている場合、3 番目の入力 axes_mapping が機能します。これには軸インデックスのリストが含まれており、各インデックスは最初の入力テンソル data の軸を出力の軸にマップします。axis_mapping のサイズは入力 data テンソルのランクと一致する必要があるため、data テンソルのすべての軸が出力の軸にマッピングされる必要があります。
例えば、axes_mapping = [1] では、次元 0、2、および 3 に沿った初期テンソルの複製によって、形状 [C] のテンソルを形状 [N,C,H,W] にブロードキャストできます。別の例は、axes_mapping = [1, 2] で形状 [H,W] のテンソルを形状 [N,H,W,C] にブロードキャストすることです。どちらの例でも、mode を explicit に設定し、前述の axes_mapping 入力を提供する必要があります。これは、このような操作は、axes_mapping を numpy に設定して表現できないためです。
属性:
mode
説明:
inputテンソル軸を出力形状軸にマッピングするルールを指定します。値の範囲:
numpy - ONNX ブロードキャストに準拠した numpy ブロードキャスト・ルール。説明は ONNX ドキュメントで参照できます。
dataからtarget_shapeへは一方向のブロードキャストのみが適用されます。この属性値を使用する場合、操作の 3 番目の入力を指定しないでください。explicit - 入力
data形状軸の出力形状へのマッピングは、明示的な 3 番目の入力として提供されます。bidirectional - ブロードキャスト・ルールは
numpy.array(input) * numpy.ones(target_shape)に似ています。次元は右揃えです。2 つの対応する次元が同じ値を持つか、そのうちの 1 つが 1 に等しい必要があります。この属性値を使用する場合、操作の 3 番目の入力を指定しないでください。
タイプ:
stringデフォルト値: “numpy”
必須: いいえ
入力:
1:
data- ブロードキャストされているタイプ T および形状のソーステンソル。必須。2:
target_shape- 出力形状を記述する T_SHAPE タイプの 1D テンソル。必須。3:
axes_mapping- 軸インデックスのリストを記述する T_SHAPE タイプの 1D テンソル。各インデックスは、最初の入力テンソルdataの軸を出力の軸にマップします。このテンソルのインデックス値はソートされる必要があります。これにより、ブロードキャスト中の入力dataテンソルのオンザフライ転置が無効になります。axes_mapping入力は、explicit はmodeにのみ必要です。
出力:
1: 最初のテンソル
dataから複製された内容とtarget_shapeに一致する形状を持つdataテンソルタイプの出力テンソル。
タイプ
T: 任意の数値タイプ。
T_SHAPE: 任意の数値タイプ。
例
<layer ... type="Broadcast" ...>
<data mode="numpy"/>
<input>
<port id="0">
<dim>16</dim>
<dim>1</dim>
<dim>1</dim>
</port>
<port id="1">
<dim>4</dim> <!-- テンソルには 4 つの要素が含まれる: [1, 16, 50, 50] -->
</port> <!-- 3 番目の入力には mode="numpy" を指定しないでください -->
</input>
<output>
<port id="2">
<dim>1</dim>
<dim>16</dim>
<dim>50</dim>
<dim>50</dim>
</port>
</output>
</layer>
<layer ... type="Broadcast" ...>
<data mode="explicit"/>
<input>
<port id="0">
<dim>16</dim>
</port>
<port id="1">
<dim>4</dim> <!-- テンソルには 4 つの要素が含まれる: [1, 16, 50, 50] -->
</port>
<port id="1">
<dim>1</dim> <!-- テンソルには 1 つの要素が含まれる: [1] -->
</port>
</input>
<output>
<port id="2">
<dim>1</dim>
<dim>16</dim>
<dim>50</dim>
<dim>50</dim>
</port>
</output>
</layer>
<layer ... type="Broadcast" ...>
<data mode="explicit"/>
<input>
<port id="0">
<dim>50</dim>
<dim>50</dim>
</port>
<port id="1">
<dim>4</dim> <!-- テンソルには 4 つの要素が含まれる: [1, 50, 50, 16] -->
</port>
<port id="1">
<dim>2</dim> <!-- テンソルには 2 つの要素が含まれる: [1, 2] -->
</port>
</input>
<output>
<port id="2">
<dim>1</dim>
<dim>50</dim>
<dim>50</dim>
<dim>16</dim>
</port>
</output>
</layer>
<layer ... type="Broadcast" ...>
<data mode="bidirectional"/>
<input>
<port id="0">
<dim>16</dim>
<dim>1</dim>
<dim>1</dim>
</port>
<port id="1">
<dim>4</dim> <!-- テンソルには 4 つの要素が含まれる: [1, 1, 50, 50] -->
</port> <!-- 3 番目の入力には mode="bidirectional" を指定しないでください。 -->
</input>
<output>
<port id="2">
<dim>1</dim>
<dim>16</dim>
<dim>50</dim>
<dim>50</dim>
</port>
</output>
</layer>