ó
¾÷Xc           @@  sÞ  d  d l  m Z d  d l Z d  d l Z d d l m Z d d l m	 Z	 d d l m
 Z
 d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d d „ Z d d „ Z d d „ Z d d „ Z d d „ Z e Z Z e Z Z e Z  e Z! Z" e Z# Z$ e Z% e Z& e Z' d  d! „ Z( d" „  Z) d d# „ Z* d$ „  Z+ d S(%   i    (   t   absolute_importNi   (   t   backend(   t   serialize_keras_object(   t   deserialize_keras_objectt   Initializerc           B@  s2   e  Z d  Z d d „ Z d „  Z e d „  ƒ Z RS(   sF   Initializer base class: all initializers inherit from this class.
    c         C@  s
   t  ‚ d  S(   N(   t   NotImplementedError(   t   selft   shapet   dtype(    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyt   __call__   s    c         C@  s   i  S(   N(    (   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyt
   get_config   s    c         C@  s
   |  |   S(   N(    (   t   clst   config(    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyt   from_config   s    N(   t   __name__t
   __module__t   __doc__t   NoneR	   R
   t   classmethodR   (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR   	   s   	t   Zerosc           B@  s   e  Z d  Z d d „ Z RS(   s4   Initializer that generates tensors initialized to 0.c         C@  s   t  j d d | d | ƒS(   Ni    R   R   (   t   Kt   constant(   R   R   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR	      s    N(   R   R   R   R   R	   (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR      s   t   Onesc           B@  s   e  Z d  Z d d „ Z RS(   s4   Initializer that generates tensors initialized to 1.c         C@  s   t  j d d | d | ƒS(   Ni   R   R   (   R   R   (   R   R   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR	   "   s    N(   R   R   R   R   R	   (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR      s   t   Constantc           B@  s/   e  Z d  Z d d „ Z d d „ Z d „  Z RS(   s“   Initializer that generates tensors initialized to a constant value.

    # Arguments
        value: float; the value of the generator tensors.
    i    c         C@  s   | |  _  d  S(   N(   t   value(   R   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyt   __init__-   s    c         C@  s   t  j |  j d | d | ƒS(   NR   R   (   R   R   R   (   R   R   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR	   0   s    c         C@  s   i |  j  d 6S(   NR   (   R   (   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR
   3   s    N(   R   R   R   R   R   R	   R
   (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR   &   s   t   RandomNormalc           B@  s5   e  Z d  Z d d d d „ Z d d „ Z d „  Z RS(   sm  Initializer that generates tensors with a normal distribution.

    # Arguments
        mean: a python scalar or a scalar tensor. Mean of the random values
          to generate.
        stddev: a python scalar or a scalar tensor. Standard deviation of the
          random values to generate.
        seed: A Python integer. Used to seed the random generator.
    g        gš™™™™™©?c         C@  s   | |  _  | |  _ | |  _ d  S(   N(   t   meant   stddevt   seed(   R   R   R   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR   B   s    		c         C@  s(   t  j | |  j |  j d | d |  j ƒS(   NR   R   (   R   t   random_normalR   R   R   (   R   R   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR	   G   s    c         C@  s"   i |  j  d 6|  j d 6|  j d 6S(   NR   R   R   (   R   R   R   (   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR
   K   s    

N(   R   R   R   R   R   R	   R
   (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR   7   s   	t   RandomUniformc           B@  s5   e  Z d  Z d d d d „ Z d d „ Z d „  Z RS(   s¢  Initializer that generates tensors with a uniform distribution.

    # Arguments
        minval: A python scalar or a scalar tensor. Lower bound of the range
          of random values to generate.
        maxval: A python scalar or a scalar tensor. Upper bound of the range
          of random values to generate.  Defaults to 1 for float types.
        seed: A Python integer. Used to seed the random generator.
    gš™™™™™©¿gš™™™™™©?c         C@  s   | |  _  | |  _ | |  _ d  S(   N(   t   minvalt   maxvalR   (   R   R    R!   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR   ^   s    		c         C@  s(   t  j | |  j |  j d | d |  j ƒS(   NR   R   (   R   t   random_uniformR    R!   R   (   R   R   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR	   c   s    c         C@  s"   i |  j  d 6|  j d 6|  j d 6S(   NR    R!   R   (   R    R!   R   (   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR
   g   s    

N(   R   R   R   R   R   R	   R
   (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR   S   s   	t   TruncatedNormalc           B@  s5   e  Z d  Z d d d d „ Z d d „ Z d „  Z RS(   sl  Initializer that generates a truncated normal distribution.

    These values are similar to values from a `random_normal_initializer`
    except that values more than two standard deviations from the mean
    are discarded and re-drawn. This is the recommended initializer for
    neural network weights and filters.

    # Arguments
        mean: a python scalar or a scalar tensor. Mean of the random values
          to generate.
        stddev: a python scalar or a scalar tensor. Standard deviation of the
          random values to generate.
        seed: A Python integer. Used to seed the random generator.
    g        gš™™™™™©?c         C@  s   | |  _  | |  _ | |  _ d  S(   N(   R   R   R   (   R   R   R   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR      s    		c         C@  s(   t  j | |  j |  j d | d |  j ƒS(   NR   R   (   R   t   truncated_normalR   R   R   (   R   R   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR	   „   s    c         C@  s"   i |  j  d 6|  j d 6|  j d 6S(   NR   R   R   (   R   R   R   (   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR
   ˆ   s    

N(   R   R   R   R   R   R	   R
   (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR#   o   s   t   VarianceScalingc           B@  s8   e  Z d  Z d d d d d „ Z d d „ Z d „  Z RS(   sË  Initializer capable of adapting its scale to the shape of weights.

    With `distribution="normal"`, samples are drawn from a truncated normal
    distribution centered on zero, with `stddev = sqrt(scale / n)` where n is:
        - number of input units in the weight tensor, if mode = "fan_in"
        - number of output units, if mode = "fan_out"
        - average of the numbers of input and output units, if mode = "fan_avg"

    With `distribution="uniform"`,
    samples are drawn from a uniform distribution
    within [-limit, limit], with `limit = sqrt(3 * scale / n)`.

    # Arguments
        scale: Scaling factor (positive float).
        mode: One of "fan_in", "fan_out", "fan_avg".
        distribution: Random distribution to use. One of "normal", "uniform".
        seed: A Python integer. Used to seed the random generator.

    # Raises
        ValueError: In case of an invalid value for the "scale", mode" or
          "distribution" arguments.
    g      ð?t   fan_int   normalc         C@  s©   | d k r t  d | ƒ ‚ n  | j ƒ  } | d d d h k rQ t  d | ƒ ‚ n  | j ƒ  } | d d h k r t  d	 | ƒ ‚ n  | |  _ | |  _ | |  _ | |  _ d  S(
   Ng        s&   `scale` must be a positive float. Got:R&   t   fan_outt   fan_avgsP   Invalid `mode` argument: expected on of {"fan_in", "fan_out", "fan_avg"} but gotR'   t   uniformsN   Invalid `distribution` argument: expected one of {"normal", "uniform"} but got(   t
   ValueErrort   lowert   scalet   modet   distributionR   (   R   R-   R.   R/   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR   ¨   s    			c         C@  s   t  | ƒ \ } } |  j } |  j d k r@ | t d | ƒ :} nF |  j d k re | t d | ƒ :} n! | t d t | | ƒ d ƒ :} |  j d k rÆ t j | ƒ } t j	 | d | d | d |  j
 ƒSt j d	 | ƒ } t j | | | d | d |  j
 ƒSd  S(
   NR&   g      ð?R(   i   R'   g        R   R   g      @(   t   _compute_fansR-   R.   t   maxt   floatR/   t   npt   sqrtR   R$   R   R"   (   R   R   R   R&   R(   R-   R   t   limit(    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR	   ½   s    	!c         C@  s,   i |  j  d 6|  j d 6|  j d 6|  j d 6S(   NR-   R.   R/   R   (   R-   R.   R/   R   (   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR
   Ï   s
    


N(   R   R   R   R   R   R	   R
   (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR%      s   t
   Orthogonalc           B@  s2   e  Z d  Z d d d „ Z d d „ Z d „  Z RS(   s  Initializer that generates a random orthogonal matrix.

    # Arguments
        gain: Multiplicative factor to apply to the orthogonal matrix.
        seed: A Python integer. Used to seed the random generator.

    # References
        Saxe et al., http://arxiv.org/abs/1312.6120
    g      ð?c         C@  s   | |  _  | |  _ d  S(   N(   t   gainR   (   R   R7   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR   ã   s    	c         C@  sì   d } x | d  D] } | | 9} q W| d } | | f } |  j  d  k	 r` t j j  |  j  ƒ n  t j j d d | ƒ } t j j | d t ƒ\ } }	 }
 | j | k r® | n |
 } | j	 | ƒ } |  j
 | d  | d … d  | d … f S(   Ni   iÿÿÿÿg        g      ð?t   full_matricesi    (   R   R   R3   t   randomR'   t   linalgt   svdt   FalseR   t   reshapeR7   (   R   R   R   t   num_rowst   dimt   num_colst
   flat_shapet   at   ut   _t   vt   q(    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR	   ç   s    
!c         C@  s   i |  j  d 6|  j d 6S(   NR7   R   (   R7   R   (   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR
   ö   s    
N(   R   R   R   R   R   R	   R
   (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR6   Ø   s   	t   Identityc           B@  s/   e  Z d  Z d d „ Z d d „ Z d „  Z RS(   s°   Initializer that generates the identity matrix.

    Only use for square 2D matrices.

    # Arguments
        gain: Multiplicative factor to apply to the identity matrix.
    g      ð?c         C@  s   | |  _  d  S(   N(   R7   (   R   R7   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR     s    c         C@  sQ   t  | ƒ d k s& | d | d k r5 t d ƒ ‚ n |  j t j | d ƒ Sd  S(   Ni   i    i   sD   Identity matrix initializer can only be used for 2D square matrices.(   t   lenR+   R7   R3   t   identity(   R   R   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR	   	  s    &c         C@  s   i |  j  d 6S(   NR7   (   R7   (   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR
     s    N(   R   R   R   R   R   R	   R
   (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyRG   ý   s   c      	   C@  s   t  d d d d d d d |  ƒ S(   sÅ  LeCun uniform initializer.

    It draws samples from a uniform distribution within [-limit, limit]
    where `limit` is `sqrt(3 / fan_in)`
    where `fan_in` is the number of input units in the weight tensor.

    # Arguments
        seed: A Python integer. Used to seed the random generator.

    # Returns
        An initializer.

    # References
        LeCun 98, Efficient Backprop,
        http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf
    R-   g      ð?R.   R&   R/   R*   R   (   R%   (   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyt   lecun_uniform  s    c      	   C@  s   t  d d d d d d d |  ƒ S(   sD  Glorot normal initializer, also called Xavier normal initializer.

    It draws samples from a truncated normal distribution centered on 0
    with `stddev = sqrt(2 / (fan_in + fan_out))`
    where `fan_in` is the number of input units in the weight tensor
    and `fan_out` is the number of output units in the weight tensor.

    # Arguments
        seed: A Python integer. Used to seed the random generator.

    # Returns
        An initializer.

    # References
        Glorot & Bengio, AISTATS 2010
        http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
    R-   g      ð?R.   R)   R/   R'   R   (   R%   (   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyt   glorot_normal-  s    c      	   C@  s   t  d d d d d d d |  ƒ S(   sI  Glorot uniform initializer, also called Xavier uniform initializer.

    It draws samples from a uniform distribution within [-limit, limit]
    where `limit` is `sqrt(6 / (fan_in + fan_out))`
    where `fan_in` is the number of input units in the weight tensor
    and `fan_out` is the number of output units in the weight tensor.

    # Arguments
        seed: A Python integer. Used to seed the random generator.

    # Returns
        An initializer.

    # References
        Glorot & Bengio, AISTATS 2010
        http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
    R-   g      ð?R.   R)   R/   R*   R   (   R%   (   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyt   glorot_uniformE  s    c      	   C@  s   t  d d d d d d d |  ƒ S(   s  He normal initializer.

    It draws samples from a truncated normal distribution centered on 0
    with `stddev = sqrt(2 / fan_in)`
    where `fan_in` is the number of input units in the weight tensor.

    # Arguments
        seed: A Python integer. Used to seed the random generator.

    # Returns
        An initializer.

    # References
        He et al., http://arxiv.org/abs/1502.01852
    R-   g       @R.   R&   R/   R'   R   (   R%   (   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyt	   he_normal]  s    c      	   C@  s   t  d d d d d d d |  ƒ S(   s¤  He uniform variance scaling initializer.

    It draws samples from a uniform distribution within [-limit, limit]
    where `limit` is `sqrt(6 / fan_in)`
    where `fan_in` is the number of input units in the weight tensor.

    # Arguments
        seed: A Python integer. Used to seed the random generator.

    # Returns
        An initializer.

    # References
        He et al., http://arxiv.org/abs/1502.01852
    R-   g       @R.   R&   R/   R*   R   (   R%   (   R   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyt
   he_uniforms  s    t   channels_lastc         C@  s  t  |  ƒ d k r) |  d } |  d } nÚ t  |  ƒ d d d h k rÓ | d k r‚ t j |  d ƒ } |  d | } |  d | } q| d k rÀ t j |  d  ƒ } |  d	 | } |  d
 | } qt d | ƒ ‚ n0 t j t j |  ƒ ƒ } t j t j |  ƒ ƒ } | | f S(   só  Computes the number of input and output units for a weight shape.

    # Arguments
        shape: Integer shape tuple.
        data_format: Image data format to use for convolution kernels.
            Note that all kernels in Keras are standardized on the
            `channels_last` ordering (even when inputs are set
            to `channels_first`).

    # Returns
        A tuple of scalars, `(fan_in, fan_out)`.

    # Raises
        ValueError: in case of invalid `data_format` argument.
    i   i    i   i   i   i   t   channels_firstRO   iþÿÿÿiÿÿÿÿs   Invalid data_format: (   RH   R3   t   prodR+   R4   (   R   t   data_formatR&   R(   t   receptive_field_size(    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyR0   —  s     
c         C@  s
   t  |  ƒ S(   N(   R   (   t   initializer(    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyt	   serialize¿  s    c         C@  s   t  |  d t ƒ  d | d d ƒS(   Nt   module_objectst   custom_objectst   printable_module_nameRT   (   R   t   globals(   R   RW   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyt   deserializeÃ  s    		c         C@  sr   t  |  t ƒ r t |  ƒ St  |  t j ƒ rO i t |  ƒ d 6i  d 6} t | ƒ St |  ƒ r_ |  St d |  ƒ ‚ d  S(   Nt
   class_nameR   s+   Could not interpret initializer identifier:(   t
   isinstancet   dictRZ   t   sixt   string_typest   strt   callableR+   (   t
   identifierR   (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyt   getÊ  s    

(,   t
   __future__R    t   numpyR3   R^   t    R   R   t   utils.generic_utilsR   R   t   objectR   R   R   R   R   R   R#   R%   R6   RG   R   RJ   RK   RL   RM   RN   t   zerot   zerost   onet   onesR   R*   R"   R'   R   R$   RI   t
   orthogonalR0   RU   RZ   Rc   (    (    (    s1   /tmp/pip-build-isqEY4/keras/keras/initializers.pyt   <module>   s@   !H%



(	