/usr/local/lib64/python3.6/site-packages/caffe2/python/__pycache__
NameSizeModeActions
allcompare_test.cpython-36.pyc27100644editdlrm
attention.cpython-36.pyc49380644editdlrm
benchmark_generator.cpython-36.pyc39100644editdlrm
binarysize.cpython-36.pyc48530644editdlrm
brew.cpython-36.pyc38490644editdlrm
brew_test.cpython-36.pyc104520644editdlrm
build.cpython-36.pyc3400644editdlrm
cached_reader.cpython-36.pyc29540644editdlrm
caffe_translator.cpython-36.pyc241650644editdlrm
caffe_translator_test.cpython-36.pyc29290644editdlrm
checkpoint.cpython-36.pyc279730644editdlrm
checkpoint_test.cpython-36.pyc94620644editdlrm
cnn.cpython-36.pyc84350644editdlrm
context.cpython-36.pyc40080644editdlrm
context_test.cpython-36.pyc26650644editdlrm
control.cpython-36.pyc144660644editdlrm
control_ops_grad.cpython-36.pyc163650644editdlrm
control_ops_grad_test.cpython-36.pyc15020644editdlrm
control_ops_util.cpython-36.pyc83320644editdlrm
control_test.cpython-36.pyc118700644editdlrm
convert.cpython-36.pyc1480644editdlrm
convert_test.cpython-36.pyc5680644editdlrm
convnet_benchmarks.cpython-36.pyc129450644editdlrm
convnet_benchmarks_test.cpython-36.pyc10900644editdlrm
core.cpython-36.pyc944280644editdlrm
core_gradients_test.cpython-36.pyc248250644editdlrm
core_test.cpython-36.pyc339420644editdlrm
crf.cpython-36.pyc76220644editdlrm
crf_predict.cpython-36.pyc10440644editdlrm
crf_viterbi_test.cpython-36.pyc16770644editdlrm
dataio.cpython-36.pyc239780644editdlrm
dataio_test.cpython-36.pyc132670644editdlrm
dataset.cpython-36.pyc128790644editdlrm
data_parallel_model.cpython-36.pyc514160644editdlrm
data_parallel_model_test.cpython-36.pyc389230644editdlrm
data_workers.cpython-36.pyc131420644editdlrm
data_workers_test.cpython-36.pyc45220644editdlrm
db_file_reader.cpython-36.pyc53610644editdlrm
db_test.cpython-36.pyc13280644editdlrm
device_checker.cpython-36.pyc40140644editdlrm
dyndep.cpython-36.pyc15680644editdlrm
embedding_generation_benchmark.cpython-36.pyc42030644editdlrm
experiment_util.cpython-36.pyc32330644editdlrm
extension_loader.cpython-36.pyc5430644editdlrm
fakefp16_transform_lib.cpython-36.pyc5460644editdlrm
filler_test.cpython-36.pyc9250644editdlrm
functional.cpython-36.pyc35310644editdlrm
functional_test.cpython-36.pyc41320644editdlrm
fused_8bit_rowwise_conversion_ops_test.cpython-36.pyc36310644editdlrm
gradient_checker.cpython-36.pyc106220644editdlrm
gradient_check_test.cpython-36.pyc167880644editdlrm
gru_cell.cpython-36.pyc25960644editdlrm
hip_test_util.cpython-36.pyc6690644editdlrm
hsm_util.cpython-36.pyc18230644editdlrm
hypothesis_test.cpython-36.pyc843120644editdlrm
hypothesis_test_util.cpython-36.pyc200390644editdlrm
ideep_test_util.cpython-36.pyc10810644editdlrm
layers_test.cpython-36.pyc573720644editdlrm
layer_model_helper.cpython-36.pyc216410644editdlrm
layer_model_instantiator.cpython-36.pyc36650644editdlrm
layer_parameter_sharing_test.cpython-36.pyc56260644editdlrm
layer_test_util.cpython-36.pyc52730644editdlrm
lazy.cpython-36.pyc4240644editdlrm
lazy_dyndep.cpython-36.pyc24750644editdlrm
lazy_dyndep_test.cpython-36.pyc48070644editdlrm
lengths_reducer_fused_8bit_rowwise_ops_test.cpython-36.pyc43920644editdlrm
lengths_reducer_rowwise_8bit_ops_test.cpython-36.pyc36840644editdlrm
lstm_benchmark.cpython-36.pyc72820644editdlrm
memonger.cpython-36.pyc321700644editdlrm
memonger_test.cpython-36.pyc231000644editdlrm
mkl_test_util.cpython-36.pyc11910644editdlrm
model_device_test.cpython-36.pyc33760644editdlrm
model_helper.cpython-36.pyc186180644editdlrm
model_helper_test.cpython-36.pyc19910644editdlrm
modifier_context.cpython-36.pyc26500644editdlrm
muji.cpython-36.pyc55660644editdlrm
muji_test.cpython-36.pyc35670644editdlrm
net_builder.cpython-36.pyc267860644editdlrm
net_builder_test.cpython-36.pyc92550644editdlrm
net_drawer.cpython-36.pyc100560644editdlrm
net_printer.cpython-36.pyc143670644editdlrm
net_printer_test.cpython-36.pyc33230644editdlrm
nomnigraph.cpython-36.pyc51250644editdlrm
nomnigraph_test.cpython-36.pyc145910644editdlrm
nomnigraph_transformations.cpython-36.pyc24310644editdlrm
nomnigraph_transformations_test.cpython-36.pyc40730644editdlrm
normalizer.cpython-36.pyc19410644editdlrm
normalizer_context.cpython-36.pyc15530644editdlrm
normalizer_test.cpython-36.pyc8700644editdlrm
numa_benchmark.cpython-36.pyc18860644editdlrm
numa_test.cpython-36.pyc16260644editdlrm
observer_test.cpython-36.pyc41810644editdlrm
operator_fp_exceptions_test.cpython-36.pyc13050644editdlrm
optimizer.cpython-36.pyc456060644editdlrm
optimizer_context.cpython-36.pyc20080644editdlrm
optimizer_test.cpython-36.pyc247470644editdlrm
optimizer_test_util.cpython-36.pyc68080644editdlrm
parallelize_bmuf_distributed_test.cpython-36.pyc69900644editdlrm
parallel_workers.cpython-36.pyc91480644editdlrm
parallel_workers_test.cpython-36.pyc38240644editdlrm
pipeline.cpython-36.pyc129400644editdlrm
pipeline_test.cpython-36.pyc27150644editdlrm
predictor_constants.cpython-36.pyc3040644editdlrm
python_op_test.cpython-36.pyc105020644editdlrm
queue_util.cpython-36.pyc50550644editdlrm
record_queue.cpython-36.pyc42250644editdlrm
recurrent.cpython-36.pyc98930644editdlrm
regularizer.cpython-36.pyc186040644editdlrm
regularizer_context.cpython-36.pyc15620644editdlrm
regularizer_test.cpython-36.pyc88250644editdlrm
rnn_cell.cpython-36.pyc447850644editdlrm
schema.cpython-36.pyc417630644editdlrm
schema_test.cpython-36.pyc137870644editdlrm
scope.cpython-36.pyc26000644editdlrm
scope_test.cpython-36.pyc40680644editdlrm
session.cpython-36.pyc73460644editdlrm
session_test.cpython-36.pyc23530644editdlrm
sparse_to_dense_mask_test.cpython-36.pyc52980644editdlrm
sparse_to_dense_test.cpython-36.pyc30030644editdlrm
task.cpython-36.pyc222070644editdlrm
task_test.cpython-36.pyc11780644editdlrm
test_util.cpython-36.pyc37290644editdlrm
text_file_reader.cpython-36.pyc22390644editdlrm
timeout_guard.cpython-36.pyc31060644editdlrm
toy_regression_test.cpython-36.pyc23600644editdlrm
transformations.cpython-36.pyc18330644editdlrm
transformations_test.cpython-36.pyc96080644editdlrm
tt_core.cpython-36.pyc64680644editdlrm
tt_core_test.cpython-36.pyc18240644editdlrm
utils.cpython-36.pyc122450644editdlrm
utils_test.cpython-36.pyc14160644editdlrm
visualize.cpython-36.pyc60270644editdlrm
workspace.cpython-36.pyc226900644editdlrm
workspace_test.cpython-36.pyc290550644editdlrm
_import_c_extension.cpython-36.pyc15240644editdlrm
__init__.cpython-36.pyc26070644editdlrm
Edit: /usr/local/lib64/python3.6/site-packages/caffe2/python/__pycache__/optimizer.cpython-36.pyc (45606B)
3 Eg3@sJddlZddlZddlmZmZddlZddlmZddl m Z m Z m Z m Z ddlmZddlmZdZedd d gZeeZd d d gZejeZddZGdddeZGdddeZGdddeZGdddeZGdddeZ GdddeZ!GdddeZ"GdddeZ#Gd d!d!eZ$Gd"d#d#eZ%Gd$d%d%eZ&Gd&d'd'eZ'Gd(d)d)eZ(Gd*d+d+eZ)Gd,d-d-eZ*d.d/Z+d[d0d1Z,d2d3Z-d4d5Z.d6d7Z/d\d:d;Z0dd?Z2d^d@dAZ3dBdCZ4d_dEdFZ5d`dHdIZ6dadJdKZ7dbdLdMZ8dcdNdOZ9dddPdQZ:dedRdSZ;dfdTdUZdS)iN) defaultdict namedtuple) caffe2_pb2)corescopeutils workspace)parameter_info) basestring lr_injectionAuxOptimizerParamslocalsharedZ SIMD_Q_FP16ZSIMD_Q_STOC_FP16ZSIMD_Q_STOC_MKL_FP16cCs tjdS)z This function clears the _optimizer_instance_count. And keeps it empty. This functionality is needed in some situations where optimizer instance count might not reset even though the workplace is reset. N)_optimizer_instance_countclearrrC/usr/local/lib64/python3.6/site-packages/caffe2/python/optimizer.pyreset_optimizer_instance_countsrc@seZdZddZd$ddZddZd%d d Zd d Zed dZ ddZ d&ddZ ddZ d'ddZ ddZeddZddZd d!Zd"d#ZdS)( OptimizercCsFtggd|_t|jj|_t|jjd7<d|_d|_d|_dS)N)r rF) r _aux_paramsr __class____name__ _instance_num_lr_multiplier_local_lr_multiplier_local_lr_multiplier_on_gpu)selfrrr__init__#s zOptimizer.__init__NcCsh|dkr2t|tjs"tdj||jdk sVtn$t|trFtj|}tjd||d}|j |||dS)Nz6Expected parameter to be of type ParameterInfo, got {})Zparam_idparamgrad) isinstancer Z ParameterInfoAssertionErrorformatr r rZ BlobReference_run)rnetparam_init_netrr rrr__call__4s    zOptimizer.__call__cCs tddS)NzNot Implemented) Exception)rr%r& param_inforrrr$AszOptimizer._runcCs|jj}d||j||fS)Nz%s_%d_%s%s_cpu)rrr)rbase_str node_name classnamerrrget_cpu_blob_nameDszOptimizer.get_cpu_blob_namecCs|jj}d||j|||fS)Nz%s_%d_%s%s_gpu%d)rrr)rr+Zgpu_idr,r-rrrget_gpu_blob_nameHszOptimizer.get_gpu_blob_namecCstj|j}|d=|S)Nr)copydeepcopy__dict__)rattrrrr attributesRs zOptimizer.attributescCsJtj}|dkr|j|Stj|jr8|j||j|jS|j||jSdS)zo Returns a blob name that will be unique to the current device and optimizer instance. N) rCurrentDeviceScoper.rIsGPUDeviceType device_typer/ device_idr,)rr+ current_scoperrrmake_unique_blob_nameYs  zOptimizer.make_unique_blob_namefixedrc Ks|dkr|jd}tj|||d}|j|sL|j|g|f| |d|} n |j|} |jdk r|j|j|jd} |j| | g|jddd} |j dk rt j } | dk rt j | jr|j r|j|j |jd} n|j } |j| | g|jd dd} | |fS) Nlr)iter_val)Zbase_lrpolicy lr_multiplierZ scaled_lrr) broadcastlocal_lr_multiplierZlocal_scaled_lr)r:rBuildUniqueMutexIter BlobIsDefinedZ LearningRateZ GetBlobRefrZCopyFromCPUInputMulrrr5rr6r7r) rr%r&base_learning_rateZlearning_rate_blobr>r=kwargs iterationr<r?r9rArrrbuild_lris@        zOptimizer.build_lrcCs ||_dS)z Set the global learning rate multiplier. If a multiplier already existed, this will overwrite the existing multiplier. The multiplier is used for all future calls to _run(), unless it is overwritten. N)r)rr?rrradd_lr_multiplierszOptimizer.add_lr_multiplierFcCs||_||_dS)a Set the local learning rate multiplier. This local multiplier is multiplied with the global learning rate multiplier if it exists. As with the global learning rate multiplier, this multiplier will be used for all future calls to _run(), so please call _clear_local_lr_multiplier() at the beginning of the optimizer's _run() before optionally calling this function. N)rr)rrA is_gpu_blobrrr_add_local_lr_multipliers z"Optimizer._add_local_lr_multipliercCsd|_d|_dS)NF)rr)rrrr_clear_local_lr_multipliersz$Optimizer._clear_local_lr_multipliercCs4t|tjstdj||r,|j||dS|SdS)Nz,Dedup only works for sparse gradient, got {})Z aggregator)r!r GradientSlicer"r#ZDeduplicateGradientSlices)r%sparse_dedup_aggregatorr rrrdedups   zOptimizer.dedupcCs|jS)axReturns a list of auxiliary parameters. Returns: aux_params: A namedtuple, AuxParams. aux_params.local stores a list of blobs. Each blob is a local auxiliary parameter. A local auxiliary parameter is a parameter in parallel to a learning rate parameter. Take adagrad as an example, the local auxiliary parameter is the squared sum parameter, because every learning rate has a squared sum associated with it. aux_params.shared also stores a list of blobs. Each blob is a shared auxiliary parameter. A shared auxiliary parameter is a parameter that is shared across all the learning rate parameters. Take adam as an example, the iteration parameter is a shared parameter, because all the learning rates share the same iteration parameter. )r)rrrrget_auxiliary_parameterssz"Optimizer.get_auxiliary_parameterscOs tddS)Nz9Optimizer Need to Implement `scale_learning_rate` method.)NotImplementedError)rargsrFrrrscale_learning_rateszOptimizer.scale_learning_ratecCsF|jgddg|d}|jgddg|d}|jgddg|d}|||fS)N weight_decayr)shapevaluetrustlr_max) ConstantFill)rr&rTrWrXwdrrrcreate_lars_inputss zOptimizer.create_lars_inputs)N)r*)Nr;r)F)r __module__ __qualname__rr'r$r.r/propertyr4r:rHrIrKrL staticmethodrOrPrSr[rrrrr"s"    6  rcs.eZdZd fdd Zdd Zd d ZZS) SgdOptimizer{Gz?r;TNc s<tt|j||_||_||_||_||_||_||_ dS)N) superr`rrEr>momentumnesterovrNlars init_kwargs)rrEr>rdrerNrfrF)rrrrs zSgdOptimizer.__init__cCsZ|j}|j}|jdkrdS|jdks4tdj|j|j|jdk rt|tj  r|jdksntdj|j|j |ddt j t j j\}}}|j|||||g|jt|d|jdd} tj} |j| | dk otj| jd|jrdnd } |j||f|j| |jd |j\} } tj}|dkr4tjtj}|jgd j|j|j|j d gdd }|j!j"j#||jdkr|j|t|d dd}|j!j$j#|t|tj r |j%||j&|}|jdkr|j'|j(|| ||j)g|j(||g|j|j*dn|j+|||j)|j(| g|nJ|jdkr>|j,||| |g|||g|j|j*dn| }|j-||||g|dS)Nrz*Expect positive base learning rate, got {}z'Lars offset must be nonnegative, got {}gg?_lars)offsetlr_min)rJr)rEr>z ONE_{}_{}{})rUrV _momentum)rV)rdre).blobr rEr"r#rLrfr!rrMr[npfinfofloat32maxLarsr:strrr5rKr6r7rdrHr>rg DeviceOptionrCPUrYr8r,rrappendr rOrNZSparseMomentumSGDUpdatevaluesindicesreZScatterWeightedSumMomentumSGDUpdate WeightedSum)rr%r&r)rr rZrWrXlr_lars_multiplierr9Zlr_signr<_devONE momentum_dataZcoeffrrrr$sx             zSgdOptimizer._runcCs|j|9_dS)N)rE)rscalerrrrSdsz SgdOptimizer.scale_learning_rate)rar;rbTNN)rr\r]rr$rS __classcell__rr)rrr`s \r`cs&eZdZd fdd Zdd ZZS) MultiPrecisionSgdOptimizer皙?r;TNc s&tt|jf|||||d|dS)N)rEr>rdrerN)rcrr)rrErdr>rerNrF)rrrrjs z#MultiPrecisionSgdOptimizer.__init__c Cs|j}|jdk r|jtjjnd}|dkr:tj||||S|j}|jdkrNdS|jdksht dj |j|j ||f|j |j d|j \}}|j|t|ddd} |jjj| t|tj st d|j||d} |j| | ||g| | |g|j|jd |j||dS) Nrz*Expect positive base learning rate, got {})rEr>rkg)rVz3MultiPrecisionSgd does not support sparse gradientsZ_fp32)rdre)rm blob_copyrDataTypeFLOATr`r$r rEr"r#rHr>rgrYrsrr rvr!rMZ HalfToFloatryrdre FloatToHalf) rr%r&r)r param_fp32r r<r|rZ grad_fp32rrrr$|s:    zMultiPrecisionSgdOptimizer._run)rrr;TN)rr\r]rr$rrr)rrris  rcs(eZdZd fdd Zd d d ZZS)FP16SgdOptimizer皙?r;T-C6?Nc s,tt|jf|||||d|||_dS)N)rEr>rdrerN)rcrrrT)rrErdr>rerTrNrF)rrrrs zFP16SgdOptimizer.__init__FcCsd}t|j}|jddkr d}|r6d}|j}|j}nt|jdkrRd}|j}|j}nXtjj|jkrv|j}|jtjj}n4tjj|jkr|jtjj}|j}ntdj |j |j } |j dkrdS|j dkstdj |j |j ||f|j |jd|j\} } |j|t|dd d } |j| t|d } |jjj| t| tj sPtd |dkr|j| | | |g| | |g|j|j|jd n(|j| | | |g| | |g|j|j|jd dS)NrZspatbnrTzLUnrecognized parameter format to be updated by FP16 Optimizer. Parameter: {}z*Expect positive base learning rate, got {})rEr>Z_momentum_fp32g)rVrkz)FP16Sgd does not support sparse gradients)rdrerTrl)rsrmfindrrrrZFLOAT16r"r#namer rErHr>rgrYrrr rvr!rMZFP16MomentumSGDUpdaterdrerTZFP32MomentumSGDUpdate)rr%r&r)Z fp32_updateZfp32_update_flag param_namerrr r<r|Zmomentum_data_fp32rrrrr$sj         zFP16SgdOptimizer._run)rrr;TrN)F)rr\r]rr$rrr)rrrs rc@seZdZddZddZdS)WeightDecayBuildercCs ||_dS)N)rT)rrTrrrrszWeightDecayBuilder.__init__cCstj}|dkrtjtj}|jgdj|j|j dgdd}|jgdj|j|j dg|j d}t |j tj rvtdn|j|j ||j|g|j dS)Nz ONE_{}_{}rg?)rUrVzwd_{}_{}z2Weight decay does not yet support sparse gradients)rr5rrtrrurYr#r7r8rTr!r rM ValueErrorrzrm)rr%r&r)r}r~ZWDrrrr$s   zWeightDecayBuilder._runN)rr\r]rr$rrrrrsrcsFeZdZdfd d Zd d Zd dZddZddZddZZ S)AdagradOptimizer{Gz?-C6?rr;NFr*c sx(tjD]\}}tjdj||q Wtt|j||_||_ ||_ t ||_ ||_ ||_||_||_| |_| |_| |_||_||_||_|j| |j| |j|dS)Nz)AdagradOptimizer: input arguments: {}: {})localsitemsloggerinfor#rcrralphaepsilondecayfloatrTr>rNrowWiseenginerfoutput_effective_lroutput_effective_lr_and_updatecounter_halfliferg weight_scale_process_pruning_options_process_swa_options_process_ema_options)rrrrrTr>rNrrrfrrpruning_options swa_options ema_optionsrrrFkv)rrrr7s(   zAdagradOptimizer.__init__cCs^|rdnd|_|jrZ|jdd|_|jdd|_|jdd|_|jdd|_|jdd|_dS)NTFswa_avg_start_itswa_avg_end_itswa_feedback_start_itswa_feedback_stepswa_feedback_end_it) swa_enabledgetrrrrr)rrrrrrbsz%AdagradOptimizer._process_swa_optionscCsP|rdnd|_|jrL|jdd|_|jdd|_|jdd|_|jdd|_dS)NTF ema_startema_endema_step ema_alpha) ema_enabledrrrrr)rrrrrrks z%AdagradOptimizer._process_ema_optionscCsd|_|dkri}nt|ts,tdj||jdd|_|jdd|_|jdd|_|jdd|_ |jdg|_ |jdg|_ |jd d |_ |jdk rt |jtjkstd |jdkstd |jdkstd |j dkstd d |_|jdk p|jdk rD|jdk std|jdk s*td|jdks>td d |_|j r|j dk rnt|j t|j ksvtd|jdkstd|jdkstdd |_dS)NFzCpruning_options can only be provided as a dictionary, currently: {} mask_tensor mask_db_path mask_db_typemask_blob_name prune_delays prune_ratiosprune_block_sizerz"mask_tensor must be a numpy array!zHmask can be provided through either a numpy array or a db path, not bothTzPwhen mask is provided through db, db path, db type, and blob name are all neededz:Prune Delays and prune ratios should be of the same lengthz,Mask Tensor should be None with prune ratiosz-Mask DB Path should be None with prune ratios)use_maskr!dictr"r#rrrrrrrrtypernZndarraylen)rrrrrrssP     z)AdagradOptimizer._process_pruning_optionsc Csh |j}|j}|jdkrdS|j|jdk rt|tj r|jdksLt d|jdksft dj |j|j |ddt j t jj\}}}|j|||||g|jt|d|jdd} tj} |j| | dk otj| jd|j||f|j|jd |j\} } | } |jdkr|jjj| |jrt j!d j |j"|t#j$|g\}}t||kr|j%|t|d }|j&|gt|d dgd gd}|j'|t|dd dd}n(|j'gt|d|t|dgdd}nt j!dj |j"||j"t(krX|jdks t dj |j"t#j$|g\}}t||ks0t ||t|}|j)gt|dd|d}n|j'|gt|ddd}|j*dkr(|jdkst d|j+dk r:t|tjs|j,gt|dg|j+|j+j-d}nh|j+j.t j/|_+|j0gt|dg|j+|j+j-d}|j1|tj2j3d}|j'gt|dgdtj2j4d gd}n|j5dk sR|j6dk r|j7pdt|d|_7|j8g|j7|j5|j6dd}t|tjr(|j'gt|dgdtj2j4d gd}nr|j9r |j'gt|d gdDtj2j:d gd}t|tjrt d!n$|j,gt|d"ggtj2j;dgd#}ntd&}|j'|t|d'd dtj2j:d&}n\|j'gt|d%|t|dgdtj2j>d(}|j'gt|d'|t|dgdtj2j:d(}|jj=j||jj=j||jrlt|tjslt d)t#j$|g\}}|t|}d}t|tjrt?|d krd}t j@d*j t||n|j}n0t?|d krd}t j@d+j t||n|j}t j!d,j t|||t|tjr|jAdks6t d-|jB||jC|}|||jD|jE| g}||g}|jr|j*dkrd.}|dkst d/j ||||g7}n|jdkr||g7}d0}n:|j*dkrd1}|dkst d/j ||||g7}nd2}t j!d3j |t||j9r*|| |g7}|||g7}|dkr^|jdEkr^|jF||||jG||j"d4nR|dkr|jdFkr|jF||||jG||j"|jd5n|jF||||jG|j"d6|jdk r|jH|||jD| g||g|jd7n|||| g}||g}|jIr6|j*dkst d8|jt|d9|jt|d:n.|jJrd|j*dksRt d;|jt|d9|j*dkrz||g7}|j9r|| |g7}|||g7}|j*r|dkst d|jK|||jGtL|jA|jM|j9|jN|j"d<n|dk r |jO|||jGtL|jA||j"d=n|jO|||jGtL|jA|j"d>|jP rt|d?}|jQ| sj|j'|g|dd|jj=j||jR||| g||g|jS|jT|jU|jV|jWd@|jX rt|dA}|jQ| s|j'|g|dd|jj=j||jY||| g||g|jZ|j[|j\|j]dB|j^ rd|j_|| g|g|j^j`|j^jatL|j^jbdC|j^jc rd|j_|| g|g|j^j`|j^jatL|j^jbdCdS)GNrz,weight decay is not implemented for LARS yetz'Lars offset must be nonnegative, got {}gg?rh)rirj)rJ)rEr>z5Using engine {} for rowWise Adagrad to train param {}Z_shapeZ_numrowsr)ZstartsZendsZ_avg_squared_sum)input_as_shaperV)rUrVz5Using engine {} for regular Adagrad to train param {}z)weight decay is not tested for engine: {} _squared_sum)rVrU)rVTz0weight decay is not implemented for use_mask yetZ_mask)rwrU)ZtoZ_mask_changed_blobF)rVdtyperU)dbZdb_typeZ absolute_pathZ_last_mask_updated_iterzMPrune Delays and Prune Ratios are currently not supportedfor sparse operatorsZ _empty_mask)rwrrUzXIf mask is used, it needs a numpy array or a db file ora delay iter needs to be providedZ_update_counter)rrVrZ_prev_update_iter)rUrVrzIf SparseAdagrad with rowWise=True, gradient must be a gradientslice. PLease ensure that rowWise is not enabled for the dense Adagrad optimizer, as it is not supported.z8SKIPPING weight decay on 1d sparse param: {}.shape is {}z7SKIPPING weight decay on 1d dense param: {}.shape is {}z"weight_decay for {} (shape:{}): {}z?Decay is not implemented for SparseAdagrad and must be set to 1ZMaskedRowWiseSparseAdagradz*weight decay is not implemented for {} yetZRowWiseSparseAdagradZMaskedSparseAdagrad SparseAdagradzusing {} for {})rrTr)rrTrr)rr)rz@MaskedAdagrad doesn't support outputting effective_lr_and_update _effective_lr_updatez5MaskedAdagrad doesn't support outputting effective_lr)rr block_sizeZdelaysrr)rrrTr)rrrZ_swa)Z avg_startZavg_endZfeedback_startZ feedback_stepZ feedback_end_ema)rrrr)stepsizeupper_bound_iterrrlrlrl)drmr rrLrfr!rrMrTr"r#r[rnrorprqrrr:rsrr5rKr6r7rHr>rgrrrrvrrrrrInferShapesAndTypesZShapeSlicerY FP16_ENGINESZFloat16ConstantFillrrZGivenTensorFillrUZastypeZuint8ZGivenTensorBoolFillZCastrZUINT8ZBOOLrrrLoadrINT64rrQr ZDOUBLErwarnrrOrNrxrw __getattr__rZRowWiseCounterrrZ MaskedAdagradrrrZAdagradrrCZSWArrrrrrEMArrrrrZ WeightScalerrrZto_aux) rr%r&r)rr rZrWrXr{r9r<Z lr_iterationrGshapestypesrUZnum_rowsparam_squared_sumZ mask_blobZmask_changed_blobZlast_mask_updated_iterZupdate_counterZprev_update_iterr|Z param_shaperTZ input_args output_argsopZ param_swa param_emarrrr$s\                                                                  zAdagradOptimizer._runcCs|j|9_dS)N)r)rrrrrrSVsz$AdagradOptimizer.scale_learning_raterl)rrrrr;NFr*NFFNNNNrl) rr\r]rrrrr$rSrrr)rrr6s0 @&rc s.eZdZdfdd Zd d Zd d ZZS)WngradOptimizer?& .>r;Nr*Y@Fc  sNtt|j||_||_||_||_||_||_||_ ||_ | |_ | |_ dS)N) rcrrrrr>rNr moment_initrfrrrg) rrrr>rNrrrfrrrF)rrrr\s zWngradOptimizer.__init__cCs|j}|j}|jdkrdS|j|jdk rt|tj r|jdksTtdj |j|j |ddt j t j j\}}}|j|||||g|jt|d|jdd} tj} |j| | dk otj| jd|j||f|j|jd|j\} } |jgt|d d g|jd } |jjj| t|tjr^|j||j |}|j!|| |j"|j#| g|| g|j$|j%d nn|| g}|j&r|jt|d |jt|dn|j'r|jt|d |j(|| || g||j$|j%d dS)Nrz'Lars offset must be nonnegative, got {}gg?rh)rirj)rJ)rEr>_momentr)rUrV)rrrr))rmr rrLrfr!rrMr"r#r[rnrorprqrrr:rsrr5rKr6r7rHr>rgrYrrr rvrOrNZ SparseWngradrxrwrrrrZWngrad)rr%r&r)rr rZrWrXr{r9r<r|momentrrrrr$us^     zWngradOptimizer._runcCs|j|9_dS)N)r)rrrrrrSsz#WngradOptimizer.scale_learning_rate) rrr;Nr*rNFF)rr\r]rr$rSrrr)rrr[sDrcs.eZdZd fdd Zdd Zd d ZZS) StormOptimizer皙?$@{Gz?r;Nc  sBtt|j||_||_||_||_||_||_||_ ||_ dS)aConstructor function to add STORM Optimizer Args: lr: learning rate scaling (called k in the original paper) momentum: momentum scaling (called c in the original paper) beta: initial value of denominator in adaptive learning rate ( called c in the original paper) grad_sq_init: initial value of gradient squared accumulator. policy: specifies how learning rate should be applied, options are 'fixed', 'step', 'exp', etc. sparse_dedup_aggregator: specifies deduplication strategy for gradient slices. Works while using sparse gradients. Options include 'mean' and 'sum'. lars: lars offset. N) rcrrr<rdbeta grad_sq_initr>rNrfrg) rr<rdrrr>rNrfrF)rrrrszStormOptimizer.__init__cCs|j}|j}|jdkrdS|j|jdk rt|tj r|jdksTtdj |j|j |ddt j t j j\}}}|j|||||g|jt|d|jdd} tj} |j| | dk otj| jd|j||f|j|jd|j\} } |j|t|d dd } |jjj| |jgt|d d g|jd }|jjj|t|tjr|j||j |}|j!|| ||j"|j#| g|| |g|j$|j%dn&|j&|| ||| g|| |g|j$|j%ddS)Nrz'Lars offset must be nonnegative, got {}gg?rh)rirj)rJ)rEr>r)rVZ _grad_sq_sumr)rUrV)rdr)'rmr r<rLrfr!rrMr"r#r[rnrorprqrrr:rsrr5rKr6r7rHr>rgrYrr rvrrOrNZ SparseStormrwrxrdrZStorm)rr%r&r)rr rZrWrXr{r9r<r|rZ grad_sq_sumrrrr$sV     zStormOptimizer._runcCs|j|9_dS)N)r<)rrrrrrS"sz"StormOptimizer.scale_learning_rate)rrrrr;NN)rr\r]rr$rSrrr)rrrs?rcs.eZdZd fdd Zd d Zd d ZZS)AdadeltaOptimizer{Gz?-C6?ffffff?r;Nr*c s<tt|j||_||_||_||_||_||_||_ dS)auConstructor function to add Adadelta Optimizer Args: alpha: learning rate epsilon: attribute of Adadelta to avoid numerical issues decay: attribute of Adadelta to decay the squared gradient sum policy: specifies how learning rate should be applied, options are "fixed", "step", "exp", etc. sparse_dedup_aggregator: specifies deduplication strategy for gradient slices. Works while using sparse gradients. Options include "mean" and "sum". engine: the engine used, options include "", "CUDNN", etc. N) rcrrrrrr>rNrrg)rrrrr>rNrrF)rrrr'szAdadeltaOptimizer.__init__c Cs |j}|j}|jdkrdS|j||f|j|jd|j\}}|j|gt|ddd}|j|gt|ddd} |jj j ||jj j | t |t j r|j||j|}|j||| |j|j|g||| g|j|j|jdn*|j||| ||g||| g|j|j|jddS)Nr)rEr>Z_squared_momentg)rVZ_squared_moment_update)rrr)rmr rrHr>rgrYrsrr rvr!rrMrOrNZSparseAdadeltarxrwrrrZAdadelta) rr%r&r)rr r<r|rZ moment_updaterrrr$Gs<    zAdadeltaOptimizer._runcCs|j|9_dS)N)r)rrrrrrSssz%AdadeltaOptimizer.scale_learning_rate)rrrr;Nr*)rr\r]rr$rSrrr)rrr&s,rcs.eZdZd fdd Zdd Zd d ZZS) FtrlOptimizer{Gz?-C6?rNr*cs6tt|j||_||_||_||_||_||_dS)N) rcrrrrlambda1lambda2rNr)rrrrrrNr)rrrrys zFtrlOptimizer.__init__c Cs|j}|j}|jdkrdS|j|gt|ddgdd}|jjj|t|t j r|j ||j |}|j |||j|jg||g|j|j|j|j|jdn,|j|||g||g|j|j|j|j|jddS)NrZ_ftrl_nzg) extra_shaperV)rrrrr)rmr rrYrsrr rvr!rrMrOrNZ SparseFtrlrxrwrrrrZFtrl)rr%r&r)rr nzrrrr$s2   zFtrlOptimizer._runcCs|j|9_dS)N)r)rrrrrrSsz!FtrlOptimizer.scale_learning_rate)rrrrNr*)rr\r]rr$rSrrr)rrrxs !rcs2eZdZdZd fdd Zd d Zd d ZZS)GFtrlOptimizerzGroup Lasso FTRL Optimizer.{Gz?-C6?rNr*cs6tt|j||_||_||_||_||_||_dS)N) rcrrrrrrrNr)rrrrrrNr)rrrrs zGFtrlOptimizer.__init__c Csv|j}|j}|jdkrdS|j|gt|ddgdd}|jjj||j|||g||g|j |j|j |j |j ddS)NrZ _gftrl_nzrg)rrV)rrrrr) rmr rrYrsrr rvZGFtrlrrrr)rr%r&r)rr rrrrr$s zGFtrlOptimizer._runcCs|j|9_dS)N)r)rrrrrrSsz"GFtrlOptimizer.scale_learning_rate)rrrrNr*)rr\r]__doc__rr$rSrrr)rrrs rc s.eZdZdfd d Zd dZddZZS) AdamOptimizerMbP??+?:0yE>r;F{Gz?TNr*c stt|j||_||_||_||_||_||_||_ ||_ | |_ | |_ | |_ | |_| r~| rftd| rrtd|r~td| |_||_dS)NzZSmart decay is not implemented for rowWise Adam. Set rowWise or use_smart_decay to False.zWSmart decay is not implemented for RAdam. Set enableRAdam or use_smart_decay to False.zbSmart decay is not implemented with lr_adaption. Set use_lr_adaption or use_smart_decay to False.)rcrrrbeta1beta2rr>use_lr_adaptionlr_alphanormalized_lr_adaptionrNrr enableRAdamrQuse_smart_decayrg)rrrrrr>rrrrNrrrrrF)rrrrs,zAdamOptimizer.__init__c Cs|j}|j}|jdkrdS|j||f|j|jd|j\}}|j|g|ddd}|jrtj |g\} } |jg|d| |dgdd} n|j|g|ddd} |j rtj |g\} } |jg|d | |dgdt j j d } |jjj| |jjj||jjj||jjj| |jr4t|t js4td ||| g}|j rP|j| |jrnt|d }|j|t|t jr|j||j|}|jrd }n|j rd}nd}|dkr|j|||| |j|j||g||j|j|j|jdn|dkr*|j|||| | |j|j||g||j|j|jdnB|j sZ _first_momentg)rVZ_avg_second_moment)rUrV_second_momentZ _last_seen)rUrVrzIf SparseAdam with rowWise=True, gradient must be a gradientslice. PLease ensure that rowWise is not enabled for the dense Adam optimizer, as it is not supported.Z_effective_gradZRowWiseSparseAdamZSmartDecaySparseAdamZ SparseAdam)rrrr)rrrz7Currently, RowWiseSparseAdam is not supported by RAdam!)rr)$rmr rrHr>rgrYrrrrrrrrr rvrr!rMr"rrsrOrNrrxrwrrrrZLearningRateAdaptionrrZAdam)rr%r&r)rr r<rGm1rrm2r|Z last_seen output_blobsZeffective_gradrrrrr$ s "             zAdamOptimizer._runcCs|j|9_dS)N)r)rrrrrrSsz!AdamOptimizer.scale_learning_rate) rrrrr;FrTNFr*FF)rr\r]rr$rSrrr)rrrsvrc s6eZdZdfd d Zd d Zd dZddZZS)DecayAdagradOptimizer{Gz?+?皙?NTr;r*c  sRtt|j||_||_||_||_||_||_||_ | |_ | |_ |j |dS)N) rcr rrrrrrTbias_correction_firstr>rrgr) rrrrrrTrrr>rrF)rrrrs zDecayAdagradOptimizer.__init__cCsP|rdnd|_|jrL|jdd|_|jdd|_|jdd|_|jdd|_dS)NTFrrrr)rrrrrr)rrrrrrs z*DecayAdagradOptimizer._process_ema_optionsc Cs|j}|j}|jdkrdS|j||f|j|jd|j\}}t|tjr|j |g|ddd}|j j j |||g} |j |||j|j|g| |jdn|j |g|ddd} |j |g|ddd} |j jj ||j j j | |j j j | || | g} |j|| | |||g| |j|j|j|j|jd |jrt|d } |j| sf|j |g| dd|j j j | |j|| |g|| g|j|j|j|jd dS) Nr)rEr>rg)rV)rZ_first_mo1mentr)rrrrTrr)rrrr)rmr rrHr>rgr!rrMrYrr rvrrxrwrrZ DecayAdagradrrrTrrrsrCrrrrr) rr%r&r)rr r<rGrr rr rrrrr$sX       zDecayAdagradOptimizer._runcCs|j|9_dS)N)r)rrrrrrSsz)DecayAdagradOptimizer.scale_learning_rate) r r rrr NTr;r*)rr\r]rrr$rSrrr)rrr s9r cs2eZdZdZdfd d Zd d ZddZZS)YellowFinOptimizerzYellowFin: An automatic tuner for momentum SGD See https://arxiv.org/abs/1706.03471 for more details. This implementation has separate learning rate and momentum per each parameter.皙?+?Tr;Nc  sHtt|j||_||_||_||_||_||_||_ ||_ | |_ dS)N) rcrrrmurcurv_win_width zero_debiasrr>rNrg) rrrrrrrr>rNrF)rrrrs zYellowFinOptimizer.__init__cCsd}|j}|j}|j|g|ddd}|jg|d|jgdd}|j|g|ddd} |j|g|ddd} |jg|d d g|jd} |jg|d d g|jd} |jg|d |gdd} |jd kstt|tj  stdt j ||d d}|j j j||j jj||j jj| |j jj| |j jj||j jj| |j jj| |j jj| ||| | || | | g}|j|||g||j|j|j|jddS)Nrg)rVZ _curv_win)rUrVZ_g_avgZ_g2_avgZ_lr_avgrZ_mu_avgZ_scalars_memoryrz+YellowFin does not support sparse gradients)r=)rrrr)rmr rYrrrr"r!rrMrrBrrrvr Z YellowFinrrr)rr%r&r)ZSCALARS_MEMORY_SIZErr rZcurv_winZg_avgZg2_avgZlr_avgZmu_avgZscalars_memoryrGZyf_in_out_argsrrrr$sT zYellowFinOptimizer._runcCs|j|9_dS)N)r)rrrrrrS>sz&YellowFinOptimizer.scale_learning_rateư>)rrrrTrr;N)rr\r]rrr$rSrrr)rrrs=rcs.eZdZd fdd Zd d Zd d ZZS)RmsPropOptimizer{Gz??h㈵>r;r*c s<tt|j||_||_||_||_||_||_||_ dS)N) rcrrrrrdrr>rrg)rrrrdrr>rrF)rrrrDs zRmsPropOptimizer.__init__c CsF|j}|j}|jdkstt|tj s0tdtj}|dkrLtj t j }|j gdj |j|jdgdd}|j||f|j |jd|j\}} |j |gt|dd d } |j |gt|d d d } |j |gt|d d d } |jjj| |jjj| |j|| | |g| | | g|j|j|j|jd |j| | ||g| | |gdS)Nrz1RmsPropOptimizer doesn't support sparse gradientsz ONE_{}_{}rg?)rUrV)rEr>Z_grad_og)rwZ _mean_squaresrk)rrdrr)rmr rr"r!rrMrr5rtrrurYr#r7r8rHr>rgrsrr rvZRmsProprrdrrry) rr%r&r)rr r}r~r<r|Zgrad_omsZmomrrrr$Ws@   zRmsPropOptimizer._runcCs|j|9_dS)N)r)rrrrrrSsz$RmsPropOptimizer.scale_learning_rate)rrrr r;r*)rr\r]rr$rSrrr)rrrCs 1rcCs"tj|j}|jtj|j|S)N)rZInferBlobDevicesr%updater&)modelparam_to_devicerrr_get_param_to_devices r%cCs|}|p i}||kr||}ndt|tjrj|}t|j|krL|t|j}qt|j|kr|t|j}nt|}||kr||}|dk stdj||S)Nz,Cannot infer device for {}: no op creates it)r!rrMrsrwrxr"r#)rr r$Zdefault_devicedeviceZ grad_namerrrget_param_devices   r'cCs tjtS)z Gets current value for lr_injection, a multiplier for all base learning rates. Must set allow_lr_injection=True when building optimizer, as it relies on synchronization over CPU. )rZ FetchBlob_LEARNING_RATE_INJECTIONrrrrget_lr_injectionsr)cCs"tjttjt|gtjddS)z Sets lr_injection, a multiplier for all base learning rates. Must set allow_lr_injection=True when building optimizer, as it relies on synchronization over CPU. )rN)rZFeedBlobr(rnarrayrrp)Zlr_injection_valuerrrset_lr_injectionsr+cCs$tj|g}xt|D]|\}}tt|j|j|}tj|Pt|jtj sX|jn|jj } dj |} |j j | | } |j j| } |j| WdQRXqWtjtjtjb|j j|d} |j j| ddd}|jjgdgt|d}|j j||gd}|j j||gd }|SQRXWdQRXdS) Nzgrad_{}_squared_sumgrad_squared_full_sum global_normg?)exponent clip_norm)rUrVmax_norm norm_ratio)rZ NameScope enumerater'rsrmr DeviceScoper!rMrwr#r%ZSumSqrElementsZEnsureCPUOutputrvrtrruZSumPowr&rYrZMaxDiv)r#paramsZ name_scoper$max_gradient_normZgrad_squared_sumsirr&r Zgrad_squared_sum_nameZgrad_squared_sumZgrad_squared_sum_cpur,r-r/r0r1rrr_calc_norm_ratios*    r9FTc Cs(t|}|jg}x,|jD] }|r4|j|jkr4q|j|qWd} |dk r^t||d||} |r|jjt s|j j gt dgdd} nt } | dkr| } n|jj | | gddd} |j | xj|D]b}t|j} t| |j|} tj| 6|jo|r|j|j|j |n||j|j |WdQRXqW|S)NZnorm_clipped_grad_updaterg?)rUrVr?)r@)r%ZValidateZGetOptimizationParamInformweightsrvr9r%rCr(r&rYrDrIrsr'r rr3 optimizer) r#r; weights_onlyuse_param_info_optimr7allow_lr_injectionr$r6r)r?r rr&rrr_buildsB      r?cCst|t|dddddS)zAdds a decay to weights in the model. This is a form of L2 regularization. Args: weight_decay: strength of the regularization )rTTF)r<r=N)r?r)r#rTrrradd_weight_decays r@cKst|f|}t||||dS)N)r7r>)r`r?)r#rEr7r>rFZ sgd_optimizerrrr build_sgd.s  rAcKst|f|}t||||dS)N)r7r>)rr?)r#rEr7r>rFZmulti_prec_sgd_optimizerrrrbuild_multi_precision_sgd>s  rBcKst|f|}t||S)N)rr?)r#rErFZfp16_sgd_optimizerrrrbuild_fp16_sgdNs rCSIMDcKs@|dkr$tjdsttjds$ttfd|i|}t||S)NrDZFtrl_ENGINE_SIMDZSparseFtrl_ENGINE_SIMDr)r IsOperatorr"rr?)r#rrFZftrl_optimizerrrr build_ftrlSs rFr*cKs2|dkrtjdsttfd|i|}t||S)NrDZGFtrl_ENGINE_SIMDr)rrEr"rr?)r#rrFZgftrl_optimizerrrr build_gftrl[srGcKs"tfd|i|}t||||dS)Nr)r7r>)rr?)r#rE parametersr7r>rFZadagrad_optimizerrrr build_adagradbs rIcKs"tfd|i|}t||||dS)Nr)r7r>)rr?)r#rErHr7r>rFZwngrad_optimizerrrr build_wngradss rJcKs"tfd|i|}t||||dS)Nr<)r7r>)rr?)r#rErHr7r>rFZstorm_optimizerrrr build_storms rKcKs"tfd|i|}t||||dS)Nr)r7r>)rr?)r#rErHr7r>rFZadadelta_optimizerrrrbuild_adadeltas rLcKs"tfd|i|}t||||dS)Nr)r7r>)rr?)r#rEr7r>rFZadam_optimizerrrr build_adams rMcKs"tfd|i|}t||||dS)Nr)r7r>)r r?)r#rEr7r>rFZdecay_adagrad_optimizerrrrbuild_decay_adagrads rN皙?cKstfd|i|}t||S)Nr)rr?)r#rErFZyellowfin_optimizerrrrbuild_yellowfinsrPcKs"tfd|i|}t||||dS)Nr)r7r>)rr?)r#rEr7r>rFZrms_prop_optimizerrrrbuild_rms_props rQ)NN)FTNF)NF)NF)rD)r*)NNF)NNF)NNF)NNF)NF)NF)rO)NF)?r0logging collectionsrrZnumpyrnZ caffe2.protorZ caffe2.pythonrrrrZcaffe2.python.modelingr Z past.builtinsr r(r intrr getLoggerrrrobjectrr`rrrrrrrrrrr rrr%r'r)r+r9r?r@rArBrCrFrGrIrJrKrLrMrNrPrQrrrrs      SuFl)chR8.(__J   $ 2