Broadcast  // Operation that produces a tensor based on arg's axes

## Description¶

Operation whose output tensor ignores axes not in the arg tensor.

### Inputs¶

Name Element Type Shape
arg Any Any

### Attributes¶

Name Type Notes
shape Shape The shape of the output.

### Outputs¶

Name Element Type Shape
output Same as arg Same as shape

The shape of arg must match shape with elements in broadcast_axes removed.

For example, if arg is $$[a, b, c]$$ then

$\begin{split}\mathtt{Broadcast(arg, Shape{2, 3}, AxisSet{0})} &= \begin{bmatrix} a & b & c\\ a & b & c \end{bmatrix}\\ \mathtt{Broadcast(arg, Shape{3, 2}, AxisSet{1})} &= \begin{bmatrix} a & a\\ b & b\\ c & c \end{bmatrix}\end{split}$

## Mathematical Definition¶

For a coordinate $$C$$, let $$p(C)$$ be a coordinate with the axes in broadcast_axes removed. For example, if $$\mathtt{broadcast_axes}=\{1,3\}$$ then $$p([d_0, d_1, d_2, d_3, d_4]) = [d_0, d_2, d_4]$$. Then

$\mathtt{output}_C = \mathtt{arg}_{p(C)}.$

## Backprop¶

$\overline{\mathtt{arg}} \leftarrow \mathtt{Sum}(\Delta, \mathtt{broadcast_axes}).$

## C++ Interface¶

Operation which “adds” axes to an input tensor, replicating elements from the input as needed along the new axes.

Public Functions

const NodeTypeInfo &get_type_info() const

Returns the NodeTypeInfo for the node’s class. During transition to type_info, returns a dummy type_info for Node if the class has not been updated yet.

Parameters
• arg: Node that produces the input tensor to be broadcast.
• shape: The shape of the output tensor.
• broadcast_axes: The axis positions (0-based) in the result that are being broadcast. The remaining axes in shape must be the same as the shape of arg.

void validate_and_infer_types()

Throws if the node is invalid.