.. _op_ai_onnx_LogSoftmax: LogSoftmax ========== - **Domain**: ``ai.onnx`` - **Since version**: 13 The operator computes the log of softmax values for the given input: .. code-block:: text LogSoftmax(input, axis) = Log(Softmax(input, axis=axis)) The "axis" attribute indicates the dimension along which LogSoftmax will be performed. The output tensor has the same shape as the input tensor. **Inputs** - **input** (*T*): The input tensor of rank >= axis. **Outputs** - **output** (*T*): The output values with the same shape as the input tensor. **Attributes** - **axis** (*int*): Describes the dimension Softmax will be performed on. Negative value means counting dimensions from the back. **Type Constraints** - **T**: Constrain input and output types to float tensors. Allowed types: tensor(bfloat16), tensor(double), tensor(float), tensor(float16). Examples -------- **test_cc_logsoftmax_axis_0** .. code-block:: text Node: LogSoftmax(input) -> (output) Attributes: axis = 0 .. code-block:: text Inputs: input: shape=(2, 3), dtype=float32 [[ 1., 2., 3.], [ 4., 1., -1.]] Outputs: output: shape=(2, 3), dtype=float32 [[-3.0485873 , -0.31326175, -0.01814985], [-0.04858732, -1.3132617 , -4.01815 ]] **test_cc_logsoftmax_axis_1** .. code-block:: text Node: LogSoftmax(input) -> (output) Attributes: axis = 1 .. code-block:: text Inputs: input: shape=(2, 3), dtype=float32 [[ 1., 2., 3.], [ 4., 1., -1.]] Outputs: output: shape=(2, 3), dtype=float32 [[-2.407606 , -1.4076059 , -0.4076059 ], [-0.05498505, -3.054985 , -5.054985 ]] **test_cc_logsoftmax_axis_2** .. code-block:: text Node: LogSoftmax(input) -> (output) Attributes: axis = 2 .. code-block:: text Inputs: input: shape=(2, 2, 3), dtype=float32 [[[ 1. , 2. , 3. ], [ 4. , 1. , -1. ]], [[ 0.5, -0.5, 2. ], [-2. , 1.5, 0. ]]] Outputs: output: shape=(2, 2, 3), dtype=float32 [[[-2.407606 , -1.4076059 , -0.4076059 ], [-0.05498505, -3.054985 , -5.054985 ]], [[-1.7663679 , -2.766368 , -0.2663679 ], [-3.725802 , -0.22580206, -1.7258021 ]]] **test_cc_logsoftmax_default_axis** .. code-block:: text Node: LogSoftmax(input) -> (output) .. code-block:: text Inputs: input: shape=(2, 3), dtype=float32 [[ 1., 2., 3.], [ 4., 1., -1.]] Outputs: output: shape=(2, 3), dtype=float32 [[-2.407606 , -1.4076059 , -0.4076059 ], [-0.05498505, -3.054985 , -5.054985 ]] **test_cc_logsoftmax_example_1** .. code-block:: text Node: LogSoftmax(input) -> (output) Attributes: axis = 1 .. code-block:: text Inputs: input: shape=(2, 3), dtype=float32 [[1., 2., 3.], [1., 2., 3.]] Outputs: output: shape=(2, 3), dtype=float32 [[-2.407606 , -1.4076059, -0.4076059], [-2.407606 , -1.4076059, -0.4076059]] **test_cc_logsoftmax_large_number** .. code-block:: text Node: LogSoftmax(input) -> (output) .. code-block:: text Inputs: input: shape=(2, 3), dtype=float32 [[1000., 1001., 1002.], [1002., 1001., 1000.]] Outputs: output: shape=(2, 3), dtype=float32 [[-2.4075928 , -1.4075928 , -0.40759277], [-0.40759277, -1.4075928 , -2.4075928 ]] **test_cc_logsoftmax_negative_axis** .. code-block:: text Node: LogSoftmax(input) -> (output) Attributes: axis = -1 .. code-block:: text Inputs: input: shape=(2, 3), dtype=float32 [[ 1., 2., 3.], [ 4., 1., -1.]] Outputs: output: shape=(2, 3), dtype=float32 [[-2.407606 , -1.4076059 , -0.4076059 ], [-0.05498505, -3.054985 , -5.054985 ]] Differences with previous version (11) -------------------------------------- **SchemaDiff**: ``LogSoftmax`` (domain ``'ai.onnx'``) * old version: 11 * new version: 13 * breaking: **yes** **Breaking reasons:** * attribute 'axis' (changed): default value changed 1 -> -1 **Attributes:** * [BREAKING] changed 'axis': default value changed 1 -> -1 **Type constraints:** * changed 'T': added types: ['tensor(bfloat16)'] **Documentation:** * line similarity: 0.18 (+6/-3 lines) .. code-block:: diff --- LogSoftmax v11 +++ LogSoftmax v13 @@ -1,4 +1,7 @@ -The operator computes the logsoftmax (log of softmax) values for the given input. -The "axis" attribute indicates the dimension along which LogSoftmax is -performed. The output tensor has the same shape as the input tensor. +The operator computes the log of softmax values for the given input: + + LogSoftmax(input, axis) = Log(Softmax(input, axis=axis)) + +The "axis" attribute indicates the dimension along which LogSoftmax +will be performed. The output tensor has the same shape as the input tensor. Version History --------------- - :doc:`Version 11 ` - :doc:`Version 1 `