
    efh                         d dl Zd dlZd dlZej                  Zej
                  Zej                  Zej                  Zd Zd Z	d Z
d Zd Zd Zd Zd	 Zd
 Zd Zy)    Nc                 0    t        j                  | |      S )N)
batch_size)captcha_inputinputs)trainr   s     /app/captcha_model3.pyr   r      s    *==    c                 L    t         j                  j                  | |g dd      S )z7conv2d returns a 2d convolution layer with full stride.)   r   r   r   SAME)stridespadding)tfnnconv2d)valueweights     r   _conv2dr      s    55<<v|V<LLr	   c                 J    t         j                  j                  | ddd|      S )z-max_pool_2x2 downsamples a feature map by 2X.   r   )ksizer   r   name)r   r   
max_pool2d)r   r   s     r   _max_pool_2x2r      s"    55EAvDQQr	   c                     t         j                  j                  j                  d      }t        j                   ||      | t         j
                        }|S )z=weight_variable generates a weight variable of a given shape.皙?)stddevr   dtype)r   kerasinitializersTruncatedNormalVariablefloat32r   shapeinitializervars       r   _weight_variabler)      s?    ((''77s7CK
++k%(t2::
FCJr	   c                     t         j                  j                  j                  d      }t        j                   ||      | t         j
                        }|S )z9bias_variable generates a bias variable of a given shape.r   r   )r   r    r!   Constantr#   r$   r%   s       r   _bias_variabler,       s<    ((''005K
++k%(t2::
FCJr	   c                    t        j                  | dt        t        dg      } t        j                  d      5  t        dg d      }t        ddg      }t         j                  j                  t        | |      |      }t         j                  j                  |      }d d d        t        d	
      }t        j                  d      5  t        dg d      }t        ddg      }t         j                  j                  t        ||      |      }t         j                  j                  |      }d d d        t        d
      }t        j                  d      5  t        dg d      }t        ddg      }t         j                  j                  t        ||      |      }t         j                  j                  |      }	d d d        t        	d
      }
t        j                  d      5  t        dg d      }t        ddg      }t         j                  j                  t        |
|      |      }t         j                  j                  |      }d d d        t        d
      }t        j                  d      5  t        j                  |       d   }t        j                  ||dg      }|j                  d   }t        d|dg      }t        ddg      }t         j                  j                  t        j                  ||      |z         }d d d        t         j                  j                  d|z
        }t        j                  d      5  t        ddt        t         z  g      }t        dt        t         z  g      }t        j                  ||      |z   }d d d        t        j                  dt        t         g      S # 1 sw Y   $xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   jxY w)Nr   conv1weights)   r1   r   @   )r&   biasesr2   pool1r   conv2)r1   r1   r2   r2   pool2conv3pool3conv4pool4local1r   i   )ratesoftmax_linear)r   reshapeIMAGE_HEIGHTIMAGE_WIDTH
name_scoper)   r,   r   bias_addr   relur   r&   matmuldropout	CHARS_NUMCLASSES_NUM)images	keep_probkernelr3   pre_activationr/   r4   r6   r7   r8   r9   r:   r;   r   r?   dimr0   r<   local1_dropr>   s                       r   	inferencerO   '   s*   ZZ\; BCF	w	 +!)=A2$/(?H

>*	+ %g.E	w	 +!)>B2$/v(>G

>*	+ %g.E	w	 +!)>B2$/v(>G

>*	+ %g.E	w	 +!)>B2$/v(>G

>*	+ %g.E	x	  BXXf%a(
**UZ$45mmA"9S$K@4&1BIIgw7&@AB %%--Q]-;K	'	( B"9T9{;R4ST9{+B*CD;86AB
 ::nr9k&BCC_+ ++ ++ ++ +B BB BsM   A&O A&OA&O(A&O'8BO4AP  O
OO$'O14O= P	c                 x    t         j                  j                  || d      }t        j                  |d      }|S )Ncross_entropy_per_example)labelslogitsr   cross_entropyr5   )r   r   !softmax_cross_entropy_with_logitsreduce_mean)rS   rR   rT   cross_entropy_means       r   lossrX   \   s;    EE;;f+F < HMOLr	   c                 z    t         j                  j                  j                  d      }|j	                  |       }|S )Ng-C6?)r   r    
optimizersAdamminimize)rX   	optimizertrain_ops      r   trainingr_   c   s1    ##((.I!!$'HOr	   c                 b   t        j                  t        j                  | d      t        j                  |d            }t        j                  t        j                  |t         j
                        d      }t        j                  t        j                  |t         j                              S )Nr   axisr   )r   equalargmaxrV   castint32
reduce_sumr$   )rS   rR   correct_predictioncorrect_batchs       r   
evaluationrj   i   sh    "))F";RYYvTU=VWNN277+=rxx#HqQM==

;<<r	   c                 0    t        j                  | d      S )Nr   ra   )r   rd   )rS   s    r   outputrl   o   s    99V!$$r	   )
tensorflowr   r   configrA   r@   rH   rG   r   r   r   r)   r,   rO   rX   r_   rj   rl    r	   r   <module>rp      sp        ""  	>M
R
2Dj=%r	   