U
    ½mœdº  ã                   @   s²   d Z ddlZddlmZ ddlmZ dd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zee	ee
edœZdd„ Zdd„ Zdd„ Zdd„ ZeeeedœZdd„ Zdd„ Zdd„ ZeeedœZdS ) z)Utilities for the neural network modules
é    N)Úexpit)Úxlogyc                 C   s   dS )zûSimply leave the input array unchanged.

    Parameters
    ----------
    X : {array-like, sparse matrix}, shape (n_samples, n_features)
        Data, where `n_samples` is the number of samples
        and `n_features` is the number of features.
    N© ©ÚXr   r   úU/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/neural_network/_base.pyÚinplace_identity   s    r   c                 C   s   t | | d� dS )z¥Compute the logistic function inplace.

    Parameters
    ----------
    X : {array-like, sparse matrix}, shape (n_samples, n_features)
        The input data.
    ©ÚoutN)Úlogistic_sigmoidr   r   r   r   Úinplace_logistic   s    r   c                 C   s   t j| | d� dS )z«Compute the hyperbolic tan function inplace.

    Parameters
    ----------
    X : {array-like, sparse matrix}, shape (n_samples, n_features)
        The input data.
    r	   N)ÚnpÚtanhr   r   r   r   Úinplace_tanh$   s    r   c                 C   s   t j| d| d� dS )z²Compute the rectified linear unit function inplace.

    Parameters
    ----------
    X : {array-like, sparse matrix}, shape (n_samples, n_features)
        The input data.
    r   r	   N)r   Úmaximumr   r   r   r   Úinplace_relu/   s    r   c                 C   sN   | | j dd�dd…tjf  }tj|| d� | | jdd�dd…tjf  } dS )zªCompute the K-way softmax function inplace.

    Parameters
    ----------
    X : {array-like, sparse matrix}, shape (n_samples, n_features)
        The input data.
    é   ©ZaxisNr	   )Úmaxr   ZnewaxisÚexpÚsum)r   Útmpr   r   r   Úinplace_softmax:   s    r   )Úidentityr   ÚlogisticÚreluZsoftmaxc                 C   s   dS )a„  Apply the derivative of the identity function: do nothing.

    Parameters
    ----------
    Z : {array-like, sparse matrix}, shape (n_samples, n_features)
        The data which was output from the identity activation function during
        the forward pass.

    delta : {array-like}, shape (n_samples, n_features)
         The backpropagated error signal to be modified inplace.
    Nr   ©ÚZÚdeltar   r   r   Úinplace_identity_derivativeP   s    r   c                 C   s   || 9 }|d|  9 }dS )aó  Apply the derivative of the logistic sigmoid function.

    It exploits the fact that the derivative is a simple function of the output
    value from logistic function.

    Parameters
    ----------
    Z : {array-like, sparse matrix}, shape (n_samples, n_features)
        The data which was output from the logistic activation function during
        the forward pass.

    delta : {array-like}, shape (n_samples, n_features)
         The backpropagated error signal to be modified inplace.
    r   Nr   r   r   r   r   Úinplace_logistic_derivative_   s    r    c                 C   s   |d| d  9 }dS )aý  Apply the derivative of the hyperbolic tanh function.

    It exploits the fact that the derivative is a simple function of the output
    value from hyperbolic tangent.

    Parameters
    ----------
    Z : {array-like, sparse matrix}, shape (n_samples, n_features)
        The data which was output from the hyperbolic tangent activation
        function during the forward pass.

    delta : {array-like}, shape (n_samples, n_features)
         The backpropagated error signal to be modified inplace.
    r   é   Nr   r   r   r   r   Úinplace_tanh_derivativer   s    r"   c                 C   s   d|| dk< dS )a  Apply the derivative of the relu function.

    It exploits the fact that the derivative is a simple function of the output
    value from rectified linear units activation function.

    Parameters
    ----------
    Z : {array-like, sparse matrix}, shape (n_samples, n_features)
        The data which was output from the rectified linear units activation
        function during the forward pass.

    delta : {array-like}, shape (n_samples, n_features)
         The backpropagated error signal to be modified inplace.
    r   Nr   r   r   r   r   Úinplace_relu_derivative„   s    r#   )r   r   r   r   c                 C   s   | | d   ¡ d S )a„  Compute the squared loss for regression.

    Parameters
    ----------
    y_true : array-like or label indicator matrix
        Ground truth (correct) values.

    y_pred : array-like or label indicator matrix
        Predicted values, as returned by a regression estimator.

    Returns
    -------
    loss : float
        The degree to which the samples are correctly predicted.
    r!   )Zmean)Úy_trueZy_predr   r   r   Úsquared_lossž   s    r%   c                 C   s~   t  |j¡j}t  ||d| ¡}|jd dkrBt jd| |dd�}| jd dkrdt jd|  | dd�} t| |ƒ ¡  |jd  S )a°  Compute Logistic loss for classification.

    Parameters
    ----------
    y_true : array-like or label indicator matrix
        Ground truth (correct) labels.

    y_prob : array-like of float, shape = (n_samples, n_classes)
        Predicted probabilities, as returned by a classifier's
        predict_proba method.

    Returns
    -------
    loss : float
        The degree to which the samples are correctly predicted.
    r   r   r   )	r   ÚfinfoÚdtypeÚepsÚclipÚshapeÚappendr   r   ©r$   Zy_probr(   r   r   r   Úlog_loss±   s    r-   c                 C   sP   t  |j¡j}t  ||d| ¡}t| |ƒ ¡ td|  d| ƒ ¡   |jd  S )a!  Compute binary logistic loss for classification.

    This is identical to log_loss in binary classification case,
    but is kept for its use in multilabel case.

    Parameters
    ----------
    y_true : array-like or label indicator matrix
        Ground truth (correct) labels.

    y_prob : array-like of float, shape = (n_samples, 1)
        Predicted probabilities, as returned by a classifier's
        predict_proba method.

    Returns
    -------
    loss : float
        The degree to which the samples are correctly predicted.
    r   r   )r   r&   r'   r(   r)   r   r   r*   r,   r   r   r   Úbinary_log_lossÍ   s    $ÿÿr.   )Zsquared_errorr-   r.   )Ú__doc__Únumpyr   Zscipy.specialr   r   r   r   r   r   r   r   ZACTIVATIONSr   r    r"   r#   ZDERIVATIVESr%   r-   r.   ZLOSS_FUNCTIONSr   r   r   r   Ú<module>   s<   û	üý