o
    i 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   _/var/www/myenv/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	   reshaper   constant)ctxxylayerr   r   loss_fn&   s   z$single_loss_example.<locals>.loss_fn)r   Denser   StandardSingleLossStep)optimizer_fndistributionr   iterations_per_stepr   	optimizerr   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)drop_remainder)r   r   r   r   batch)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trainable_variablesr   r   r   r   <lambda>E       z9minimize_loss_example.<locals>.model_fn.<locals>.<lambda>r   is_optimizer_v2_instanceminimizer   r   r   r$   use_callable_lossr   r   model_fn=   s   

z'minimize_loss_example.<locals>.model_fn)r   r   )r$   r   r5   r   r7   r   r4   r   minimize_loss_example2   s   
r8   ?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>r:   ranger=   r>   r6   r   r?   X   s
    
zDbatchnorm_example.<locals>.dataset_fn.<locals>.<listcomp>.<listcomp>   r@   rB   r   rC   r   r?   X   s
    

z9batchnorm_example.<locals>.dataset_fn.<locals>.<listcomp>)r   r   from_tensor_slicesrA   r   r   )batch_per_epochr   r   r   U   s   z%batchnorm_example.<locals>.dataset_fnF)renormmomentum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)trainingr   )
r   control_dependenciesget_collection	GraphKeys
UPDATE_OPSr
   reduce_mean
reduce_sumr   r   )r   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>r0   r3   )rR   r   r$   rS   r6   r   r7   b   s   


z#batchnorm_example.<locals>.model_fn)r   BatchNormalizationr   r   )r!   rF   rH   rG   rS   r   r7   r   )rF   rR   r   r$   rS   r   batchnorm_exampleN   s   
rU   N)Fr   )FT)r   r9   FF)__doc__tensorflow.python.data.opsr   tensorflow.python.distributer   r   tensorflow.python.frameworkr   r   tensorflow.python.layersr   r   tensorflow.python.opsr	   r
   r&   r8   rU   r   r   r   r   <module>   s&   

