
    0hX                         d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ dd	lmZ  ed
       G d de             Zy)z2Parametric Rectified Linear Unit activation layer.    )backend)constraints)initializers)regularizers)Layer)	InputSpec)tf_utils)keras_exportzkeras.layers.PReLUc                        e Zd ZdZ	 	 	 	 d fd	Zej                   fd       Zd Z fdZ	ej                  d        Z
 xZS )PReLUa,  Parametric Rectified Linear Unit.

    It follows:

    ```
        f(x) = alpha * x for x < 0
        f(x) = x for x >= 0
    ```

    where `alpha` is a learned array with the same shape as x.

    Input shape:
        Arbitrary. Use the keyword argument `input_shape`
        (tuple of integers, does not include the samples axis)
        when using this layer as the first layer in a model.

    Output shape:
        Same shape as the input.

    Args:
        alpha_initializer: Initializer function for the weights.
        alpha_regularizer: Regularizer for the weights.
        alpha_constraint: Constraint for the weights.
        shared_axes: The axes along which to share learnable
            parameters for the activation function.
            For example, if the incoming feature maps
            are from a 2D convolution
            with output shape `(batch, height, width, channels)`,
            and you wish to share parameters across space
            so that each filter only has one set of parameters,
            set `shared_axes=[1, 2]`.
    c                 @   t        |   di | d| _        t        j                  |      | _        t        j                  |      | _        t        j                  |      | _	        |d | _
        y t        |t        t        f      s	|g| _
        y t        |      | _
        y )NT )super__init__supports_maskingr   getalpha_initializerr   alpha_regularizerr   alpha_constraintshared_axes
isinstancelisttuple)selfr   r   r   r   kwargs	__class__s         ^/var/www/html/engine/venv/lib/python3.12/site-packages/tf_keras/src/layers/activation/prelu.pyr   zPReLU.__init__A   s     	"6" $!-!1!12C!D!-!1!12C!D +0@ A#DK$7 +}D#K0D    c                    t        |dd        }| j                  | j                  D ]
  }d||dz
  <    | j                  |d| j                  | j                  | j
                        | _        i }| j                  r1t        dt        |            D ]  }|| j                  vs||   ||<    t        t        |      |      | _
        t        | 1  |       y )N   alpha)shapenameinitializerregularizer
constraint)ndimaxes)r   r   
add_weightr   r   r   r!   rangelenr   
input_specr   build)r   input_shapeparam_shapeir(   r   s        r   r-   zPReLU.buildU   s    ;qr?+'%% '%&AE"'__....,, % 

 1c+./ -D,,,)!nDG- $[)9Ek"r   c                 ~    t        j                  |      }| j                   t        j                  |       z  }||z   S N)r   relur!   )r   inputsposnegs       r   callz
PReLU.callk   s5    ll6"zzkGLL&11Syr   c                 h   t        j                  | j                        t        j                  | j                        t        j                  | j                        | j                  d}t        | %         }t        t        |j                               t        |j                               z         S )N)r   r   r   r   )r   	serializer   r   r   r   r   r   r   
get_configdictr   items)r   configbase_configr   s      r   r:   zPReLU.get_configp   s    !-!7!78N8N!O!-!7!78N8N!O + 5 5d6K6K L++	
 g(*D**,-V\\^0DDEEr   c                     |S r2   r   )r   r.   s     r   compute_output_shapezPReLU.compute_output_shapez   s    r   )zerosNNN)__name__
__module____qualname____doc__r   r	   shape_type_conversionr-   r7   r:   r@   __classcell__)r   s   @r   r   r      s[    F "1( ### $#*
F ## $r   r   N)rE   tf_keras.srcr   r   r   r   tf_keras.src.engine.base_layerr   tf_keras.src.engine.input_specr   tf_keras.src.utilsr	    tensorflow.python.util.tf_exportr
   r   r   r   r   <module>rM      sJ    9 ! $ % % 0 4 ' : "#]E ] $]r   