Module containing implementation of the swish activation function
This module implements Swish (also called SiLU), a smooth, non-monotonic activation function discovered by Google researchers.
Mathematical operation:
where is a parameter (typically , making it SiLU)
Derivative:
Properties: Smooth, self-gated, unbounded above, bounded below at 0 Often outperforms ReLU in deep networks Reference: Ramachandran et al. (2017), arXiv:1710.05941
Interface for setting up swish activation function
Initialise a swish activation function
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=real32), | intent(in), | optional | :: | scale |
Optional scale factor for activation output |
|
| real(kind=real32), | intent(in), | optional | :: | beta |
Optional beta parameter for swish function |
|
| type(onnx_attribute_type), | intent(in), | optional, | dimension(:) | :: | attributes |
Optional array of ONNX attributes |
Swish activation type
Type for swish activation function with overloaded procedures
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| logical, | public | :: | apply_scaling | = | .false. |
Boolean to apply scaling or not |
|
| real(kind=real32), | public | :: | beta | = | 1._real32 |
Beta parameter for swish function |
|
| character(len=10), | public | :: | name |
Name of the activation function |
|||
| real(kind=real32), | public | :: | scale | = | 1._real32 |
Scale of the activation function |
|
| real(kind=real32), | public | :: | threshold |
Threshold of the activation function |
Interface for setting up swish activation function
| private function initialise (scale, beta, attributes) | Initialise a swish activation function |
| procedure, public, pass(this) :: apply => apply_swish | |
| procedure, public, pass(this) :: apply_attributes => apply_attributes_swish | |
| procedure, public, pass(this) :: export_attributes => export_attributes_swish | |
| procedure, public, pass(this) :: print_to_unit => print_to_unit_actv | |
| procedure, public, pass(this) :: reset => reset_swish |
Create swish activation function from ONNX attributes
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(onnx_attribute_type), | intent(in), | dimension(:) | :: | attributes |
Array of ONNX attributes |
Instance of activation type
Apply swish activation to 1D array
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(swish_actv_type), | intent(in) | :: | this |
Swish activation type |
||
| type(array_type), | intent(in) | :: | val |
Input values |
Swish activation output
Export swish activation function attributes as ONNX attributes
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(swish_actv_type), | intent(in) | :: | this |
Swish activation type |
Array of ONNX attributes
Initialise a swish activation function
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=real32), | intent(in), | optional | :: | scale |
Optional scale factor for activation output |
|
| real(kind=real32), | intent(in), | optional | :: | beta |
Optional beta parameter for swish function |
|
| type(onnx_attribute_type), | intent(in), | optional, | dimension(:) | :: | attributes |
Optional array of ONNX attributes |
Swish activation type
Load ONNX attributes into swish activation function
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(swish_actv_type), | intent(inout) | :: | this |
Swish activation type |
||
| type(onnx_attribute_type), | intent(in), | dimension(:) | :: | attributes |
Array of ONNX attributes |
Reset swish activation function attributes and variables
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(swish_actv_type), | intent(inout) | :: | this |
Swish activation type |