o
    $ºiÄ  ã                	   @   s&  d dl Z d dlZd dlZd dlmZ d dlmZ dZejdkr%e 	d ¡ nd dl
mZ d dlmZ d dlmZmZmZ G d	d
„ d
eƒZG dd„ dejƒZedkr‘e  ¡ Zejdddd e ¡ \ZZejeejdddejdejrsdndiddde  g d¢¡idZ!e! "¡ Z#e$de# %¡ j&ƒ dS dS )é    N)ÚFileLock)Útuneé
   )é   é   )ÚModel)Ú	load_data)ÚConv2DÚDenseÚFlattenc                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚMyModelé€   c                    sF   t t| ƒ ¡  tdddd| _tƒ | _t|dd| _tddd| _	d S )Né    r   Úrelu)Ú
activationr   Úsoftmax)
Úsuperr   Ú__init__r	   Úconv1r   Úflattenr
   Úd1Úd2)ÚselfÚhiddens©Ú	__class__© ú_/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/tune/examples/tf_mnist_example.pyr       s
   zMyModel.__init__c                 C   s(   |   |¡}|  |¡}|  |¡}|  |¡S ©N)r   r   r   r   )r   Úxr   r   r   Úcall'   s   



zMyModel.call)r   )Ú__name__Ú
__module__Ú__qualname__r   r    Ú__classcell__r   r   r   r   r      s    r   c                   @   s2   e Zd Zdd„ Zdefdd„Zdd„ Zdd	„ Zd
S )ÚMNISTTrainablec                    sp  dd l ‰ttj d¡ƒ tƒ \\}}\}}W d   ƒ n1 s w   Y  |d |d }}|dˆjf }|dˆjf }ˆjj 	||f¡ˆ _
ˆ j
 d¡ | dd¡¡ˆ _
ˆjj 	||f¡ d¡ˆ _t| dd	¡d
ˆ _ˆjj ¡ ˆ _ˆjj ¡ ˆ _ˆjjjddˆ _ˆjjjddˆ _ˆjjjddˆ _ˆjjjddˆ _ˆj‡ ‡fdd„ƒ}ˆj‡ fdd„ƒ}|ˆ _ |ˆ _!d S )Nr   z~/.tune.lockg     ào@.i'  Úbatchr   r   r   )r   Ú
train_loss)ÚnameÚtrain_accuracyÚ	test_lossÚtest_accuracyc                    s~   ˆ  ¡ }ˆ  | ¡}ˆ  ||¡}W d   ƒ n1 sw   Y  | |ˆ jj¡}ˆ j t|ˆ jjƒ¡ ˆ  |¡ ˆ  	||¡ d S r   )
ÚGradientTapeÚmodelÚloss_objectÚgradientÚtrainable_variablesÚ	optimizerÚapply_gradientsÚzipr'   r)   )ÚimagesÚlabelsÚtapeÚpredictionsÚlossÚ	gradients©r   Útfr   r   Ú
train_stepM   s   

þÿ
z(MNISTTrainable.setup.<locals>.train_stepc                    s0   ˆ   | ¡}ˆ  ||¡}ˆ  |¡ ˆ  ||¡ d S r   )r-   r.   r*   r+   )r4   r5   r7   Út_loss)r   r   r   Ú	test_stepZ   s   

z'MNISTTrainable.setup.<locals>.test_step)"Ú
tensorflowr   ÚosÚpathÚ
expanduserr   ÚnewaxisÚdataÚDatasetÚfrom_tensor_slicesÚtrain_dsÚshuffler&   ÚgetÚtest_dsr   r-   ÚkerasÚlossesÚSparseCategoricalCrossentropyr.   Ú
optimizersÚAdamr1   ÚmetricsÚMeanr'   ÚSparseCategoricalAccuracyr)   r*   r+   ÚfunctionÚtf_train_stepÚtf_test_step)r   ÚconfigÚx_trainÚy_trainÚx_testÚy_testr<   r>   r   r:   r   Úsetup/   s6   ÿÿÿ
zMNISTTrainable.setupÚcheckpoint_dirc                 C   ó   d S r   r   )r   r\   r   r   r   Úsave_checkpointe   ó   zMNISTTrainable.save_checkpointc                 C   r]   r   r   )r   Ú
checkpointr   r   r   Úload_checkpointh   r_   zMNISTTrainable.load_checkpointc                 C   s¶   | j  ¡  | j ¡  | j ¡  | j ¡  t| jƒD ]\}\}}|tkr% n|  ||¡ q| j	D ]
\}}|  
||¡ q/| j| j  ¡  ¡ | j ¡  ¡ d | j ¡  ¡ | j ¡  ¡ d dœS )Néd   )Úepochr8   Úaccuracyr*   Úmean_accuracy)r'   Úreset_statesr)   r*   r+   Ú	enumeraterG   ÚMAX_TRAIN_BATCHrT   rJ   rU   Ú	iterationÚresultÚnumpy)r   Úidxr4   r5   Útest_imagesÚtest_labelsr   r   r   Ústepk   s    



ûzMNISTTrainable.stepN)r!   r"   r#   r[   Ústrr^   ra   ro   r   r   r   r   r%   .   s
    6r%   Ú__main__z--smoke-testÚ
store_truezFinish quickly for testing)ÚactionÚhelpr*   Úmin)ÚmetricÚmodeÚtraining_iterationé   é2   é   )ÚstopÚverboser   )r   é@   r   )Útune_configÚ
run_configÚparam_spacez!Best hyperparameters found were: )'Úargparser@   ÚsysÚfilelockr   Úrayr   rh   Úversion_infoÚexitÚtensorflow.kerasr   Útensorflow.keras.datasets.mnistr   Útensorflow.keras.layersr	   r
   r   r   Ú	Trainabler%   r!   ÚArgumentParserÚparserÚadd_argumentÚparse_known_argsÚargsÚ_ÚTunerÚ
TuneConfigÚ	RunConfigÚ
smoke_testÚgrid_searchÚtunerÚfitÚresultsÚprintÚget_best_resultrV   r   r   r   r   Ú<module>   sD   
Uÿþþöë