.. _op_ai_onnx_Gelu: Gelu ==== - **Domain**: ``ai.onnx`` - **Since version**: 20 Gelu takes one input data (Tensor ) and produces one output data (Tensor ) where the gaussian error linear units function, $y = 0.5 \* x \* (1 + erf(x/sqrt(2)))$ is applied to the tensor elementwise. If the attribute "approximate" is set to "tanh", the function estimation, $y = 0.5 \* x \* (1 + Tanh(sqrt(2/\pi) \* (x + 0.044715 \* x^3)))$ is used and applied to the tensor elementwise. **Inputs** - **X** (*T*): Input tensor **Outputs** - **Y** (*T*): Output tensor **Attributes** - **approximate** (*string*): Gelu approximation algorithm: ``"tanh"``, ``"none"``(default).``"none"``: do not use approximation.``"tanh"``: use tanh approximation. **Type Constraints** - **T**: Constrain input and output types to float tensors. Allowed types: tensor(bfloat16), tensor(double), tensor(float), tensor(float16). Examples -------- **test_cc_gelu_default_1** .. code-block:: text Node: Gelu(X) -> (Y) .. code-block:: text Inputs: X: shape=(3,), dtype=float32 [-1., 0., 1.] Outputs: Y: shape=(3,), dtype=float32 [-0.15865526, 0. , 0.8413447 ] **test_cc_gelu_default_2** .. code-block:: text Node: Gelu(X) -> (Y) Attributes: approximate = "none" .. code-block:: text Inputs: X: shape=(2, 3), dtype=float32 [[-2. , -1. , -0.5], [ 0.5, 1. , 2. ]] Outputs: Y: shape=(2, 3), dtype=float32 [[-0.04550028, -0.15865526, -0.15426877], [ 0.34573123, 0.8413447 , 1.9544997 ]] **test_cc_gelu_default_bfloat16** .. code-block:: text Node: Gelu(X) -> (Y) .. code-block:: text Inputs: X: shape=(4,), dtype=bfloat16 [-1, 0, 1, 0.5] Outputs: Y: shape=(4,), dtype=bfloat16 [-0.158203, 0, 0.839844, 0.345703] **test_cc_gelu_default_float16** .. code-block:: text Node: Gelu(X) -> (Y) .. code-block:: text Inputs: X: shape=(3,), dtype=float16 [-1., 0., 1.] Outputs: Y: shape=(3,), dtype=float16 [-0.1587, 0. , 0.8413] **test_cc_gelu_tanh_1** .. code-block:: text Node: Gelu(X) -> (Y) Attributes: approximate = "tanh" .. code-block:: text Inputs: X: shape=(3,), dtype=float32 [-1., 0., 1.] Outputs: Y: shape=(3,), dtype=float32 [-0.158808, 0. , 0.841192] **test_cc_gelu_tanh_2** .. code-block:: text Node: Gelu(X) -> (Y) Attributes: approximate = "tanh" .. code-block:: text Inputs: X: shape=(2, 3), dtype=float32 [[-2. , -1. , -0.5], [ 0.5, 1. , 2. ]] Outputs: Y: shape=(2, 3), dtype=float32 [[-0.04540229, -0.158808 , -0.154286 ], [ 0.345714 , 0.841192 , 1.9545977 ]] **test_cc_gelu_tanh_float16** .. code-block:: text Node: Gelu(X) -> (Y) Attributes: approximate = "tanh" .. code-block:: text Inputs: X: shape=(2, 3), dtype=float16 [[-2. , -1. , -0.5], [ 0.5, 1. , 2. ]] Outputs: Y: shape=(2, 3), dtype=float16 [[-0.0454, -0.1588, -0.1543], [ 0.3457, 0.8413, 1.955 ]]