Continuously Differentiable Exponential Linear Unit activation function.
Applies element-wise:
CELU differs from ELU in that it is continuously differentiable everywhere, including at zero, by ensuring the left and right derivatives match at . Both branches coincide with an exponential scaled by , and the output transitions smoothly from the negative saturating region to the linear positive branch.
Parameters
alphafloat= 1.0Scale controlling the slope of the negative branch
and the value to which it saturates. Default:
1.0.inplacebool= FalseAccepted for API compatibility; currently unused. Default:
False.Notes
- Input: — any shape.
- Output: — same shape as input.
Examples
>>> import lucid
>>> import lucid.nn as nn
>>> m = nn.CELU(alpha=1.0)
>>> x = lucid.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
>>> m(x)
tensor([-0.8647, -0.6321, 0. , 1. , 2. ])
>>> # Smoother negative branch than ELU for gradient-sensitive architectures
>>> m = nn.CELU(alpha=0.5)
>>> x = lucid.randn(4, 128)
>>> out = m(x)
>>> out.shape
(4, 128)