o
    ?e                     @   s   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddl	mZ dd	lmZ dd
lmZ 		dddZdddZ				dddZdS )z.A simple network to use in tests and examples.    )dataset_ops)step_fn)strategy_test_lib)constant_op)ops)core)normalization)	array_ops)math_opsF   c                    sB   dd }|  }t jd|d  fdd}t|||||}| fS )z9Build a very simple network to use in tests and examples.c                   S   s   t jdgg S N      ?)r   Datasetfrom_tensorsrepeat r   r   q/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/tensorflow/python/distribute/single_loss_example.py
dataset_fn    s   z'single_loss_example.<locals>.dataset_fnr   use_biasc                    s$   ~ t  |g td }|| S r   r	   Zreshaper   constant)ctxxylayerr   r   loss_fn&   s   z$single_loss_example.<locals>.loss_fn)r   Denser   ZStandardSingleLossStep)optimizer_fndistributionr   Ziterations_per_stepr   	optimizerr   Zsingle_loss_stepr   r   r   single_loss_example   s   
r"   Tc                    s0   dd }t jd|d  fdd}|| fS )z.Example of non-distribution-aware legacy code.c                  S   s"   t jdgg } | jdddS )Nr   r   T)Zdrop_remainder)r   r   r   r   batch)Zdatasetr   r   r   r   5   s   z)minimize_loss_example.<locals>.dataset_fnr   r   c                    sF    fdd}t r|fddS r|S | S )z(A very simple model written by the user.c                     s"   t  g td } | |  S r   r   )r   )r   r   r   r   r   @   s   z8minimize_loss_example.<locals>.model_fn.<locals>.loss_fnc                          j S NZtrainable_variablesr   r   r   r   <lambda>E       z9minimize_loss_example.<locals>.model_fn.<locals>.<lambda>r   Zis_optimizer_v2_instanceZminimizer   r   r   r!   use_callable_lossr   r   model_fn=   s   

z'minimize_loss_example.<locals>.model_fn)r   r   )r!   r   r,   r   r.   r   r+   r   minimize_loss_example2   s   
r/   ?c                    sL    fdd}|  t j||ddtjdddfdd}||fS )	zGExample of non-distribution-aware legacy code with batch normalization.c                      s   t jdd t D  S )Nc                    s"   g | ]  fd dt dD qS )c                    s$   g | ]  fd dt dD qS )c                    s$   g | ]}t  d  | d  qS )   d   )float).0r   )r   zr   r   
<listcomp>X   s    zObatchnorm_example.<locals>.dataset_fn.<locals>.<listcomp>.<listcomp>.<listcomp>r1   ranger4   r5   r-   r   r6   X   s
    
zDbatchnorm_example.<locals>.dataset_fn.<locals>.<listcomp>.<listcomp>   r7   r9   r   r:   r   r6   X   s
    

z9batchnorm_example.<locals>.dataset_fn.<locals>.<listcomp>)r   r   Zfrom_tensor_slicesr8   r   r   )batch_per_epochr   r   r   U   s   z%batchnorm_example.<locals>.dataset_fnF)renormmomentumZfusedr   r   c                    s:    fdd}t r|fddS |S )zA model that uses batchnorm.c                     sl    dd} t rt t jjng  tt| t	d }W d    |S 1 s/w   Y  |S )NT)Ztrainingr   )
r   Zcontrol_dependenciesZget_collectionZ	GraphKeysZ
UPDATE_OPSr
   Zreduce_meanZ
reduce_sumr   r   )r   Zloss)	batchnormr   update_ops_in_replica_moder   r   r   r   e   s   
z4batchnorm_example.<locals>.model_fn.<locals>.loss_fnc                      r$   r%   r&   r   r   r   r   r'   p   r(   z5batchnorm_example.<locals>.model_fn.<locals>.<lambda>r)   r*   )r?   r   r!   r@   r-   r   r.   b   s   


z#batchnorm_example.<locals>.model_fn)r   ZBatchNormalizationr   r   )r   r<   r>   r=   r@   r   r.   r   )r<   r?   r   r!   r@   r   batchnorm_exampleN   s   
rA   N)Fr   )FT)r   r0   FF)__doc__Ztensorflow.python.data.opsr   Ztensorflow.python.distributer   r   Ztensorflow.python.frameworkr   r   Ztensorflow.python.layersr   r   Ztensorflow.python.opsr	   r
   r"   r/   rA   r   r   r   r   <module>   s&   

