Files
graph_recognition_w_attn/__pycache__/train_and_eval.cpython-312.pyc

90 lines
12 KiB
Plaintext
Raw Normal View History

2025-08-04 12:44:35 -04:00
<EFBFBD>
2025-09-01 14:46:34 -04:00
<00>]<5D>h<EFBFBD>)<00> <00><><00>ddlZddlZddlZddlmZddlZddlmZm Z m
2025-08-04 12:44:35 -04:00
Z
ddl m Z ddl m Z ddlmZddlZddlZddlZddlmZmZmZddlmZmZdej4d ej6d
ed ed eej6ej6ff
2025-09-01 14:46:34 -04:00
d <0A>Zdej6dej6d efd<10>Z de!dedej6ded ef
d<15>Z"d<16>Z#e$dk(re#<23>yy)<18>N)<03> dataclass<73>field<6C>asdict)<01>Enum)<01>tqdm)<01>f1_score)<03> TrainConfig<69> ModelConfig<69> NoiseType)<02> train_model<65>get_attention_fn<66>key<65> trajectories<65> train_config<69>
2025-08-04 12:44:35 -04:00
batch_size<EFBFBD>returnc<00><><00>g}g}|j\}}}t|<06>D]N} t|dz
<00>D];}
|| |
dd<02>f} || |
2025-09-01 14:46:34 -04:00
dzdd<02>f} |j| <0B>|j| <0C><00>=<00>Ptjt |<04><00>} tj j| <0A>tj|<04>}tj|<05>}|| }|| }|jtjk7r<>|jdkDr<>|j}|jtjk(r.tj j||<0E>|jz}nU|jtj k(r8tj j#|||j |j<00><04>}|tj<0F>z }tj$|d<05><06>}tj$|d<05><06>}|jd}||z}|d||z}|d||z}|j'|||d<01>}|j'|||d<01>}||fS)ah
2025-08-04 12:44:35 -04:00
Converts simulation trajectories into input-output pairs for the model.
Input: state at time t. Target: state at time t+1.
Args:
trajectories: A numpy array of shape (num_sims, num_timesteps, num_agents).
batch_size: The desired batch size for training.
Returns:
A tuple of (batched_inputs, batched_targets).
<20>Nr)<02>minval<61>maxval<61><6C><EFBFBD><EFBFBD><EFBFBD>)<01>axis)<14>shape<70>range<67>append<6E>np<6E>arange<67>len<65>random<6F>shuffle<6C>array<61>
2025-09-01 14:46:34 -04:00
noise_typer <00>NONE<4E> noise_level<65>NORMAL<41>jax<61>normal<61>UNIFORM<52>uniform<72> expand_dims<6D>reshape)rrrr<00>
2025-08-04 12:44:35 -04:00
all_inputs<EFBFBD> all_targets<74>num_sims<6D> num_timesteps<70>
2025-09-01 14:46:34 -04:00
num_agents<EFBFBD>i_sim<69>j_tstep<65>input<75>target<65> all_indices<65> noise_shape<70>noise<73>full_dataset_targets<74> num_samples<65> num_batches<65>truncated_inputs<74>truncated_targets<74>batched_inputs<74>batched_targetss <20></home/letpon/code/graph_recognition_w_attn/train_and_eval.py<70>prepare_data_for_modelr@sB<00><00><14>J<EFBFBD><14>K<EFBFBD>*6<>*<<3C>*<<3C>'<27>H<EFBFBD>m<EFBFBD>Z<EFBFBD><17>x<EFBFBD><1F>'<27><05><1C>]<5D>1<EFBFBD>_<EFBFBD>-<2D> '<27>G<EFBFBD> <20><15><07><11>!2<>3<>E<EFBFBD>!<21>%<25><17>1<EFBFBD><1B>a<EFBFBD>"7<>8<>F<EFBFBD> <16> <1D> <1D>e<EFBFBD> $<24> <17> <1E> <1E>v<EFBFBD> &<26>  '<27>'<27><15>)<29>)<29>C<EFBFBD>
<EFBFBD>O<EFBFBD>,<2C>K<EFBFBD><06>I<EFBFBD>I<EFBFBD><15><15>k<EFBFBD>"<22><13><18><18>*<2A>%<25>J<EFBFBD><14>(<28>(<28>;<3B>'<27>K<EFBFBD><1B>K<EFBFBD>(<28>J<EFBFBD><1D>k<EFBFBD>*<2A>K<EFBFBD><13><1E><1E>)<29>.<2E>.<2E>0<>\<5C>5M<35>5M<35>PQ<50>5Q<35> <20>&<26>&<26> <0B> <17> "<22> "<22>i<EFBFBD>&6<>&6<> 6<><17>J<EFBFBD>J<EFBFBD>%<25>%<25>c<EFBFBD>;<3B>7<>,<2C>:R<>:R<>R<>E<EFBFBD> <19> $<24> $<24> <09>(9<>(9<> 9<><17>J<EFBFBD>J<EFBFBD>&<26>&<26><13>[<5B>$<24>0<>0<>0<>#<23>/<2F>/<2F>'<27><0E>E<EFBFBD>
<13>b<EFBFBD>h<EFBFBD>h<EFBFBD>u<EFBFBD>o<EFBFBD>%<25>
<EFBFBD><14><1E><1E>
<EFBFBD><12>4<>J<EFBFBD><1D>><3E>><3E>+<2B>B<EFBFBD>?<3F><18><1D>"<22>"<22>1<EFBFBD>%<25>K<EFBFBD><1D><1A>+<2B>K<EFBFBD>"<22>";<3B>;<3B><1A>#;<3B><<3C><14>,<2C>-F<>k<EFBFBD>J<EFBFBD>.F<>G<><15>&<26>-<2D>-<2D>k<EFBFBD>:<3A>z<EFBFBD>ST<53>U<>N<EFBFBD>'<27>/<2F>/<2F> <0B>Z<EFBFBD><1A>UV<55>W<>O<EFBFBD> <19>?<3F> *<2A>*<2A><00>y_true<75>y_predc<00><><00>tj|<00>jt<00>}tj|<01>jt<00>}tj|dk(|dk(z<00>}tj|dk(|dk(z<00>}tj|dk(|dk(z<00>}||zdkDr|||zz nd}||zdkDr|||zz nd}||zdk(ryd||zz||zz S)a
Compute the F1 score between two numpy arrays.
Parameters
----------
y_true : np.ndarray
Ground truth (correct) labels.
y_pred : np.ndarray
Predicted labels.
Returns
-------
float
The F1 score.
rrg<00>)r<00>asarray<61>astype<70>int<6E>sum)rBrC<00>tp<74>fp<66>fn<66> precision<6F>recalls r?<00> f1_score_nprOTs<><00><00>"<10>Z<EFBFBD>Z<EFBFBD><06> <1F> &<26> &<26>s<EFBFBD> +<2B>F<EFBFBD> <0F>Z<EFBFBD>Z<EFBFBD><06> <1F> &<26> &<26>s<EFBFBD> +<2B>F<EFBFBD>
<0C><16><16><16>1<EFBFBD><1B><16>1<EFBFBD><1B>-<2D> .<2E>B<EFBFBD> <0B><16><16><16>1<EFBFBD><1B><16>1<EFBFBD><1B>-<2D> .<2E>B<EFBFBD> <0B><16><16><16>1<EFBFBD><1B><16>1<EFBFBD><1B>-<2D> .<2E>B<EFBFBD>$&<26><02>7<EFBFBD>a<EFBFBD>-<2D><02>b<EFBFBD>2<EFBFBD>g<EFBFBD><0E>S<EFBFBD>I<EFBFBD> "<22>R<EFBFBD><07>1<EFBFBD>}<7D>R<EFBFBD>2<EFBFBD><02>7<EFBFBD>^<5E>#<23>F<EFBFBD><11>6<EFBFBD><19>Q<EFBFBD><1E><12> <0C> <09>F<EFBFBD>"<22> #<23>y<EFBFBD>6<EFBFBD>'9<> :<3A>:rA<00>params<6D> model_config<69>
2025-08-04 12:44:35 -04:00
true_graph<EFBFBD> thresholdc<00><><00>tjt||<01><00>}||kDjt<00>}|j <00>}|j <00>}t ||<07>S)zY
Extracts the learned attention graph, thresholds it, and computes the F1 score.
2025-09-01 14:46:34 -04:00
)rr!r rGrH<00>flattenrO)rPrQrRrS<00>learned_graph_scores<65>predicted_graph<70> true_flat<61> pred_flats r?<00>calculate_f1_scorerZvs]<00><00><1E>8<EFBFBD>8<EFBFBD>$4<>V<EFBFBD>\<5C>$J<>K<><18>,<2C>i<EFBFBD>7<>?<3F>?<3F><03>D<>O<EFBFBD><1B>"<22>"<22>$<24>I<EFBFBD><1F>'<27>'<27>)<29>I<EFBFBD> <16>y<EFBFBD>)<29> ,<2C>,rAc<00><> <00>t<00>}dtjdzdz|_tj
2025-08-04 12:44:35 -04:00
j |j<00>s3td|j<00>d<05><03>td|j<00>d<07><03>ytd |j<00>d
2025-09-01 14:46:34 -04:00
<EFBFBD><03>tt j|j<00>D<00>cgc]}|jd <0B>s<01>|<01><02>c}d <0C><00> <0A>}tjjd<0E>}|D<00>]u}tj
2025-08-04 12:44:35 -04:00
j|j|<04>}g}tt j|<05>D<00>cgc]}|jd<0F>s<01>|<07><02>c}<07>}tj
j|d<10>} t j | d<11><12>t#|j$<00>}
2025-09-01 14:46:34 -04:00
t#|j&<00>} tj
2025-08-04 12:44:35 -04:00
j| |
2025-09-01 14:46:34 -04:00
| <0B>} t j | d<11><12>tdt)|<08><00>d|<04>d<15><05>t+|d|<04><00><02><17>D<00>]<5D>} tj
j|| <0A>}t-|d<18>5}t/j0|<07>}ddd<08>t3j4d<00>}|j6\}}}t3j4|d<00>}tjj9|<03>\}}t;||||j<<00>\}}|j6d}t?<00>}||_ d|_!d|_"d|_#tI|||||<00><1D>\}}tK||||jL<00>}|djO<00>D<00><1D><1E>cic]$\}}||D<00>cgc]}|jQ<00><00><02>c}<1F><02>&} }}}t#tSjT<00><00>}!| |d|| |j@|jB|jD|jFd <20>|jV|jX|jZ|j\|j^t#|j$<00>|j&d!<21>d"<22>t3j4ta||<19><00>jc<00>d#<23>}"|}#tj
j| d$<24>}$t j |$d<11><12>t-tj
j|$d%| zd&z<00>d'<27>5}tejf||<07>ddd<08>|ji|"<22><00><02><>tj
j| d(<28>}%t-|%d)<29>5}t/jf||d*<2A>+<2B>ddd<08>td,|<04>d-|%<25><00><04><00><04>xtd.<2E>ycc}wcc}w#1swY<00><03>xYwcc}wcc}}}w#1swY<00><>xYw#1swY<00>XxYw)/z8Main script to run the training and evaluation pipeline.z datasets/r<00>_datasetzError: Data directory 'z ' not found.z+Please run the data generation script for 'z' first.Nz Starting training pipeline for 'z' data.<2E>agents_c<00><<00>t|jd<01>d<00>S)N<>_r)rH<00>split)<01>xs r?<00><lambda>zmain.<locals>.<lambda><3E>s<00><00>c<EFBFBD>!<21>'<27>'<27>#<23>,<2C>q<EFBFBD>/<2F>*<2A>rA)r<00>1z.json<6F>resultsT)<01>exist_okz
Processing z graphs for z...z Training on )<01>desc<73>rr<00>adjacency_matrixr<00> )<05>config<69>inputs<74>targetsrRr<00> loss_history<72> graph_metrics)r0<00> input_dim<69>
output_dim<EFBFBD> embedding_dim)<07>epochs<68> learning_rate<74>verbose<73>log<6F>log_epoch_intervalr"r$)<02>model<65>training)<06> source_filernr<00>training_loss_historyrj<00> raw_attention<6F> model_params<6D>
model_for_z.pkl<6B>wbzsummary_results.json<6F>wrE)<01>indentu✅ Results for z
2025-08-04 12:44:35 -04:00
saved to u%
🎉 Pipeline finished successfully!)5r <00>sys<79>argv<67>data_directory<72>os<6F>path<74>isdir<69>print<6E>sorted<65>listdir<69>
2025-09-01 14:46:34 -04:00
startswithr&r<00>PRNGKey<65>join<69>endswith<74>makedirs<72>strr"r$rr<00>open<65>json<6F>loadrr!rr`r@rr
r0rorprqr rZ<00> f1_threshold<6C>items<6D>item<65>uuid<69>uuid4rrrsrtrurvr <00>tolist<73>pickle<6C>dumpr)&r<00>d<>
agent_dirs<EFBFBD> starter_key<65>agent_dir_name<6D>agent_dir_path<74>all_results_for_agent<6E>f<> graph_files<65> results_dir<69>subdir<69> subsubdir<69>sub_results_dir<69>graph_file_name<6D> file_path<74>datar<00>s<>l<>nrR<00>data_keyrkrlr0rQ<00> final_params<6D>
2025-08-04 12:44:35 -04:00
train_logs<EFBFBD>f1<66>epoch<63>losses<65>loss<73>loss_history_serializable<6C> random_id<69>
result_log<EFBFBD>result_final_params<6D>
2025-09-01 14:46:34 -04:00
model_path<EFBFBD> output_files& r?<00>mainr<6E><00>s(<00><00><1F>=<3D>L<EFBFBD>"-<2D><03><08><08><11> <0B>";<3B>j<EFBFBD>"H<>L<EFBFBD><1F> <0E>7<EFBFBD>7<EFBFBD>=<3D>=<3D><1C>4<>4<> 5<> <0A>'<27> <0C>(C<>(C<>'D<>L<EFBFBD>Q<>R<> <0A>;<3B>L<EFBFBD><W<><W<>;X<>X`<60>a<>b<><0E> <09> ,<2C>\<5C>-H<>-H<>,I<><17>
Q<EFBFBD>R<><18><16>J<EFBFBD>J<EFBFBD>|<7C>:<3A>:<3A>;<3B>W<>q<EFBFBD>q<EFBFBD>|<7C>|<7C>I<EFBFBD>?V<><11>W<> *<2A><06>J<EFBFBD>
<16>*<2A>*<2A>$<24>$<24>R<EFBFBD>(<28>K<EFBFBD>$<24>qJ<01><0E><1B><17><17><1C><1C>l<EFBFBD>&A<>&A<>><3E>R<><0E> "<22><1D><1C><12><1A><1A>N<EFBFBD>)C<>[<5B>A<EFBFBD>q<EFBFBD>z<EFBFBD>z<EFBFBD>RY<52>GZ<47>a<EFBFBD>[<5B>\<5C> <0B><18>g<EFBFBD>g<EFBFBD>l<EFBFBD>l<EFBFBD>><3E>9<EFBFBD>=<3D> <0B>
<EFBFBD> <0B> <0B>K<EFBFBD>$<24>/<2F><14>\<5C>,<2C>,<2C>-<2D><06><17> <0C>0<>0<>1<> <09><1C>'<27>'<27>,<2C>,<2C>{<7B>F<EFBFBD>I<EFBFBD>F<><0F>
2025-08-04 12:44:35 -04:00
<EFBFBD> <0B> <0B>O<EFBFBD>d<EFBFBD>3<> <0A> <0A>c<EFBFBD>+<2B>.<2E>/<2F>|<7C>N<EFBFBD>;K<>3<EFBFBD>O<>P<>#<23>K<EFBFBD> <0C>^<5E>DT<44>6U<36>V<>X 5<>O<EFBFBD><1A><07><07> <0C> <0C>^<5E>_<EFBFBD>E<>I<EFBFBD><15>i<EFBFBD><13>%<25> $<24><11><1B>y<EFBFBD>y<EFBFBD><11>|<7C><04> $<24><1E>8<EFBFBD>8<EFBFBD>D<EFBFBD><1E>$8<>9<>L<EFBFBD>"<22>(<28>(<28>G<EFBFBD>A<EFBFBD>q<EFBFBD>!<21><1C><18><18>$<24>'9<>":<3A>;<3B>J<EFBFBD>$'<27>J<EFBFBD>J<EFBFBD>$4<>$4<>[<5B>$A<> !<21>K<EFBFBD><18>4<>X<EFBFBD>|<7C>\<5C>[g<>[r<>[r<>s<>O<EFBFBD>F<EFBFBD>G<EFBFBD>&<26>+<2B>+<2B>B<EFBFBD>/<2F>J<EFBFBD>&<26><0E>L<EFBFBD>%/<2F>L<EFBFBD> #<23>#$<24>L<EFBFBD> "<22>$%<25>L<EFBFBD> #<23>')<29>L<EFBFBD> &<26>(3<>#<23><1D><1F>%<25>)<29> (<0E> $<24>L<EFBFBD>*<2A>$<24><1C><1C><1A><1C>)<29>)<29> <0E>B<EFBFBD>&0<><0E>%?<3F>%E<>%E<>%G<>)<0E>)<0E>!<21>E<EFBFBD>6<EFBFBD><16><06>7<><04><04> <09> <09> <0B>7<>7<>)<0E> %<25>)<0E>
<1C>D<EFBFBD>J<EFBFBD>J<EFBFBD>L<EFBFBD>)<29>I<EFBFBD>
/<2F>!%<25>o<EFBFBD>!6<><1E>)B<>'3<>&=<3D>&=<3D>%1<>%;<3B>%;<3B>&2<>&=<3D>&=<3D>)5<>)C<>)C<> <16>$0<>#6<>#6<>*6<>*D<>*D<>$0<>$8<>$8<> ,<2C> 0<> 0<>/;<3B>/N<>/N<>&)<29>,<2C>*A<>*A<>&B<>'3<>'?<3F>'?<3F> !<16><12>("$<24><18><18>*:<3A><<3C><1C>*V<>!W<>!^<5E>!^<5E>!`<60>5<0E>J<EFBFBD>:#/<2F> <1F><1B><17><17><1C><1C>o<EFBFBD>~<7E>F<>J<EFBFBD> <0E>K<EFBFBD>K<EFBFBD>
<EFBFBD>T<EFBFBD> 2<><15>b<EFBFBD>g<EFBFBD>g<EFBFBD>l<EFBFBD>l<EFBFBD>:<3A>l<EFBFBD>_<EFBFBD>.L<>v<EFBFBD>.U<>V<>X\<5C>]<5D> -<2D>ab<61><16> <0B> <0B>L<EFBFBD>!<21>,<2C> -<2D> "<22> (<28> (<28><1A> 4<>qX 5<>t<19>g<EFBFBD>g<EFBFBD>l<EFBFBD>l<EFBFBD>?<3F>4J<34>K<> <0B> <11>+<2B>s<EFBFBD> #<23> :<3A>q<EFBFBD> <10>I<EFBFBD>I<EFBFBD>+<2B>Q<EFBFBD>q<EFBFBD> 9<> :<3A>
<0E> <20><1E> 0<>
2025-09-01 14:46:34 -04:00
<EFBFBD>;<3B>-<2D>H<>I<>cqJ<01>f
2025-08-04 12:44:35 -04:00
<EFBFBD>
2025-09-01 14:46:34 -04:00
2<EFBFBD>3<><33>s X<01><>\<01> $<24> $<24><>T8<><38>)<0E>R -<2D> -<2D><>  :<3A> :<3A>sT<00>V<08>V<08>V
<EFBFBD>-V
<EFBFBD>,V<07>> V+ <0C> V&<14>"V+ <0C>/V2<07>V><05>V# <0B>&V+ <0C>2V; <0B>>W <09>__main__)%r<>r<>r&<00> jax.numpy<70>numpy<70>jnpr<00> dataclassesrrr<00>enumrr<00>sklearn.metricsrr<>r<>r<><00>config_r r
r rwr r <00>Array<61>ndarrayrH<00>tupler@<00>floatrO<00>dictrZr<><00>__name__<5F>rAr?<00><module>r<>s<00><01> <09> <0B>
2025-08-04 12:44:35 -04:00
<EFBFBD><17><12>0<>0<><15><15>$<24> <0B> <0A>
2025-09-01 14:46:34 -04:00
<EFBFBD>7<>7<>/<2F>@+<2B><03> <09> <09>@+<2B><12><1A><1A>@+<2B>S^<5E>@+<2B>lo<6C>@+<2B>ty<74>z|<7C>{E<02>{E<02>GI<02>GQ<02>GQ<02>{Q<02>uR<02>@+<2B>D ;<3B><02>
<EFBFBD>
<EFBFBD> ;<3B>B<EFBFBD>J<EFBFBD>J<EFBFBD> ;<3B>5<EFBFBD> ;<3B>D-<2D> <10>-<2D><1D>-<2D><13>
2025-08-04 12:44:35 -04:00
<EFBFBD>
2025-09-01 14:46:34 -04:00
<EFBFBD>-<2D><15> -<2D>
 <0B> -<2D>@I4<>V <0C>z<EFBFBD><19><08>F<EFBFBD>rA