
    hT              	          S r SSKrSSKJr  SSKrSSKJrJrJ	r	  SSK
Jr   " S S5      r\S:X  a  \" S5        \" S5        \" S	5        \" S
SS/SSSSS9r\R#                  SSSS9  \R%                  5         \R'                  SS9r\" S5        \" S5        \" S	5        \" S5        \" S\S   S S35        \" S\S   S S35        \" S5        gg) z7
MAML Meta-Training - Learn the optimal initialization
    N)MAML	MAMLModelcreate_classification_taskc                   `    \ rS rSrSrSSS/SSSS4S jrSS	 jrSS
 jrSS jrSS jr	S r
Srg)MAMLTrainer
   z%Train MAML on a distribution of tasks(      {Gz?MbP?   c                 j    [        XU5      U l        [        U R                  UUUS9U l        / U l        g )N)inner_lrouter_lrinner_steps)r   modelr   mamltrain_history)self
input_sizehidden_sizesoutput_sizer   r   r   s          S/home/james-whalen/eden-agi-project/real_capabilities/learning/meta/maml_trainer.py__init__MAMLTrainer.__init__   s8     zE
JJ#	
	      c                 v    / n[        U5       H'  nX$-   n[        USS9u  pgpUR                  XgX45        M)     U$ )z)Generate batch of tasks for meta-trainingr	   	n_samples)ranger   append)
r   n_taskstask_offset
task_batchitask_id	support_x	support_yquery_xquery_ys
             r   generate_task_batchMAMLTrainer.generate_task_batch    sM    
wA!oG5O262I' yWFG   r   c                    [        S5        [        S5        [        SU SU 35        [        S5        [        U5       H  nXB-  nU R                  X%5      nU R                  R	                  U5      u  pxU R
                  R                  UUUS.5        US-   U-  S:X  d  Mb  [        S	US-    S
U SUS SUS-  S S3	5        U R                  SS9n	[        SU	S-  S S35        M     [        S5        g)z*
Meta-train MAML on distribution of tasks
G
======================================================================zMETA-TRAINING MAMLzIterations: z | Tasks per batch: F======================================================================)	iterationlossaccuracy   r   z
Iteration /z	 - Loss: z.4fz - Acc: d   .2f%   )r"   z  Eval on new tasks: u   
✅ Meta-training complete!N)printr    r+   r   meta_train_stepr   r!   evaluate_on_new_tasks)
r   n_iterationstasks_per_batch
eval_everyr0   r#   r$   r1   acceval_accs
             r   
meta_trainMAMLTrainer.meta_train-   s    	m"#\N*>>OPQf|,I#5K11/OJ 		11*=ID%%&'  A+q0
9Q;-q ?#CjSQ@ A  55b5A-hsl3-?qAB+ -. 	-.r   c                     Sn[        U5       H7  nSU-   n[        USS9u  pVpxU R                  R                  XVXx5      u  pX*-  nM9     X!-  $ )z;Evaluate on completely new tasks (not seen during training)r   i'  r	   r   )r    r   r   evaluate_task)r   r"   	total_accr%   r&   r'   r(   r)   r*   _	acc_afters              r   r;   !MAMLTrainer.evaluate_on_new_tasksO   sd    	wAaiG5O262I'  9922gLA "I   ""r   c                    [        S5        [        S5        [        S5        / n/ n/ n[        U5       H  nSU-   n[        USS9u  pxpU R                  R	                  XxX5      u  pUR                  U5        UR                  U5        [        SSS/S5      n[        US	S
S9nUR	                  XxX5      u  nnUR                  U5        M     [        R                  " U5      S-  n[        R                  " U5      S-  n[        R                  " U5      S-  nUU-
  nUU-
  n[        SU S35        [        S 5        [        SUS S35        [        SUS SUS S35        [        SUS S35        [        S 5        [        SUS S35        US:  a(  US:  a"  [        S5        [        S5        [        S5        O[        S5        [        S5        UUUUS.$ )z-
Compare MAML vs baseline (no meta-learning)
r.   zCOMPARING MAML VS BASELINEr/   i N  r	   r   r   r
   r   r   )r   r   r5   z
Results on z new tasks:zMAML (before adaptation):  r6   r7   zMAML (after 5 steps):      z% (+z%)zBaseline (after 5 steps):  zMAML vs Baseline:          +U      u   
🎯 GOAL ACHIEVED!u"      ✅ >85% accuracy after 5 stepsu'      ✅ >30% improvement from adaptationu   
⚠️  Goal not yet metz(   Need: >85% accuracy, >30% improvement)maml_before
maml_afterbaselineimprovement)
r9   r    r   r   rD   r!   r   r   npmean)r   n_test_tasksrL   rM   baseline_afterr%   r&   r'   r(   r)   r*   
acc_beforerG   baseline_modelbaseline_mamlrF   baseline_accmaml_before_avgmaml_after_avgbaseline_after_avgrO   vs_baselines                         r   compare_with_baseline!MAMLTrainer.compare_with_baselinea   s
    	m*+f
|$AaiG5O262I'
 %)II$;$;g%!J z*i( 'rB8Q7N $ANM+99gOA| !!,/' %, ''+.4,s2WW^4s:$6$'99l^;78+OC+@BC+N3+?tKPSCTTVWX+,>s+C1EF,[,=Q?@ RK2$5)+68;=.0<> +(*&	
 	
r   c                    U R                    Vs/ s H  oS   PM	     nnU R                    Vs/ s H
  oS   S-  PM     nnU R                    Vs/ s H  oS   PM	     nn[        R                  " SSSS9u  nu  pgUR                  X#S	SS
9  UR	                  S5        UR                  S5        UR                  S5        UR                  SSS9  UR                  SSSSSS9  UR                  5         UR                  X$SSS
9  UR	                  S5        UR                  S5        UR                  S5        UR                  SSS9  [        R                  " 5         [        R                  " SSS9  [        S5        gs  snf s  snf s  snf )zPlot training progressr0   r2   r5   r1   r3   r
   )   r   )figsizeblue)color	linewidthzMeta-Training IterationzQuery Set Accuracy (%)z'MAML: Meta-Training Progress (Accuracy)Tg333333?)alpharJ   greenz--g      ?z	Goal: 85%)yrb   	linestylerd   labelredzQuery Set Lossz#MAML: Meta-Training Progress (Loss)z1real_capabilities/learning/meta/maml_training.png   )dpiuO   
📊 Training plot saved to: real_capabilities/learning/meta/maml_training.pngN)r   pltsubplotsplot
set_xlabel
set_ylabel	set_titlegridaxhlinelegendtight_layoutsavefigr9   )r   h
iterations
accuracieslossesfigax1ax2s           r   visualize_trainingMAMLTrainer.visualize_training   s^   .2.@.@A.@n.@
A373E3EF3Ea
mc)3E
F%)%7%78%7F)%78,,q!W=Zc 	vC01/0?@S!b4s+V

 	5A>01'(;<S!GSQ`b1 BF8s   E:E?F)r   r   r   N)r   )i     r5   )r8   )2   )__name__
__module____qualname____firstlineno____doc__r   r+   rA   r;   r\   r~   __static_attributes__ r   r   r   r   
   s>    / "X & /D#$?
Bcr   r   __main__r.   z.MAML META-LEARNING: FULL TRAINING & EVALUATIONr/   r   r	   r
   r   r   r   )r   r   r   r   r   r   i  r      )r<   r=   r>   r   )rR   zWEEK 3 COMPLETE!u   
Meta-Learning Capability: ✅zFast adaptation in 5 steps: rM   z.1fr7   zImprovement: rO   z
Total Capabilities: 3/30 (10%))r   torchtorch.nnnnnumpyrP   r   r   r   r   matplotlib.pyplotpyplotrl   r   r   r9   trainerrA   r~   r\   resultsr   r   r   <module>r      s      < < rc rcj z	-	
:;	&M "XG D!L   +++<G	-	
	&M	
+,	()>s(C1
EF	M'-05Q
78	
,-= r   