m
Ҳ}Ec           @   s   d  k  Z  d  k Z d  k Z d k Td k Td Z d   Z d   Z d e f d     YZ	 d e	 f d     YZ
 d	 e	 f d
     YZ d e f d     YZ d d  Z d  S(   N(   t   *s   1.154c         C   s[  | d j o
 | } n | d  j o d t |   f } n t |  t j o_ d | j  o t |   j n o; | } t t i	 t
 t |    |   } | | f } n; t |  t j o' t |  d j o d | d f } n t |  t j o t |  d j p t d |  | \ } } | | t |   j p t d t |   | f  | S(   Ni    i   i   s   invalid shape: %ss%   can't display %d values with shape %s(   t   shapet   defaultt   Nonet   lent   valuest   typet   intt   colst   matht   ceilt   floatt   rowst   tuplet   AssertionError(   R   R   R   R   R   (    (    t]   /home/jmarshall/public_html/courses/2006/fall/computation-and-cognition/pub/week14/newConx.pyt   validateShape   s     
7%&41c         C   sI   |  d j o
 | }  n t |   t j o |  d j p t d |   |  S(   Ni    s   invalid scale: %s(   t   scaleR   R   R   R   (   R   R   (    (    R   t   validateScale    s     
.t   PGMc           B   sP   t  Z d  d  d d d d  d  Z d   Z d   Z d   Z d   Z d	   Z RS(
   Nt    i    i
   c      
   C   s,  | d  j o | d  j	 o t |  t j o t |  d j p
 t d  x6 | D]. } d | j o
 d j n p
 t d  qQ Wt | | d   } | \ |  _ |  _ | |  _ g  } | D] } | t d |  q ~ |  _ d |  _ n| d  j	 oy| d  j ol| d j p
 t d  t |  } | i   i   } | d j o t d  n t i i |  } g  } | i   i   D] } | t |  q}~ \ |  _ |  _ t | i   i    |  _ g  } | i   D] } | t |  q~ |  _ x< |  i D]1 } d | j o |  i j n p
 t d	  qWg  } |  i D] } | t |  |  i q=~ |  _ | i    n
 t! d
  | d  j	 o\ t |  t j o |  i d j p
 t d  d | j o |  i j  n p
 t d  n t# | d   } t% i& |  | |  i | |  i |  | |  _ g  |  _' x t( t |  i   D] } | |  i | }
 | |  i | } t d |  i |  } d | } }	 |  i d j o
 d }	 n |  i/ |
 | |
 | | | d |	 d | } |  i' i1 |  q>W| d  j	 o6 | | d }
 |  i/ |
 d |
 | d | d d n d  S(   Ni    s   a list of values is requiredi   s!   image values must be in range 0-1id   s   shape is determined by PGM filet   P5s   file is not a raw PGM files   incorrect PGM file formats/   must specify file=<filename> or values=<vector>s.   cannot highlight images with more than one rows   highlight out of ranges   gray%dt   blackt   outlinet   fillt   red(2   t   fileR   R   R   t   listR   R   t   vR   R   t   selfR   R   t
   normalizedt   _[1]R   t   rawt   maxvalt   opent   ft   readlinet   stript   pgmTypet   IOErrort   ost   patht   basenamet   titlet   splitt   readt   ordR   t   closet   AttributeErrort	   highlightR   R   t   GraphWint   __init__t
   rectanglest   xranget   it   xt   yt	   grayLevelt   fColort   oColort   create_rectanglet   rt   append(   R   R   R   R+   R   R   R1   R:   R&   R;   R7   R9   R#   R6   R   R=   R   R8   (    (    R   R3   '   s\    0 ,	.?0
 /4	-/$		  
,c      	   C   s  d |  i } | d |  i |  i f 7} | d |  i 7} d d d |  i d } | | 7} d } x t |  i  D] } | d	 7} xy t |  i  D]h } | |  i | } | t |  i  j o | d
 7} q | d | t |  i | t |  d  7} q W| d } qq W| | 7} | S(   Ns   
title:  %s
s   size:   %d rows, %d cols
s   maxval: %d
s   +%s+
t   -i   i   s
    .,:+*O8@@s   | s     s   %s s   |
(   R   R+   t   sR   R   R!   t   bordert   paletteR5   R=   t   cR6   R   R   R   (   R   RB   R6   RC   R@   R=   RA   (    (    R   t   __str__U   s$    
 
 1
c         C   s    |  i   i |  | |  _ d  S(   N(   R   t   winfo_toplevelR+   (   R   R+   (    (    R   t   setTitleh   s    c         C   s  t  |  t  |  i  j p
 t d  x t t  |   D] } d | | j o
 d j n p
 t d  t d | |  } d | } } |  i d j o
 d } n |  i |  i | d | d	 | q9 W|  i   | |  _ g  } |  i D] } | t d |  q ~ |  _ d |  _ d  S(
   Ns   wrong number of valuesi    i   s!   image values must be in range 0-1id   s   gray%dR   R   R   (   R   t	   newValuesR   R4   R   R5   R6   R   R9   R:   R;   R   t   itemconfiguret   update_idletasksR   R   R   R    R!   (   R   RG   R:   R;   R6   R   R   R9   (    (    R   t   updateImagel   s    & , 
$
	1c         C   s   g  } |  i D] } | |  i | q ~ |  _ g  } |  i D] } | t |  |  i q< ~ |  _ x| t t |  i   D]e } t
 d |  i |  } d | } } |  i d j o
 d } n |  i |  i | d | d | qx W|  i   d  S(   Nid   s   gray%di   R   R   R   (   R   R   R    R   R!   R   R   R5   R   R6   R   R9   R:   R;   R   RH   R4   RI   (   R   R:   R;   R6   R   R   R9   (    (    R   t   inverty   s    .4  
$c         C   s   t  | d d } | i d  | i d |  i |  i f  | i d |  i  g  } t	 |  i
  |  i |  i j  o( d g |  i |  i t	 |  i
  } n | i d t i g  } |  i
 | D] } | t |  q ~ d   | i   d  S(	   Nt   modet   ws   P5
s   %d %d
s   %d
i    s   %sR   (   R"   t   pathnameR#   t   writeR   R   R   R!   t   paddingR   R    t   stringt   joinR   R   t   chrR/   (   R   RN   R   R#   RP   R   (    (    R   t	   saveImage   s     (E(	   t   __name__t
   __module__R   R3   RD   RF   RJ   RK   RT   (    (    (    R   R   %   s   .				
t   WeightDisplayc           B   s   t  Z d   Z d   Z RS(   Nc      
   C   s  | |  _  | |  _ | |  _ g  } |  i  i D] } | | | q, ~ }	 | oH t d j o | i	 i | } n | i	 i
 | } | g |	 }	 d } n d  } t d t t |	   t t |	    } g  } |	 D] }
 | |
 | d | q ~ } t i |  d | d | d | d | d  S(	   Ns   1.233i    f1.0i   R   R   R   R1   (   t
   connectionR   R6   t   showBiasR   t   weightt   rowt   weightst   conx_versiont   toLayert   biasR1   R   t   maxt   abst   mint   maxMagnitudeRM   t   scaledWeightsR   R3   R   R   (   R   RX   R6   R   R   RY   R   Rc   R_   R\   RM   R1   Rd   R[   (    (    R   R3      s    			+
*-c         C   s   g  } |  i i D] } | | |  i q ~ } |  i oN t d j o |  i i	 i |  i } n |  i i	 i
 |  i } | g | } n t d t t |   t t |    } g  } | D] } | | | d | q ~ } |  i |  d  S(   Ns   1.233f1.0i   (   R   R   RX   RZ   R[   R6   R\   RY   R]   R^   R_   R`   Ra   Rb   Rc   RM   Rd   RJ   (   R   R   R_   R\   RM   Rc   Rd   R[   (    (    R   t   update   s    .
*-(   RU   RV   R3   Re   (    (    (    R   RW      s   	t   ActivationDisplayc           B   s   t  Z d   Z d   Z RS(   Nc         C   sf   | |  _  | |  _ | |  _ g  } | D] } | | i | q& ~ } t i	 |  d | d | d | d  S(   NR   R   R   (   t   layerR   t   unitsR   R   R6   t
   activationt   activationsR   R3   R   (   R   Rg   Rh   R   R   R6   R   Rj   (    (    R   R3      s
    			(c         C   s?   g  } |  i D] } | |  i i | q ~ } |  i |  d  S(   N(   R   R   Rh   R6   Rg   Ri   Rj   RJ   (   R   Rj   R   R6   (    (    R   Re      s    .(   RU   RV   R3   Re   (    (    (    R   Rf      s   	t   BackpropNetworkc           B   s@  t  Z d   Z d  d  Z d   Z e d  Z d  d  Z d   Z	 d   Z
 d   Z d  d	 d	 e d
  Z d d	 d	 d  Z d	 d	 d  Z d d	 d	 d  Z d	 d	 d  Z d   Z d   Z d   Z d   Z d   Z d   Z d d e d  Z d   Z e d  Z h  d  Z h  d  Z d   Z d   Z d    Z RS(!   Nc         C   sP   t  i |   g  |  _ g  |  _ d  |  _ d |  _ g  |  _ g  |  _	 d |  _
 d  S(   Ni
   i   (   t   NetworkR3   R   t   weightDisplayst   activationDisplaysR   t   defaultShapet   defaultScalet
   testInputst   testTargetst
   resetLimit(   R   (    (    R   R3      s    						c         C   s^   | d  j o d |  _ n4 t |  t j o | d j p
 t d  | |  _ t i |   d  S(   Ni'  i    s   invalid number of sweeps(	   t   sweepsR   R   t
   resetEpochR   R   R   Rl   t   train(   R   Rt   (    (    R   Rv      s
    *	c         C   s%   d t  |  i  t  |  i  f GHd  S(   Ns&   %d training patterns, %d test patterns(   R   R   t   inputsRq   (   R   (    (    R   t   showData   s    c         C   s[   | o	 d GHn |  i |  i |  _ |  _ |  i |  i |  _ |  _ | o |  i   n d  S(   Ns%   Swapping training and testing sets...(   t   verboseR   Rq   Rw   Rr   t   targetsRx   (   R   Ry   (    (    R   t   swapData   s    	c         C   s  t  |  t t g j p d | j o
 d j n o d GHd  Sn t |  i |  i |  i |  i	  } t |  d j p
 t d  d GHt i |  t t i | d t |    } g  } | |  D] \ } } | | q ~ |  _ g  } | |  D] \ } } | | q ~ |  _ g  } | | D] \ } } | | q%~ |  _ g  } | | D] \ } } | | qS~ |  _	 d t |  i  t |  i  f GHd  S(   Ni    id   s5   percentage of dataset to train on is required (0-100)s
   no datasets#   Randomly shuffling data patterns...f100.0s&   %d training patterns, %d test patterns(   R   t   trainingPortionR   R   t   zipR   Rw   Rq   Rz   Rr   t   patternsR   R   t   randomt   shuffleR	   R
   t   numTrainingR   R6   t   t(   R   R|   R6   R   R   R~   R   (    (    R   t	   splitData   s    8##....c         C   s  t  |  i  d j o d GHd  Sn d t |   j o t |  _ d |  _ d |  _ n
 t |  _ |  i	 |  i
 |  i } } } |  i d  |  i d  |  i d  |  i   |  i o# |  i o d |  i |  i f GHn |  i |  |  i |  |  i |  d  S(   Ni    s   no patterns to testt   classifyi   s   Got %d right, %d wrong(   R   R   Rw   t   dirt   Truet
   countWrongt   numRightt   numWrongt   Falset   learningt   orderedInputst   interactivet   learnt   ordert   interactt   setLearningt   setInteractivet   setOrderedInputst   sweep(   R   R   R   R   (    (    R   t   showPerformance   s$    			
c         C   s.   |  i d t  |  i   |  i d t  d  S(   NRy   (   R   R{   R   R   (   R   (    (    R   t   showGeneralization  s    
c         C   s   g  } |  i D] } | i p | | q q ~ |  _ g  } |  i D] } | i p | | qC qC ~ |  _ x |  i D] } | i   qt Wx |  i D] } | i   q Wd  S(   N(   R   R   Rm   t   wdt   closedRn   t   adRe   (   R   R   R   R   (    (    R   t   updateGraphics  s    55
 
 i    c         C   s  | g  } |  i D] } | | i q ~ j p t d |  | d d g j p
 t d  |  | } | d j o |  d } n | d j o |  d } n t	 | | |  i  } t | |  i  } | o; | \ } }
 | d j p t d |  | |
 d f } n |  i | i | i  }	 | d  j o t | i  } nB d | j o | i j  n p t d	 | i | f  | g } xP | D]H } t |	 | | | |  } | i d
 | i | f  |  i i |  qWd  S(   Ns   no such layer: %st   hiddent   outputs1   showWeights only works for hidden or output unitst   inputi   s"   shape %s cannot display bias valuei    s   invalid %s unit number: %ds   %s[%d] weights(   t	   layerNameR   R   t   layersRg   t   nameR   R^   t	   fromLayerR   R   Ro   R   R   Rp   RY   R   R   t   getConnectionRX   R6   R   t   ranget   sizeRh   RW   R   RF   Rm   R>   (   R   R   R6   R   R   RY   R   Rg   R   RX   R   R   Rh   R^   R   (    (    R   t   showWeights  s.    <
8	 t   ALLc   
      C   s  | g  }	 |  i D] } |	 | i q ~	 j p t d |  |  | } | d j o t | i	  } n t
 |  t j o t |  d j p
 t d  xY | D]Q } t
 |  t j o! d | j o | i	 j  n p t d | i | f  q Wt | | |  i  } t | |  i  } t | | | |  } | t | d | d d  j o d | d | d f } n4 t i g  }	 | D] } |	 t |  q}~	 d	  } | i d
 | i | f  |  i i |  d  S(   Ns   no such layer: %sR   i    s"   a list of unit numbers is requireds   invalid %s unit number: %sii   s   %d-%ds   , s   %s units %s(   R   R   R   R   Rg   R   R   Rh   R   R   R   R   R   R6   R   R   R   Ro   R   R   Rp   Rf   R   t   unitNumsRQ   RR   t   strRF   Rn   R>   (
   R   R   Rh   R   R   Rg   R   R6   R   R   (    (    R   t   showActivations6  s     <
0 O"3c      	   C   s   t  |  i  d j p
 t d  d | j o t  |  i  j  n p t d t  |  i  d  |  i | } t | | |  i  } t	 | |  i  } d | } t d | d | d | d	 |  } d  S(
   Ni    s'   no input patterns are currently defineds"   input number must be in range 0-%di   s	   input #%dR   R+   R   R   (   R   R   Rw   R   t   inputNumbert   patternR   R   Ro   R   R   Rp   R+   R   t   pgm(   R   R   R   R   R   R   R+   (    (    R   t	   showInputL  s     B
R   c      	   C   s|   t  |  t j o t |  d j p
 t d  t | | |  i  } t	 | |  i  } t d | d | d | d |  } d  S(   Ni    s   invalid patternR   R+   R   R   (   R   R   R   R   R   R   R   R   Ro   R   R   Rp   R   R+   R   (   R   R   R+   R   R   R   (    (    R   t   showPatternV  s    0c         C   s>  t  |  t j o t |  d j p
 t d  t  | d  t j	 o |  i | d | d | n t	 | d | |  i
  } t | |  i  } t d | d d | d |  } xu | d D]i } t d  } | d d	 g j o | i   d  Sn t	 | | |  i
  | i o d  Sn | i |  q Wt d
  | i   d  S(   Ni    s   a list of patterns is requiredR   R   R   i   s$   <enter> to continue, <q> to quit... t   Qt   qs   <enter> to close... (   R   R~   R   R   R   R   R   R   R   R   Ro   R   Rp   R   R   R   t	   raw_inputt   answerR/   R   RJ   (   R   R~   R   R   R   R   R   (    (    R   t   showPatterns\  s$    0 

 
c         C   s   t  i |   |  i   d  S(   N(   Rl   t
   initializeR   R   (   R   (    (    R   R   p  s    c         C   sH   |  i } |  i d  |  i d |  } d t |  GH|  i |  d  S(   Ni   R   s   output is [%s](   R   R   R   t	   propagateR   R   t   pretty(   R   R   R   R   (    (    R   t   applyt  s
    	c         O   s1   t  i |  | |  } |  i o |  i   n | S(   s+    Propagates activation through the network.N(   Rl   R   R   t   argt   kwR   R   R   (   R   R   R   R   (    (    R   R   }  s
     
c         C   s   t  i |   } |  i   | S(   N(   Rl   R   R   t   resultR   (   R   R   (    (    R   R     s    
c         C   s   t  i |  |  |  i   d  S(   N(   Rl   t   loadWeightsFromFileR   t   filenameR   (   R   R   (    (    R   R     s    c         C   s  t  |  i  d j o d GHd  Sn |  i |  i |  i } } } |  i	 d  |  i
 d  |  i d  | d } |  i d  }
 |
 i |  |  i   |
 i   d t  |  i  | f GHd t |   j o | d } t | d	  } xC |  i D]8 } |  i d
 |  }	 |  i |	  } | i d |  q W| i   d t  |  i  | f GHn |  i	 |  |  i |  |  i
 |  |  i   d  S(   Ni    s   no input patterns availablei   s   .hiddensR   s$   %d hidden layer patterns saved in %sR   s   .labelsRM   R   s   %s
s   %d classifications saved in %s(   R   R   Rw   R   R   R   R   R   R   R   R   R   R   t   logfilet   getLayerR   t   setLogR   t   closeLogR   t	   labelfileR"   R#   R   R   R   R   t   labelRO   R/   R   (   R   R   R   R   R#   R   R   R   R   R   R   R   (    (    R   t   saveHiddenReps  s6    




 
i   i   c         C   s  |  i | |  } | i i }	 | i i } | i i
 } | i i
 } t d | |	 d f  }
 | | d } d | | f GHd |
 GxZ t |  D]L } d | d t d t |   !| f } |  i d d	 | | f d
 | Gq W|  i d d |
 d f d
 | Gxj t |  D]\ } t d j o | i i | } n | i i | } |  i d |  i | | |  d
 | GqWHx t |	  D]r } d | | f } |  i d d |
 | f d
 | Gx8 t |  D]* } | i | | } |  i | | |  GqWHqyWHd  S(   Ns   %s[%d]i   i   s   Weights from %s to %s:t    i    i   t   grays   %*st   colorR   s   
%-*sR_   s   1.233s   %-*s(   R   R   t   fromLayerNamet   toLayerNameRX   R   R   t   numFromR^   t   numToR   t   fromNamet   toNameR   t   fromLabelWidtht   wholet   fract   toLabelWidthR5   R6   Rb   R   t   colorizeR   R]   RZ   t   bR_   t
   formatRealt   jRM   (   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R6   R   RX   RM   (    (    R   t   printWeights  s>     &$  )   c         C   s   | | d } t t t t |     } | | j o t	 d | | |  } n | | d j o9 | d j o d d | d } q d d | d } n d | | | f } | S(   Ni   i    s   >+t   9s   <-s   %+*.*f(   t   maxWholeSizet   maxFracSizet   maxSizeR   R   R   Ra   t   valuet	   wholeSizeR`   R@   (   R   R   R   R   R   R@   R   (    (    R   R     s    c         C   s   h  d d <d d <d d <d d <d	 d
 <d d <d d <d d <d d <d d <d d <d d <d d <d d <} | t j p | | j o | Sn d | | | f Sd  S(   NR   i   t   greeni    t   browni!   t   bluei"   t   magentai#   t   darkbluei$   R   i%   t	   underlinei&   t   whitei(   t   invRedi)   t   invGreeni*   t   invBrowni+   t   invBluei,   t
   invMagentai-   s   [01;%dm%s[0m(   t   colorsR   R   t	   colorNameRQ   (   R   R   RQ   R   R   (    (    R   R     s    c         C   s   |  i d | | | d | f  x_ | D]W } | | d |  | _ | | d |  | _ t	 | | d  | | d |  | _
 q) Wt i i   d  S(   Ns,   Epoch #%6d | TSS Error: %.4f | Correct: %.4ff1.0i   i   (   R   t   Printt   epocht   tssErrt   totalCorrectt
   totalCountt   pcorrectR   t   ptotalR   t   correctt   syst   stdoutt   flush(   R   R   R   R   R   t   rmsErrR   R   (    (    R   t   reportEpoch  s    " +c         C   s   |  i d | d | | d | f  x_ | D]W } | | d |  | _ | | d |  | _ t	 | | d  | | d |  | _
 q- Wt i i   d  S(   Ns,   Final #%6d | TSS Error: %.4f | Correct: %.4fi   f1.0i   i   (   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (   R   R   R   R   R   R   R   R   (    (    R   t   reportFinal  s    & +c         C   s5   d GHt  d  } | d d g j o d |  _ n d  S(   Ns#   ===================================s$   <enter> to continue, <q> to quit... R   R   i    (   R   R   R   R   (   R   R   (    (    R   t   prompt   s    c         C   sQ  t  t |  i   } | i   x+| D]#} |  i | } | i od | i	 | i f GHd \ } } | i d j o |  i o d |  i | i i    } d |  i | i i    } | | j o |  i d 7_ n | | j o | d 7} |  i d 7_ qn d t | i d d	 | f GHn d
 t | i d d	 | f GHHq& q& Wd S(   s#   Displays the network to the screen.s   %s layer (size %d)R   t   Outputs    (%s)i   s     *** WRONG ***s   Target    : %s%sR`   i   s   Activation: %s%sN(   R   R   (   R   R   R   R   R   t   reverseR6   Rg   t   activeR   t   tlabelt   olabelR   R   R   t   targett   tolistRi   R   R   R   (   R   Rg   R   R6   R   R   (    (    R   t   display	  s*     
 


"c         G   s   d t  |  j o
 d j n p
 t d  t  |  d j o@ | \ } } |  i d |  |  i d |  |  i d d  n` | \ } } } |  i d |  |  i d |  |  i d |  |  i d d  |  i d d  d  S(   Ni   i   s   only works for 2 or 3 layersR   R   R   (	   R   t   sizesR   t	   numInputst
   numOutputsR   t   addLayert   connectt
   numHiddens(   R   R  R  R  R  (    (    R   t	   addLayers   s    .(    RU   RV   R3   R   Rv   Rx   R   R{   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R  (    (    (    R   Rk      s6   					
							 	
			i    c         C   s   | d j oN t |   | j o; t i g  } |  d | !D] } | d | q8 ~  d Sn- t i g  } |  D] } | d | ql ~  Sd  S(   Ni    s   %.2fs    ...(   R`   R   R   RQ   RR   R   R   (   R   R`   R   R   (    (    R   R   0  s     ;(   R	   RQ   R(   t   graphicst   conxR]   R   R   R2   R   RW   Rf   Rl   Rk   R   (   R   Rf   RQ   R   R   Rk   RW   R   R(   R	   R]   (    (    R   t   ?	   s   		k% k