U C^ @sddlmZddlmZddlmZddlmZmZmZm Z ddd Z e e ej ed ed ed ed ddddeddde de ddGdddeZ dS))unicode_literals)describe)Model) DimensionSynapsesBiasesGradientNcCsZ|jdkr|jd|_|jdkrV|dk rVt|jdkrD|jd|_nt|d|_dS)Nr)nIshapenOlenintmax)modelXyr=/tmp/pip-install-6_kvzl1k/thinc/thinc/neural/_classes/selu.py_set_dimensions_if_needed s   rz Batch sizez Input sizez Output sizezWeights matrixcCs |j|jfSN)rr objrrrrcCs|||jdS)N)Z normal_initr )Wopsrrrrrz Bias vectorcCs|jfSr)rrrrrrrrb)nBr rrr d_Wd_bc@sLeZdZdZeddZeddZdddZd d Zdd d Z ddZ dS)SELUselucCs |j|jfSr)r!r selfrrr input_shape$szSELU.input_shapecCs |j|jfSr)r!rr&rrr output_shape(szSELU.output_shapeNcKs,tj|f|||_||_|dd|_dS)N drop_factor?)r__init__rr getr*)r'rr kwargsrrrr,,sz SELU.__init__cCs(|j|j|j|}|jj|dd|S)NTZinplace)rZaffinerr r%)r' input__bi output__borrrpredict2sz SELU.predictcs^}jjj|ddjjdddfdd }|dk rP|j9}|||S)NfZdtypeTr/csjjj|dd}jj|ddjj|7_j|jdd7_j|j j }|dk r|j j j j jd|S)Nr4r5Tr/r)Zaxis)key)rxpascontiguousarrayZ backprop_selur"Z batch_outerr#sumZ batch_dotrTZ_memweightsZgradientid)Zgrad__bosgdZgrad__BIr0Z output_copyr'rr finish_update<sz(SELU.begin_update..finish_update)N)r2rr7r8r%r*dropout)r'r0dropr1r?rr>r begin_update7s   zSELU.begin_updatec s|dkr|fSd}d|}|d||d|d d||}|jjjdd|jdfdd }|jj|k||}|||fS) Nrg,!r+gr3cs||dS)N)r=r)Z d_droppedr=ar?maskrrbackprop_selu_dropoutSsz+SELU.dropout..backprop_selu_dropout)N)rr7randomuniformr where) r'rr?rAalphaqr rFZdroppedrrCrr@Jsz SELU.dropout)NN)r3) __name__ __module__ __qualname__namepropertyr(r)r,r2rBr@rrrrr$s    r$)N) __future__rrrrrrr r rZon_data attributesr$rrrrs&