ó
ž÷Xc           @   s]   d  d l  Z  d d l m Z d d l m Z d a d Z d d  Z	 d d  Z
 d	   Z d S(
   i˙˙˙˙Ni   (   t   get_file(   t   backendsT   https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.jsonc         C   sź  | d k r t j   } n  | d d h k s3 t  | d k rý |  d d  d d d  d d  d d  f }  |  d d  d d d  d d  f c d 8<|  d d  d d d  d d  f c d 8<|  d d  d	 d d  d d  f c d
 8<nť |  d d  d d  d d  d d d  f }  |  d d  d d  d d  d f c d 8<|  d d  d d  d d  d f c d 8<|  d d  d d  d d  d	 f c d
 8<|  S(   sĚ   Preprocesses a tensor encoding a batch of images.

    # Arguments
        x: input Numpy tensor, 4D.
        data_format: data format of the image tensor.

    # Returns
        Preprocessed tensor.
    t   channels_lastt   channels_firstNi˙˙˙˙i    gjźtüY@i   g`ĺĐ"Ű1]@i   gěQ¸ë^@(   t   Nonet   Kt   image_data_formatt   AssertionError(   t   xt   data_format(    (    s@   /tmp/pip-build-isqEY4/keras/keras/applications/imagenet_utils.pyt   preprocess_input
   s    
1..11...i   c         C   s  t  |  j  d k s( |  j d d k rD t d t |  j    n  t d k r} t d t d d } t j	 t
 |   a n  g  } x |  D]~ } | j   | d d d	  } g  | D]' } t t t |   | | f ^ qľ } | j d
 d   d t  | j |  q W| S(   sĚ  Decodes the prediction of an ImageNet model.

    # Arguments
        preds: Numpy tensor encoding a batch of predictions.
        top: integer, how many top-guesses to return.

    # Returns
        A list of lists of top class prediction tuples
        `(class_name, class_description, score)`.
        One list of tuples per sample in batch input.

    # Raises
        ValueError: in case of invalid shape of the `pred` array
            (must be 2D).
    i   i   ič  sx   `decode_predictions` expects a batch of predictions (i.e. a 2D array of shape (samples, 1000)). Found array with shape: s   imagenet_class_index.jsont   cache_subdirt   modelsNi˙˙˙˙t   keyc         S   s   |  d S(   Ni   (    (   R   (    (    s@   /tmp/pip-build-isqEY4/keras/keras/applications/imagenet_utils.pyt   <lambda>H   s    t   reverse(   t   lent   shapet
   ValueErrort   strt   CLASS_INDEXR   R    t   CLASS_INDEX_PATHt   jsont   loadt   opent   argsortt   tuplet   sortt   Truet   append(   t   predst   topt   fpatht   resultst   predt   top_indicest   it   result(    (    s@   /tmp/pip-build-isqEY4/keras/keras/applications/imagenet_utils.pyt   decode_predictions)   s    (	4c         C   s?  | d k r d | | f } n | | d f } | rt |  d k	 rk |  | k rk t d t |  d   qk n  | }  nÇ| d k r_|  d k	 rVt |   d k r­ t d   n  |  d d k rÚ t d t |   d   n  |  d	 d k	 rú |  d	 | k  s|  d
 d k	 r\|  d
 | k  r\t d t |  d t |  d t |   d   q\q;d }  nÜ |  d k	 r5t |   d k rt d   n  |  d d k ršt d t |   d   n  |  d d k	 rŮ|  d | k  sů|  d	 d k	 r;|  d	 | k  r;t d t |  d t |  d t |   d   q;n d }  |  S(   s  Internal utility to compute/validate an ImageNet model's input shape.

    # Arguments
        input_shape: either None (will return the default network input shape),
            or a user-provided shape to be validated.
        default_size: default input width/height for the model.
        min_size: minimum input width/height accepted by the model.
        data_format: image data format to use.
        include_top: whether the model is expected to
            be linked to a classifier via a Flatten layer.

    # Returns
        An integer shape tuple (may include None entries).

    # Raises
        ValueError: in case of invalid argument values.
    R   i   s8   When setting`include_top=True`, `input_shape` should be t   .s0   `input_shape` must be a tuple of three integers.i    s1   The input must have 3 channels; got `input_shape=t   `i   i   s   Input size must be at least R   s   , got `input_shape=i˙˙˙˙N(   i   NN(   NNi   (   R   R   R   R   (   t   input_shapet   default_sizet   min_sizeR	   t   include_topt   default_shape(    (    s@   /tmp/pip-build-isqEY4/keras/keras/applications/imagenet_utils.pyt   _obtain_input_shapeM   sB    	  9	  9(   R   t   utils.data_utilsR    t    R   R   R   R   R   R
   R&   R.   (    (    (    s@   /tmp/pip-build-isqEY4/keras/keras/applications/imagenet_utils.pyt   <module>   s   $