ó
¾÷Xc           @@  s|   d  d l  m Z d d l m Z d d l m Z d  d l Z d d l	 m
 Z
 d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d S(   i    (   t   absolute_importi   (   t   Layer(   t   backendN(   t
   interfacest   GaussianNoisec           B@  s5   e  Z d  Z e j d „  ƒ Z d d „ Z d „  Z RS(   s“  Apply additive zero-centered Gaussian noise.

    This is useful to mitigate overfitting
    (you could see it as a form of random data augmentation).
    Gaussian Noise (GS) is a natural choice as corruption process
    for real valued inputs.

    As it is a regularization layer, it is only active at training time.

    # Arguments
        stddev: float, standard deviation of the noise distribution.

    # 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 input.
    c         K@  s,   t  t |  ƒ j |   t |  _ | |  _ d  S(   N(   t   superR   t   __init__t   Truet   supports_maskingt   stddev(   t   selfR	   t   kwargs(    (    s1   /tmp/pip-build-isqEY4/keras/keras/layers/noise.pyR       s    	c         @  s(   ‡  ‡ f d †  } t  j | ˆ  d | ƒS(   Nc           @  s,   ˆ  t  j d t  j ˆ  ƒ d d d ˆ j ƒ S(   Nt   shapet   meang        R	   (   t   Kt   random_normalR   R	   (    (   t   inputsR
   (    s1   /tmp/pip-build-isqEY4/keras/keras/layers/noise.pyt   noised'   s    t   training(   R   t   in_train_phase(   R
   R   R   R   (    (   R   R
   s1   /tmp/pip-build-isqEY4/keras/keras/layers/noise.pyt   call&   s    c         C@  sK   i |  j  d 6} t t |  ƒ j ƒ  } t t | j ƒ  ƒ t | j ƒ  ƒ ƒ S(   NR	   (   R	   R   R   t
   get_configt   dictt   listt   items(   R
   t   configt   base_config(    (    s1   /tmp/pip-build-isqEY4/keras/keras/layers/noise.pyR   -   s    N(	   t   __name__t
   __module__t   __doc__R   t   legacy_gaussiannoise_supportR   t   NoneR   R   (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/layers/noise.pyR   
   s   t   GaussianDropoutc           B@  s5   e  Z d  Z e j d „  ƒ Z d d „ Z d „  Z RS(   së  Apply multiplicative 1-centered Gaussian noise.

    As it is a regularization layer, it is only active at training time.

    # Arguments
        rate: float, drop probability (as with `Dropout`).
            The multiplicative noise will have
            standard deviation `sqrt(rate / (1 - rate))`.

    # 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 input.

    # References
        - [Dropout: A Simple Way to Prevent Neural Networks from Overfitting Srivastava, Hinton, et al. 2014](http://www.cs.toronto.edu/~rsalakhu/papers/srivastava14a.pdf)
    c         K@  s,   t  t |  ƒ j |   t |  _ | |  _ d  S(   N(   R   R    R   R   R   t   rate(   R
   R!   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/layers/noise.pyR   I   s    	c         @  sK   d ˆ j  k  o d k  n rG ‡  ‡ f d †  } t j | ˆ  d | ƒSˆ  S(   Ni    i   c          @  sF   t  j ˆ j d ˆ j ƒ }  ˆ  t j d t j ˆ  ƒ d d d |  ƒ S(   Ng      ð?R   R   R	   (   t   npt   sqrtR!   R   R   R   (   R	   (   R   R
   (    s1   /tmp/pip-build-isqEY4/keras/keras/layers/noise.pyR   Q   s    R   (   R!   R   R   (   R
   R   R   R   (    (   R   R
   s1   /tmp/pip-build-isqEY4/keras/keras/layers/noise.pyR   O   s    c         C@  sK   i |  j  d 6} t t |  ƒ j ƒ  } t t | j ƒ  ƒ t | j ƒ  ƒ ƒ S(   NR!   (   R!   R   R    R   R   R   R   (   R
   R   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/layers/noise.pyR   Y   s    N(	   R   R   R   R   t   legacy_gaussiandropout_supportR   R   R   R   (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/layers/noise.pyR    3   s   
(   t
   __future__R    t   engineR   t    R   R   t   numpyR"   t   legacyR   R   R    (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/layers/noise.pyt   <module>   s   )