https://github.com/Microsoft/CNTK
Raw File
Tip revision: 2003303aba820a91be4b2db9788d15db14cff6dd authored by Frank Seide on 08 September 2020, 19:38:44 UTC
some updates, Marian-related
Tip revision: 2003303
dynamite.cpython-35.pyc


çžîXæã@s¢ddlZddlZddlZdZdZdZdZdd„Zdd„Z	Gdd	„d	ƒZ
Gd
d„de
ƒZGdd
„d
e
ƒZdd„Z
ddd„Zddd„ZeƒZddd„Zdd„Zdd„Zdd„Zdd„ZedƒZedƒZdd „Zeejjd!d"d#„d$d#„fƒZeejjd!d%d#„d&d#„fƒZeejjd!d'd#„d(d#„fƒZ eejj!ƒZ!eejj"ƒZ"eejj#d!d)d#„fƒZ#eejj$d!d*d#„fƒZ$eejj%d!d+d#„fƒZ%ee
j&d!d,d#„fƒZ'd-d.„Z(eejj)d!d/d#„fƒZ)eejj*d!d0d#„fƒZ*d1d2„Z+e+Z,d3d4„Z-d5d6„Z.d7d8„Z/e/d9d:d;„Z0d<d=„Z1e#d9d>d?„Z2e#d@dA„Z3d9dBdC„Z4dDdE„Z5dFdG„Z6ddHdI„Z7ddJdK„Z8dLdM„Z9dNdOdP„Z:dQdRdS„Z;e<dTdUdV„Z=dWdX„Z>dYdZ„Z?dd[l@mAZBdd\lCmDZEejjejjejjejj!ejjFejjGejjHejj#ejj"ejj$ejj%ejj)ejj*ejjIhZJd]d^„ZKd_d`„ZLdadbdc„ZMdddlNmNZNdedf„ZOdgdh„ZPdS)iéNTz(times_initializer)cCst|tƒr|St|ƒS)N)Ú
isinstanceÚVariableÚConstant)Úx©rúC:\work\dynamite\dynamite.pyÚto_Variable6srcKs|S)Nr)ÚkwargsrrrÚ	as_kwargs:sr
c@s~eZdZdZdfddd„Zdd„Zdd„Zd	d
„Zddd
„Zdd„Z	ddd„Z
dd„ZdZe
dd„ƒZddd„Zddd„Zdd„Zdd„Zdd„Zd d!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Ze
d3d:d4d5„ƒZd6d7„Zd8d9„ZdS);rrNc	Cs©tj|ƒ}||_||_tdd„|Dƒƒ|_||_||_||_x&|jD]}t	|t
ƒsbt‚qbWd|_t
j
|_t
j
d7_
|S)Ncss|]}t|ƒVqdS)N)r)Ú.0Úinputrrrú	<genexpr>Dsz#Variable.__new__.<locals>.<genexpr>Fé)ÚobjectÚ__new__ÚshapeÚopÚtupleÚinputsÚbackprop_to_functionsÚadditional_argsÚadditional_kwargsrrÚAssertionErrorÚcomputedÚgeneration_counterÚ
generation_id)	ÚclsrrrrrrÚvÚinprrrr@s						zVariable.__new__c
Cs{|jst‚t|dƒs&t‚t|j|j|jd|jd|jd|j	ƒ}tj
|_tj
d7_
|S)NÚinitializerrrrr)rrÚhasattrrrrrrrrrr)ÚselfÚresrrrÚcloneQs6zVariable.clonecCs|jst‚t|dƒs&t‚|j|_|j|_|j|_|j|_|j|_|j|_t	j
|_t	j
d7_
dS)Nrr)rrr rrrrrrrrr)r!ÚotherrrrÚreplace_withYszVariable.replace_withcCs\t|tƒrdSt|tƒr&dS|jtjjkr?dS|jtjjkrXdSdS)NÚPÚCÚGÚSÚV)rÚ	ParameterrrÚcntkÚNDArrayViewÚ__getitem__Úsplice)r!rrrÚtype_as_chards
zVariable.type_as_charFcCsš|jtjjkrJ|rJ|jdjƒdt|jdƒd}n5|jƒ}|dj	|j
ƒ7}|jr|d7}|dt|jƒ7}|S)Nrú[ú]z{:05}Ú*ú:)
rr,r-r.rÚtype_as_stringÚstrrr0Úformatrrr)r!Úexpand_getitemÚtrrrr5js/	
zVariable.type_as_stringcCs<t|jƒ}|jdƒ}|ddkr8|d}|S)Nú rz	<functionr)r6rÚsplit)r!r9ÚtsrrrÚop_as_stringts

zVariable.op_as_stringcsÉ|jdˆƒ}|d|jƒ7}|jr\|ddj‡fdd†|jDƒƒ7}|jr||dt|jƒ7}|jr²|ddjdd	„|jjƒDƒƒ7}|jrÅ|d
7}|S)Nr8z = z (z, cs"g|]}|jdˆƒ‘qS)r8)r5)rr)r8rrú
<listcomp>~s	z0Variable.signature_as_string.<locals>.<listcomp>z; css)|]\}}|dt|ƒVqdS)ú=N)r6)rÚnameÚvalrrrr
‚sz/Variable.signature_as_string.<locals>.<genexpr>ú))r5r=rÚjoinrr6rÚitems)r!r8r9r)r8rÚsignature_as_stringzs	-		-	
zVariable.signature_as_stringc
s¹ˆdkst‚ˆfˆj‰ˆj}|tkrŽ|djdkrTtdƒ|‰‡‡‡‡fdd†}tˆ||d	ˆjƒStˆ||d	ˆjd
ˆjdˆjƒS)
Nrréé,éé
csu|j}t|ƒtˆjƒd}|dks8t‚ˆfd|ˆj}ˆ|d|ƒ}|jˆƒ}|S)NrrÚreduce_to_shape)r)rÚlenrÚreshape)ÚargÚinput_shapeZnum_ones_to_insertZreduce_via_shaper")Ú
batch_sizeÚreduction_opr!Ú
shape_batchedrrÚreduce_batch˜s	z-Variable.create_batched.<locals>.reduce_batchrrr)rFrGrH)	rrrÚunary_reduction_opsÚprintrrrr)r!Úbatched_inputsrOrrRr)rOrPr!rQrÚcreate_batchedŠs	
zVariable.create_batchedcCstj}|t_|S)N)rÚ_batch_eval_fn)Z
batch_eval_fnÚprevrrrÚ	set_yield¤s		zVariable.set_yieldc
Cs]ytdd„|jDƒƒ}|rr|jrS|j||jd||jŽ}q°|j||jd|Œ}n>|jrš|j||j|jŽ}n|j||jŒ}|j|jkråt|ddƒt|j|jƒ|j|jksýt‚|SWnTt	k
rXt|ddƒtd|j|jtdd„|jDƒƒƒ‚YnXdS)Ncss|]}|jVqdS)N)Údata)rrrrrr
«sz$Variable._call_op.<locals>.<genexpr>ÚoutÚ	skip_freeTz_call_op failure:css|]}|jVqdS)N)r)rrrrrr
½s)
rrrrrrÚ
dump_graphrTrÚ	Exception)r!r[ÚargsrZrrrÚ_call_op©s&	%	
/zVariable._call_opcCs2|jst‚|jd|ƒ|_d|_dS)Nr[T)rrr`rZ)r!r[rrrÚcompute_dataÀszVariable.compute_datacCsE|js>tjr1tj|ƒ|js>t‚n
t|gƒ|jS)N)rrrWrÚ
batch_evalrZ)r!rrrÚ	get_valueÅs		

zVariable.get_valuecCs|jƒjƒS)N)rcÚ
to_ndarray)r!rrrrdÍszVariable.to_ndarraycCsC|js8t|ddƒtd|jƒƒtdƒ‚|j|S)Nr\Tzbackprop_to() missing forzbackprop_to missing)rr]rTrEÚNotImplementedError)r!ÚirrrÚbackprop_toÐs
	zVariable.backprop_torcCst|ƒ}t|||ƒS)N)rÚcreate_gradient_graph)r!Z
set_of_paramsÚerror_signalrrrÚ
grad_timesÖszVariable.grad_timescCs
t||ƒS)N)Úplus)r!r$rrrÚ__add__ÚszVariable.__add__cCs
t||ƒS)N)Úminus)r!r$rrrÚ__sub__ÜszVariable.__sub__cCs
t||ƒS)N)Ú
element_times)r!r$rrrÚ__mul__ÞszVariable.__mul__cCs
t||ƒS)N)Úgreater)r!r$rrrÚ__gt__àszVariable.__gt__cCs
t||ƒS)N)Útimes)r!r$rrrÚ
__matmul__âszVariable.__matmul__cCs||}|||<|S)Nr)rÚgÚkeyr"rrrÚ_place_itemäs

zVariable._place_itemcsòtˆtƒrf}nytˆtƒr…ˆjdksKˆjdksKt‚ˆjdkriˆjdksot‚ˆjˆjf}nts‘t‚||jdd…}||jkr»|St	|t
jj|fd‡fdd†fdˆfƒS)Nrrrcs3t|jdjtj|jd|fdˆfƒS)Nrr)rrrrw)rru)rvrrÚ<lambda>ús)z&Variable.__getitem__.<locals>.<lambda>r)
rÚintÚsliceÚsteprÚstartÚstopÚfalserrr,r-r.)r!rvZ	first_dimrr)rvrr.és	$$zVariable.__getitem__cCs|S)Nr)rrrrÚ	_op_aliasýszVariable._op_aliasÚaxisc
Gs’|dkrtdƒtt|ƒfd	d
||djtjj|d|dkr]dn"tdd„tt|ƒƒDƒƒdt	d|ƒƒS)Nrz.splice: axis >= 0 case not implemented for nowrrcss|]}|dd„VqdS)cSs||||S)Nr)rrurfrrrrxsz+Variable.splice.<locals>.<genexpr>.<lambda>Nr)rrfrrrr
sz"Variable.splice.<locals>.<genexpr>rr€)réÿÿÿÿr)
Ú
ValueErrorrrKrr,r-r/rÚranger
)r€r_rrrr/ÿs
&	7zVariable.splicecCs"t|tjj|fd|fƒS)Nr)rr,r-rL)r!rrrrrLszVariable.reshapecCs(t|tjj|fdtd|ƒƒS)NrrJ)rr,r-Ú
reduce_sumr
)r!rrrrÚreduce_sum_to_shape
szVariable.reduce_sum_to_shaper) Ú__name__Ú
__module__Ú__qualname__rrr#r%r0r5r=rErVrWÚstaticmethodrYr`rarcrdrgrjrlrnrprrrtrwr.rr/rLr…rrrrr=s:
rc@sReZdZddd„Zddd„Zdd„Zdd	„Zd
d„ZdS)r+NcCstj||dgƒS)Nr+)rr)rrrrrrrszParameter.__new__cCsN|r||_tj|_|f|_tdd„|DƒƒrJ|jƒdS)Ncss|]}|tkVqdS)N)ÚINFER)rÚdimrrrr
sz%Parameter.__init__.<locals>.<genexpr>)rr+Ú_initializerrÚallra)r!rrrrrÚ__init__s	zParameter.__init__cCs“tdd„|jDƒƒs"t‚t|dƒrUtjj|jddƒ}|`n$tjjt	j
|jt	jƒƒ}tjj|_
|_
|S)Ncss|]}|tkVqdS)N)rŠ)rr‹rrrr
sz(Parameter._initialize.<locals>.<genexpr>r皙™™™™©?gš™™™™™©¿r)rrrr r,r-Úrandom_uniform_floatrÚ
from_denseÚnpÚzerosÚfloat32ÚcoreÚ	__class__)r!rZrrrrŒs"	$zParameter._initializecCsV|j}tjj|_|_|j|_||_d|_t|dƒrR|`dS)NTr)	rZr,r•r-r–rrr r)r!r$rZrrrÚshare_data_from s			zParameter.share_data_fromcCs0||_tdd„|Dƒƒr,|jƒdS)Ncss|]}|tkVqdS)N)rŠ)rr‹rrrr
-sz#Parameter.resize.<locals>.<genexpr>)rrra)r!rrrrÚresize+s	zParameter.resize)r†r‡rˆrrŽrŒr—r˜rrrrr+
s
	r+c@seZdZddd„ZdS)rNcCsdt|tjƒs3tjjtj|tjƒƒ}tj||j	dgƒ}||_
d|_|S)NrT)rr,r-r‘r’Úarrayr”rrrrZr)rrZrrrrrr1s!		zConstant.__new__)r†r‡rˆrrrrrr0srcCs¹t|tjtfƒr!|jnf}t|tjtfƒrH|jnf}tt|ƒt|ƒƒ}d|t|ƒ|}d|t|ƒ|}tdd„t||ƒDƒƒS)Nrcss$|]\}}t||ƒVqdS)N)Úmax)rZdimAZdimBrrrr
?sz$elementwise_shape.<locals>.<genexpr>)r)r)	rr’ÚndarrayrrršrKrÚzip)ÚaÚbÚshapeAÚshapeBÚrankrrrÚelementwise_shape9s''r¢cs‡‡fdd†}|S)Ncs%tt||ƒˆ||fdˆƒS)Nr)rr¢)rrž)rÚopcoderrÚfCszbinary_op.<locals>.fr)r£rr¤r)rr£rÚ	binary_opAsr¥cs‡‡fdd†}|S)Ncst|jˆ|fdˆƒS)Nr)rr)r)rr£rrr¤Nszunary_op.<locals>.fr)r£rr¤r)rr£rÚunary_opMsr¦cs&tjˆƒ‡‡fdd†}|S)Ncstfˆ|fdˆƒS)Nr)r)r)rr£rrr¤Xszunary_reduction_op.<locals>.f)rSÚadd)r£rr¤r)rr£rÚunary_reduction_opVs
r¨cCsR|}|jd}|j}|j}t|jdjtjj||jdfƒS)Nrr)rrrr,r-Ú
dot_transpose)rrurržrŸr rrrÚtimes_backprop_to_0^s

		rªcCsã|jd}|}|j}|j}t|ƒdkrPd|}|j|ƒ}t|ƒdkr{d|}|j|ƒ}|d|df}t|tjj||fƒ}|j|jdjkrß|j|jdjƒ}|S)Nrr)r)r)rrrKrLrr,r-Ú
transpose_dot)rrurržrŸr ÚshapeCr"rrrÚtimes_backprop_to_1fs
		

r­cCsãt|ttfƒr%|dkr%dSt|dƒr™|jdtkrT|jdn(t|tjtfƒry|jdnd|jdf}|j	|ƒt|tjtfƒrº|jn
|jdf}t|tjtfƒrë|jnf}|fkrodt
|ƒkodknsCdt
|ƒko=dknrOtdƒ‚|d|dkrotdƒ‚f}t
|ƒdkr˜||df}t
|ƒdkr»||df}t|tj
j||fdttfƒS)	NrrrrFz(times only supports matrices and vectorszinner dimensions do not matchrr)rryÚfloatr rrŠr’r›rr˜rKÚ	TypeErrorr,r-Údotrªr­)rržrrŸr r¬rrrrszs&!H
1'FrscCs¦t|dƒrt|jd|jdtkr9|jdn(t|tjtfƒr^|jdndf}|j|ƒt|tjtfƒr•|jn
|jdf}t|tjtfƒrÆ|jnf}dt|ƒkoédknsdt|ƒkodknrt	dƒ‚|d|dkr>t	dƒ‚f}t|ƒdkrg||df}t|ƒdkrŠ||df}t|t
jj||fƒS)	NrrrrFz(times only supports matrices and vectorszinner dimensions do not matchrr)
r rrŠrr’r›rr˜rKr¯r,r-r©)rržrrŸr r¬rrrÚtimes_transposes 
N
1'Fr±rcCs(|j|jkr$|j|jƒ}|S)N)rr…)rrurrrÚ_unbroadcast¥sr²rcCst|jd|ƒS)Nr)r²r)rrurrrrx«srxcCst|jd|ƒS)Nr)r²r)rrurrrrx«scCst|jd|ƒS)Nr)r²r)rrurrrrx¬scCst|jdt|ƒS)Nr)r²rÚzero)rrurrrrx¬scCst|jd||jdƒS)Nrr)r²r)rrurrrrx­scCst|jd||jdƒS)Nrr)r²r)rrurrrrx­scCs||t|S)N)Úone)rrurrrrx±scCs||tkS)N)r³)rrurrrrx²scCs||S)Nr)rrurrrrx³scCs|S)Nr)rrurrrrx´scCs_t|jdjƒ}t|jƒ}||}|dksAt‚|jd|}|j|ƒS)Nrr)r)rKrrrrL)rruÚ
input_rankÚoutput_rankZnum_reduced_dimsZpadded_g_shaperrrÚ
_pad_unreduce¸s
r·cCst||ƒt|jdS)Nr)r·r³r)rrurrrrx¿scCs+t||ƒt|jdt||ƒƒS)Nr)r·Úexpr)rrurrrrxÀscCst|ƒt||ƒS)N)Úreduce_log_sumr„)ÚoutputÚlabelrrrÚcross_entropy_with_softmaxÄsr¼cs‡‡fdd†‰ˆS)Ncs,t|ttfƒr"tˆ|ƒSˆ|ƒS)N)rÚlistrÚmap)r)Úbroadcasting_unary_opr¦rrr¿Üs
z0BroadcastingUnary.<locals>.broadcasting_unary_opr)r¦r)r¿r¦rÚBroadcastingUnaryÚsrÀcs‡fdd†}|S)NcsCd|_t|_x*ˆjƒD]\}}t|||ƒqW|S)NT)Ú__ismodel__Úget_parametersrDÚsetattr)r¤r@Úvalue)r	rrÚpatchïs
		zModel.<locals>.patchr)r	rÅr)r	rÚModelîs	rÆcCs|S)Nr)rrrrÚidentityüsrÇÚcs^tt|fdtƒ‰t|fƒ‰tdˆdˆƒt‡‡‡fdd†ƒƒ}|S)NrÚWržcsˆ|ˆˆƒS)Nr)r)rÉÚ
activationržrrÚdenseszDense.<locals>.dense)r+rŠÚtimes_initializerrÆrÀ)ÚNrÊr@rËr)rÉrÊržrÚDenseÿs
!rÎcCstdd„ƒ}|S)NcSs|jƒ}|S)N)rd)rZx_cpurrrÚ
log_values	szLogValues.<locals>.log_values)rÀ)rÏrrrÚ	LogValuessrÐcsytt|fdtƒ‰t||fdtƒ‰t|fƒ‰tdˆdˆdˆƒ‡‡‡‡fdd†ƒ}|S)NrrÉÚRržcs.ˆttt|ˆƒt|ˆƒƒˆƒƒS)N)rkrs)Úsr)rÑrÉrÊržrrÚrnn_stepszRNNUnit.<locals>.rnn_step)r+rŠrÌrÆ)rÍrÊr@rÓr)rÑrÉrÊržrÚRNNUnits
6rÔcsˆtdˆfƒ‰ttdˆfdtƒ‰tˆdˆfdtƒ‰tdˆdˆdˆƒ‡‡‡‡‡fdd†ƒ}|S)NérrÉrÑržcsö|\}}ˆt|ˆƒt|ˆƒ}t|dˆdˆƒ}t|dˆdˆƒ}t|dˆdˆƒ}t|dˆdˆƒ}t|ƒ}	|	ˆ|ƒ}
t|ƒ}||}||
}
t|ƒ}|ˆ|
ƒ}||
fS)NrrrFrÕé)rsÚ	row_sliceÚsigmoid)ZdhcrÚdhÚdcÚproj4Úit_projÚbit_projÚft_projÚot_projÚitÚbitÚftÚbftÚctÚotÚht)rÍrÑrÉrÊržrrÚlstms 

zLSTM.<locals>.lstm)r+rŠrÌrÆ)rÍrÊrçr)rÍrÑrÉrÊržrÚLSTMs
9rècsCtt|fdtƒ‰tdˆƒt‡fdd†ƒƒ}|S)NrÚEcs
t|ˆƒS)N)rs)r)rérrÚ	embedding:szEmbedding.<locals>.embedding)r+rŠrÌrÆrÀ)rÍr@rêr)rérÚ	Embedding8srëcs%tdˆƒ‡fdd†ƒ}|S)NÚ	__items__cs!xˆD]}||ƒ}qW|S)Nr)rr¤)Ú	functionsrrÚseqAs
zSequential.<locals>.seq)rÆ)rírîr)rírÚ
Sequential@s!rïcs1tdˆƒt‡fdd†ƒƒ}ttƒS)NÚmap_functioncs
ˆ|ƒS)Nr)r)rðrrÚmap_fIszMap.<locals>.map_f)rÆrÀr¤)rðrñr)rðrÚMapHsròcs(tdˆƒ‡‡fdd†ƒ}|S)NÚ
step_functioncsAˆ}x|D]}ˆ||ƒ}q
Wt|tƒr=|dS|S)Nr)rr)rrÒÚsample)Ú
initial_staterórrÚfoldRs
zFold.<locals>.fold)rÆ)rórõrör)rõrórÚFoldOs$r÷cs4tˆƒ‰tdˆƒ‡‡fdd†ƒ}|S)Nrócs=ˆ}g}x*|D]"}ˆ||ƒ}|j|ƒqW|S)N)Úappend)rrÒr[rô)rõrórrÚ
recurrence\s
zRecurrence.<locals>.recurrence)rrÆ)rórõrùr)rõrórÚ
RecurrenceZs$rúcCsÉg}x¶t|ƒD]¨}|ddkr8|dkr8qt||ƒ}t|tƒrf|j|ƒq|dkr™xF|D]}|jt|ƒƒqyWqt|dƒr|jt|ƒƒqWt|ƒS)NrÚ_rìrÁ)	ÚdirÚgetattrrr+røÚextendrÂr r)ÚmÚ
parametersÚmember_nameÚmemberÚitemrrrrÂhs
rÂrûcCsñtƒ}xát|ƒD]Ó}|ddkr;|dkr;qt||ƒ}t|tƒrn|d|||<q|dkr¼xlt|ƒD].\}}|jt|dj||ƒƒƒq‡Wqt	|dƒr|jt||d|ƒƒqW|S)NrrûrìÚ.z{}[{}]rÁ)
Údictrürýrr+Ú	enumerateÚupdateÚget_parameter_namesr7r )rÿÚrootZparameter_namesrrrfrrrrrxs	)"rú$cCsçxàt|ƒD]Ò}|ddkr2|dkr2q
t||ƒ}t|tƒrvt|d|dt|jƒƒq
|dkr»xZt|ƒD]%\}}t|dj	||ƒƒqWq
t
|dƒr
t||d|ƒq
WdS)Nrrûrìrz: z{}[{}]rÁ)rürýrr+rTr6rrÚdump_parametersr7r )rÿr	rrrfrrrrr‡s& r)ÚrootscsÛg‰tƒ‰‡‡‡fdd†‰x|D]}ˆ|ƒq.Wtˆƒtˆƒks`t‚tˆƒtˆƒks~t‚tƒ}xMˆD]E}x)|jD]}t|ƒ|ksžt‚qžW|jt|ƒƒqŽWˆS)NcsTt|ƒˆkrPˆjt|ƒƒx|jD]}ˆ|ƒq/Wˆj|ƒdS)N)Úidr§rrø)Únoder)ÚorderÚtraverseÚvisitedrrr¡s
ztopo_sort.<locals>.traverse)ÚsetrKrrr
r§)rrÚseenrr)rrrrÚ	topo_sorts	
(	
rc	Csýddlm}|dd„t|ƒDƒƒ}d|krE|dnd}d|kra|dnd}d|kr}|dnd}d|kr™|dnd}d	|krµ|d	nd}|||||}t|d
|||fd||fdƒdS)
Nr)ÚCountercss|]}|jƒVqdS)N)r0)rr9rrrr
ìsz$print_graph_stats.<locals>.<genexpr>r&r'r*r(r)znodes,z(#compute, #splice, #slice),z(parameters, constants))ÚcollectionsrrrT)	ÚvarsrÚstatsZ
num_paramsZ
num_constsZnum_varsZnum_getitemsZnum_splicesÚtotalrrrÚprint_graph_statsêsrc
st|ƒ}t|ƒ}tdd„|Dƒƒ}tƒ‰‡fdd†}d‰d‰‡‡fdd†}x¬|D]¤}|jr†qtdd	„}||ƒ|_g|_d|_xI|jD]>}t	|t
ƒr½|jr½|jj|ƒ|jd
7_q½W|jdkrt||ƒqtWd}	d}
x¿ˆrétˆj
ƒd‡fdd
†ƒ}ˆ|}||ƒ|	d
7}	ˆ|=xi|D]a}|
d
7}
xN|jD]C}|jdks¶t‚|jd
8_|jdkr›||ƒq›WqWq+W|
|ksüt‚dS)Ncss|]}|jsdVqdS)rN)r)rrrrrr
ùsz+transform_to_batched_ops.<locals>.<genexpr>cs:|j}|ˆkr%|gˆ|<nˆ|j|ƒdS)N)rvrø)rrv)Ú	ready_opsrrÚ	add_readyþs	z+transform_to_batched_ops.<locals>.add_readyrc
sˆd‰dd„‰tˆƒdkr¬ˆjtjjkržˆˆjƒržˆj}|d}|jd}|jd||t|ƒ…}ˆj|ƒdSˆ	d7‰	dSˆjtjjksëˆjtjj	ksëˆjtjjkrïdSx&ˆjD]}t
|tƒsùt‚qùWˆjtjj
kpTˆjtjjkpTˆjtjjk‰dd„‰t‡fdd†ˆjDƒƒ‰dˆsštˆƒnˆd‰tˆƒ}‡‡‡
‡‡‡fd	d
†‰tˆjƒ}t‡fdd†tˆjƒDƒƒ‰ˆ	d7‰	tdd„tˆˆjƒDƒƒr¥t‡‡fd
d†t|ƒDƒƒsft‚ˆjƒ}xptˆƒD]\}}	|	jt|ƒƒqWn@ˆjˆ|ƒ}x+tˆƒD]\}}	|	j||ƒqÄWx2tˆƒD]$\}}	|	jˆjksòt‚qòWdS)NrcsB|d‰ˆjtjjkoAt‡fdd†t|ƒDƒƒS)Nrc3sb|]X\}}|jtjjkoY|jdˆjdkoY|jd|ˆjdkVqdS)rN)rr,r-r.rr)rrfrM)Úarg0rrr
&sz\transform_to_batched_ops.<locals>.transform_batched_op.<locals>.reslicing.<locals>.<genexpr>)rr,r-r.rr)r_r)rrÚ	reslicing"s
zItransform_to_batched_ops.<locals>.transform_batched_op.<locals>.reslicingrcSs)t|ttjfƒr%t|jƒSdS)Nr)rrr’r›rKr)rrrrr¡GszDtransform_to_batched_ops.<locals>.transform_batched_op.<locals>.rankc3s|]}ˆ|ƒVqdS)Nr)rr)r¡rrr
IszItransform_to_batched_ops.<locals>.transform_batched_op.<locals>.<genexpr>csyt‡fdd†ˆDƒƒ}ˆ|dks5t‚ˆrŸˆdkrŸt‡fdd†|Dƒƒsvtˆddƒt‡fdd†|Dƒƒs›t‚ˆSt‡fd	d†|DƒƒrˆSˆjtjkr÷t‡fd
d†|Dƒƒr÷ˆSˆ|ƒr/ˆjd}ˆjd||t	|ƒ…Sˆˆˆ}tj
|d|Œ}|jtjj
krqˆd7‰|SdS)Nc3s|]}|jˆVqdS)N)r)rr)rfrrr
Pszetransform_to_batched_ops.<locals>.transform_batched_op.<locals>.make_batched_input.<locals>.<genexpr>rrc3s|]}|ˆkVqdS)Nr)rrM)rrrr
Usr\Tc3s|]}|ˆkVqdS)Nr)rrM)rrrr
Wsc3s|]}|ˆkVqdS)Nr)rrM)rrrr
Zsc3s;|]1}|jtjko2|jdˆjdkVqdS)rN)rrrr)rrM)rrrr
]sr€)
rrrr]rrrrrrKr/r,r-)rfrr_Úi0r€r")Úis_mulÚnew_rankÚnum_gathersÚop_batchÚranksr)rrfrÚmake_batched_inputOs&%1

zRtransform_to_batched_ops.<locals>.transform_batched_op.<locals>.make_batched_inputc3s$|]\}}ˆ||ƒVqdS)Nr)rrfr)r%rrr
qscss!|]\}}||kVqdS)Nr)rÚibrrrrr
vsc3s&|]}ˆ|ˆj|kVqdS)N)r)rrf)rUÚv0rrr
xs)rKrr,r-r/rrr%r.rLrrrr°r©r«rršrrrœrƒr#ÚaliasrVr)
r#r_rrZ	v_batchedrZnum_batched_opsZ
num_inputsrfr)Únum_compute_launchesr")	rUr r%r!r#r¡r$rr'rÚtransform_batched_op sH
	$	

!

??	" ! 
%.z6transform_to_batched_ops.<locals>.transform_batched_opcs+|jtjjks*|jtjjkr7d|jfS|jtjjksv|jtjjksv|jtjjkr£d|j|jdj	t
|jdƒffS|j}tdd„|Dƒƒ}|j
‰ˆrÿt‡fdd†tˆjƒƒDƒƒ‰d|j|ˆtdd„|jDƒƒfS)	NTFrrcss0|]&}t|tƒs|n	t|ƒVqdS)N)rrzr6)rrMrrrr
œsz=transform_to_batched_ops.<locals>.make_key.<locals>.<genexpr>c3s|]}|ˆ|fVqdS)Nr)rÚarg_name)Úadditional_kwargs_tuplifiedrrr
¢scss|]}|jVqdS)N)r)rrrrrr
£s)rr,r-r.rLr°r©r«rrr
rrrÚsortedÚkeys)ÚpZadditional_args_sanitizedr)r,rÚmake_key‘s*
?-		
	+z*transform_to_batched_ops.<locals>.make_keyrrvcstˆ|ƒˆ|djfS)Nr)rKr)rv)rrrrxµsz*transform_to_batched_ops.<locals>.<lambda>)rrKÚsumrrrvZ	consumersZnon_ready_inputsrrrrøršr.r)
rÚnodesÚ	num_nodesZexpected_num_opsrr*r/r0rZbatches_runZops_runrvr#r)r)r"rrÚtransform_to_batched_opsõsJ	n
				$




r4)Úmul)ÚreducecCstrt|ƒt|ƒ}t|ƒ}d}xc|D][}|js5|jtkr‡tt|j	dƒ}||_
||_||7}q5d|_
q5Wtj
|fƒ}xk|D]c}|js­d}|j
}|dkr||||j…}|j|j	ƒ}|jd|ƒq­WdS)Nrrr[rr)Úuse_batchingr4rrKrrÚops_with_outÚfunctools_reduceÚmul_operatorrÚ
mem_offsetÚmem_sizer,r-rLra)rr2r3r;r/r<Zarenar[rrrrbÛs,

			


		rbcst|gƒ}dd„|Dƒ‰xC|D];}t‡fdd†|jDƒƒr)ˆjt|ƒƒq)Wt|ƒˆkr†tdƒ‚tƒ‰|ˆ|<tƒ}x>t‡fdd†t	|ƒƒD]}ˆ|}|jt|ƒƒxõt
|jƒD]ä\}}t|ƒˆkr÷|j|ƒ}	|	||ƒ}
|j|
jkr€t
|
dd	ƒtd
|
jd|jd|d
|jƒƒ|j|
jks˜t‚|ˆkr±|
ˆ|<q÷t|ƒ|ksÉt‚ˆ||
ˆ|<q÷WqÄW‡fdd†|Dƒ}|S)NcSsh|]}t|ƒ’qSr)r
)rr/rrrú	<setcomp>s	z(create_gradient_graph.<locals>.<setcomp>c3s!|]}t|ƒˆkVqdS)N)r
)rr)Ú
active_setrrr
sz(create_gradient_graph.<locals>.<genexpr>zCgrad_times: variable does not depend on any of the given parameterscst|ƒˆkS)N)r
)r)r>rrrxsz'create_gradient_graph.<locals>.<lambda>r\Tzgradient shapez&came back different from input's shapez	for inputzof opcsi|]}ˆ||“qSrr)rr/)Ú	gradientsrrú
<dictcomp>6s	z)create_gradient_graph.<locals>.<dictcomp>)rÚanyrr§r
r‚rrÚfilterÚreversedrrgrr]rTrEr)r	rrir2rZg_usedrurfrrgZinput_gr"r)r>r?rrh
s6
"	
	(
+
rhFcCsbt|tƒr|g}xCt|ƒD]5}|sD|jƒdkr%t|jddƒƒq%WdS)Nr*r)r8T>r)r*)rrrr0rTrE)rr\rrrrr]<s
	r])Úgreenletc	sg‰trÜtt|Œƒ}‡fdd†|Dƒ}d‰‡‡fdd†}‡‡fdd†‰‡‡fdd†‰‡fd	d†|Dƒ‰g‰‡‡‡‡fd
d†}tj|ƒ}|ƒtj|ƒn0x-t|ŒD]}ˆ|Œ}ˆj|ƒqéWˆS)Ncs%g|]}|‡fdd†‘qS)cs
ˆ|ŒS)Nr)r_)r¤rrrxLsz&map_batch.<locals>.<listcomp>.<lambda>r)rr_)r¤rrr>Ls	zmap_batch.<locals>.<listcomp>csd‰ˆˆjƒdS)Nr)Úswitchr)Úcurrent_coro_indexÚ	greenletsrrÚyield_to_firstOsz!map_batch.<locals>.yield_to_firstcs4ˆd7‰ˆtˆƒkr"d‰ˆˆjƒdS)Nrr)rKrEr)rFrGrrÚ
yield_to_nextSs
z map_batch.<locals>.yield_to_nextcs‡‡‡fdd†}|S)Ncs!ˆƒ}ˆj|ƒˆƒdS)N)rø)r")ÚcoroÚresultrIrrÚrun_coroZs	
z1map_batch.<locals>.coro_wrapper.<locals>.run_coror)rJrL)rKrI)rJrÚcoro_wrapperYszmap_batch.<locals>.coro_wrappercs"g|]}tˆ|ƒƒ‘qSr)rD)rrJ)rMrrr>_s	cs\ˆj|ƒˆdtˆƒkrQtˆƒtˆƒksAt‚tˆƒg‰ˆƒdS)Nr)rørKrrb)r)rFrGÚpending_varsrIrrÚyield_to_batch_evalbs

z&map_batch.<locals>.yield_to_batch_eval)Úuse_coroutinesrrœrrYrø)	r¤Ú
batch_argsZzipped_batch_argsZcorosrHrOZprev_yield_to_batch_evalr_r"r)rMrFr¤rGrNrKrIrÚ	map_batchFs$rRcs‰tdt|dƒƒt||ƒ}tdd„|Dƒƒ}tj|Œ}t|ƒ}|St}‡fdd†‰ˆt|ƒ}|S)Nzbatch ofrcss|]}|dVqdS)rNr)rÚcritrrrr
‚sz"train_minibatch.<locals>.<genexpr>cs€t|ƒ}|dkrS|ˆ||d|d…ƒˆ|||dd…ƒƒS|dkrt||d|dƒS|dSdS)NrFrr)rK)r¤r_Ún)Útree_reducerrrUs;z$train_minibatch.<locals>.tree_reduce)rTrKrRrrr/r„rk)Ú	criterionrQZcritsZ
crits_batchedrSr¤r)rUrÚtrain_minibatch}srW)QÚnumpyr’r,rr7rPrŠrÌrr
rr+rr¢r¥r¦rrSr¨rªr­rsr±r³r´r²r-rlrkrnrmrprorqÚtanhrØÚrelur¸rr(r·r„r¹r¼Úclassification_errorrÀrÆrÇrÎrÐrÔrèrërïròr÷rúrÂrrr½rrr4Úoperatorr5r:Ú	functoolsr6r9r°r©r«r/r8rbrhr]rDrRrWrrrrÚ<module>s†"Ð#		***!!!!!		Mß$$!2/7
back to top