
    AVh                         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ZddZ	 	 	 	 ddZy)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_opsc                     d } |        }t        j                  d|      fd}t        j                  |||||      }|fS )z9Build a very simple network to use in tests and examples.c                  `    t         j                  j                  dgg      j                         S N      ?)r   Datasetfrom_tensorsrepeat     `/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/distribute/single_loss_example.py
dataset_fnz'single_loss_example.<locals>.dataset_fn    s&    ++bTF3::<<r      use_biasc                 t    ~ t        j                   |      g       t        j                  d      z
  }||z  S r   r
   reshaper   constant)ctxxylayers      r   loss_fnz$single_loss_example.<locals>.loss_fn&   s5    %(B'+*>*>r*BBAq5Lr   )r   Denser   StandardSingleLossStep)	optimizer_fndistributionr   iterations_per_stepr   	optimizerr"   single_loss_stepr!   s	           @r   single_loss_exampler*      sS    = n)
**Q
*%
 33'9l4GI 
5	  r   c                 T     d }t        j                  d|       fd}||fS )z.Example of non-distribution-aware legacy code.c                      t         j                  j                  dgg      j                         } | j	                  dd      S )Nr   r   T)drop_remainder)r   r   r   r   batch)datasets    r   r   z)minimize_loss_example.<locals>.dataset_fn5   s:    !!..v6==?G ==4=00r   r   r   c                       fd}t        j                        rj                  |fd      S rj                  |      S j                   |             S )z(A very simple model written by the user.c                  r    t        j                         g       t        j                  d      z
  } | | z  S r   r   )r    r!   r   s    r   r"   z8minimize_loss_example.<locals>.model_fn.<locals>.loss_fn@   s2    


E!Hb
)K,@,@,D
DaUlr   c                       j                   S Ntrainable_variablesr!   s   r   <lambda>z9minimize_loss_example.<locals>.model_fn.<locals>.<lambda>E       1J1J r   r   is_optimizer_v2_instanceminimize)r   r"   r!   r(   use_callable_losss   ` r   model_fnz'minimize_loss_example.<locals>.model_fn=   sS     11)<)JKK	((	**r   )r   r#   )r(   r   r<   r   r=   r!   s   ` `  @r   minimize_loss_exampler>   2   s.    1 **Q
*%+ 
:u	$$r   c                    	 fd} |        	t        j                  ||d      t        j                  dd      	fd}||fS )zGExample of non-distribution-aware legacy code with batch normalization.c                  B   t         j                  j                  t              D  cg c]I  } t        d      D cg c]0  }t        d      D cg c]  }t	        |dz  |z   | dz  z          c}2 c}}K c}}}       j                         S c c}w c c}}w c c}}} w )N      d   )r   r   from_tensor_slicesrangefloatr   )zr   r    batch_per_epochs      r   r   z%batchnorm_example.<locals>.dataset_fnU   s    11 (	* 	*  9
 !H QQW$%  
 	*+ ,268	4 
 	*s(   BBB-B2BBBF)renormmomentumfusedr   r   c                       fd}t        j                        rj                  |fd      S j                  |      S )zA model that uses batchnorm.c                  X    d      } t        j                  r-t        j                  t         j                  j                        ng       5  t        j                  t        j                   |             t        j                  d      z
        }d d d        |S # 1 sw Y   S xY w)NT)trainingr   )
r   control_dependenciesget_collection	GraphKeys
UPDATE_OPSr   reduce_mean
reduce_sumr   r   )r    loss	batchnormr!   update_ops_in_replica_moder   s     r   r"   z4batchnorm_example.<locals>.model_fn.<locals>.loss_fne   s    
A
%a##' 

S]]55
6-/1 F ##a)K,@,@,DDFF kF ks   ABB)c                       j                   S r3   r4   r6   s   r   r7   z5batchnorm_example.<locals>.model_fn.<locals>.<lambda>p   r8   r   r9   )r   r"   rV   r!   r(   rW   s   ` r   r=   z#batchnorm_example.<locals>.model_fnb   s?     11)<)JKK g&&r   )r	   BatchNormalizationr   r#   )
r%   rH   rJ   rI   rW   r   r=   rV   r!   r(   s
    `  `  @@@r   batchnorm_examplerZ   N   sL    4 n)..he5)
**Q
'%'& 
:y	((r   N)Fr   )FT)r   g?FF)__doc__tensorflow.python.data.opsr   tensorflow.python.distributer   r   tensorflow.python.frameworkr   r   tensorflow.python.layersr   r	   tensorflow.python.opsr
   r   r*   r>   rZ   r   r   r   <module>ra      sK    5 2 0 : 3 + ) 2 + * >C,-!,%: '(""16	')r   