39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
import tensorflow as tf
|
|
|
|
from onnx_tf.handlers.backend_handler import BackendHandler
|
|
from onnx_tf.handlers.handler import onnx_op
|
|
from .broadcast_mixin import BroadcastMixin
|
|
|
|
|
|
@onnx_op("PRelu")
|
|
class PRelu(BackendHandler):
|
|
|
|
@classmethod
|
|
def _common(cls, node, **kwargs):
|
|
"""
|
|
Reference implementation at
|
|
https://github.com/tflearn/tflearn/blob/4ba8c8d78bf1bbdfc595bf547bad30580cb4c20b/tflearn/activations.py#L191
|
|
"""
|
|
tensor_dict = kwargs["tensor_dict"]
|
|
x = tensor_dict[node.inputs[0]]
|
|
slope = BroadcastMixin.explicit_broadcast([x, tensor_dict[node.inputs[1]]])
|
|
pos = tf.nn.relu(x)
|
|
neg = slope * (x - abs(x)) * 0.5
|
|
return [pos + neg]
|
|
|
|
@classmethod
|
|
def version_1(cls, node, **kwargs):
|
|
return cls._common(node, **kwargs)
|
|
|
|
@classmethod
|
|
def version_6(cls, node, **kwargs):
|
|
return cls._common(node, **kwargs)
|
|
|
|
@classmethod
|
|
def version_7(cls, node, **kwargs):
|
|
return cls._common(node, **kwargs)
|
|
|
|
@classmethod
|
|
def version_9(cls, node, **kwargs):
|
|
return cls._common(node, **kwargs)
|