younadi commited on
Commit
4379332
·
verified ·
1 Parent(s): 68c4c41

Upload exhaustive_7_4 directly via API

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +142 -0
  2. datasets/exhaustive_7_4/cds_makespan.npy +0 -0
  3. datasets/exhaustive_7_4/min_makespan.npy +0 -0
  4. datasets/exhaustive_7_4/neh_makespan.npy +0 -0
  5. datasets/exhaustive_7_4/palmer_makespan.npy +0 -0
  6. datasets/exhaustive_7_4/pfsp_instance.npy +0 -0
  7. datasets/exhaustive_7_4/top_0/cds_makespan.npy +0 -0
  8. datasets/exhaustive_7_4/top_0/makespans_val.npy +0 -0
  9. datasets/exhaustive_7_4/top_0/min_makespan.npy +0 -0
  10. datasets/exhaustive_7_4/top_0/neh_makespan.npy +0 -0
  11. datasets/exhaustive_7_4/top_0/palmer_makespan.npy +0 -0
  12. datasets/exhaustive_7_4/top_0/pfsp_instance.npy +0 -0
  13. datasets/exhaustive_7_4/top_0/schedules_val.npy +0 -0
  14. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/.terminated_phase1 +0 -0
  15. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/batch_losses.npy +0 -0
  16. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/checkpoints/best_checkpoint.pth +3 -0
  17. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/checkpoints/last_checkpoint.pth +3 -0
  18. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/last_batch_loss_idx.npy +0 -0
  19. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/last_val_loss_idx.npy +0 -0
  20. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/.terminated_phase2 +0 -0
  21. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/actual_makespan.npy +0 -0
  22. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/checkpoints_phase2/best_checkpoint_phase2.pth +0 -0
  23. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/checkpoints_phase2/last_checkpoint_phase2.pth +0 -0
  24. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/last_losses_idx.npy +0 -0
  25. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/makespan_losses.npy +0 -0
  26. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/optimal_job_sequence.npy +0 -0
  27. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/recover_schedules.log +0 -0
  28. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/recover_schedules_pbar.log +1 -0
  29. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/results.json +1 -0
  30. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/sinkhorn_losses.npy +0 -0
  31. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/total_losses.npy +0 -0
  32. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/viz_rs.ipynb +0 -0
  33. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/train.log +450 -0
  34. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/train_parameters.json +38 -0
  35. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/train_pbar_epoch.log +1 -0
  36. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/train_pbar_val.log +1 -0
  37. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/val_losses.npy +0 -0
  38. datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/viz_train.ipynb +106 -0
  39. datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/.terminated_phase1 +0 -0
  40. datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/batch_losses.npy +0 -0
  41. datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/checkpoints/best_checkpoint.pth +3 -0
  42. datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/checkpoints/last_checkpoint.pth +3 -0
  43. datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/last_batch_loss_idx.npy +0 -0
  44. datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/last_val_loss_idx.npy +0 -0
  45. datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/recover/.terminated_phase2 +0 -0
  46. datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/recover/actual_makespan.npy +0 -0
  47. datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/recover/checkpoints_phase2/best_checkpoint_phase2.pth +0 -0
  48. datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/recover/checkpoints_phase2/last_checkpoint_phase2.pth +0 -0
  49. datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/recover/last_losses_idx.npy +0 -0
  50. datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/recover/makespan_losses.npy +0 -0
.gitattributes CHANGED
@@ -320,3 +320,145 @@ datasets/exhaustive_7_3/top_4/train_Sm_Wd2e-0/checkpoints/best_checkpoint.pth fi
320
  datasets/exhaustive_7_3/top_4/train_Sm_Wd2e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
321
  datasets/exhaustive_7_3/top_4/train_Sm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
322
  datasets/exhaustive_7_3/top_4/train_Sm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
320
  datasets/exhaustive_7_3/top_4/train_Sm_Wd2e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
321
  datasets/exhaustive_7_3/top_4/train_Sm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
322
  datasets/exhaustive_7_3/top_4/train_Sm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
323
+ datasets/exhaustive_7_4/makespans.npy filter=lfs diff=lfs merge=lfs -text
324
+ datasets/exhaustive_7_4/schedules.npy filter=lfs diff=lfs merge=lfs -text
325
+ datasets/exhaustive_7_4/top_0/makespans_train.npy filter=lfs diff=lfs merge=lfs -text
326
+ datasets/exhaustive_7_4/top_0/schedules_train.npy filter=lfs diff=lfs merge=lfs -text
327
+ datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
328
+ datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
329
+ datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
330
+ datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
331
+ datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
332
+ datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
333
+ datasets/exhaustive_7_4/top_0/train_Bm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
334
+ datasets/exhaustive_7_4/top_0/train_Bm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
335
+ datasets/exhaustive_7_4/top_0/train_Mm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
336
+ datasets/exhaustive_7_4/top_0/train_Mm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
337
+ datasets/exhaustive_7_4/top_0/train_Mm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
338
+ datasets/exhaustive_7_4/top_0/train_Mm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
339
+ datasets/exhaustive_7_4/top_0/train_Mm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
340
+ datasets/exhaustive_7_4/top_0/train_Mm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
341
+ datasets/exhaustive_7_4/top_0/train_Mm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
342
+ datasets/exhaustive_7_4/top_0/train_Mm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
343
+ datasets/exhaustive_7_4/top_0/train_Sm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
344
+ datasets/exhaustive_7_4/top_0/train_Sm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
345
+ datasets/exhaustive_7_4/top_0/train_Sm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
346
+ datasets/exhaustive_7_4/top_0/train_Sm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
347
+ datasets/exhaustive_7_4/top_0/train_Sm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
348
+ datasets/exhaustive_7_4/top_0/train_Sm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
349
+ datasets/exhaustive_7_4/top_0/train_Sm_Wd2e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
350
+ datasets/exhaustive_7_4/top_0/train_Sm_Wd2e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
351
+ datasets/exhaustive_7_4/top_0/train_Sm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
352
+ datasets/exhaustive_7_4/top_0/train_Sm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
353
+ datasets/exhaustive_7_4/top_1/makespans_train.npy filter=lfs diff=lfs merge=lfs -text
354
+ datasets/exhaustive_7_4/top_1/schedules_train.npy filter=lfs diff=lfs merge=lfs -text
355
+ datasets/exhaustive_7_4/top_1/train_Bm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
356
+ datasets/exhaustive_7_4/top_1/train_Bm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
357
+ datasets/exhaustive_7_4/top_1/train_Bm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
358
+ datasets/exhaustive_7_4/top_1/train_Bm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
359
+ datasets/exhaustive_7_4/top_1/train_Bm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
360
+ datasets/exhaustive_7_4/top_1/train_Bm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
361
+ datasets/exhaustive_7_4/top_1/train_Bm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
362
+ datasets/exhaustive_7_4/top_1/train_Bm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
363
+ datasets/exhaustive_7_4/top_1/train_Mm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
364
+ datasets/exhaustive_7_4/top_1/train_Mm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
365
+ datasets/exhaustive_7_4/top_1/train_Mm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
366
+ datasets/exhaustive_7_4/top_1/train_Mm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
367
+ datasets/exhaustive_7_4/top_1/train_Mm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
368
+ datasets/exhaustive_7_4/top_1/train_Mm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
369
+ datasets/exhaustive_7_4/top_1/train_Mm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
370
+ datasets/exhaustive_7_4/top_1/train_Mm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
371
+ datasets/exhaustive_7_4/top_1/train_Sm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
372
+ datasets/exhaustive_7_4/top_1/train_Sm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
373
+ datasets/exhaustive_7_4/top_1/train_Sm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
374
+ datasets/exhaustive_7_4/top_1/train_Sm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
375
+ datasets/exhaustive_7_4/top_1/train_Sm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
376
+ datasets/exhaustive_7_4/top_1/train_Sm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
377
+ datasets/exhaustive_7_4/top_1/train_Sm_Wd2e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
378
+ datasets/exhaustive_7_4/top_1/train_Sm_Wd2e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
379
+ datasets/exhaustive_7_4/top_1/train_Sm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
380
+ datasets/exhaustive_7_4/top_1/train_Sm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
381
+ datasets/exhaustive_7_4/top_2/makespans_train.npy filter=lfs diff=lfs merge=lfs -text
382
+ datasets/exhaustive_7_4/top_2/schedules_train.npy filter=lfs diff=lfs merge=lfs -text
383
+ datasets/exhaustive_7_4/top_2/train_Bm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
384
+ datasets/exhaustive_7_4/top_2/train_Bm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
385
+ datasets/exhaustive_7_4/top_2/train_Bm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
386
+ datasets/exhaustive_7_4/top_2/train_Bm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
387
+ datasets/exhaustive_7_4/top_2/train_Bm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
388
+ datasets/exhaustive_7_4/top_2/train_Bm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
389
+ datasets/exhaustive_7_4/top_2/train_Bm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
390
+ datasets/exhaustive_7_4/top_2/train_Bm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
391
+ datasets/exhaustive_7_4/top_2/train_Mm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
392
+ datasets/exhaustive_7_4/top_2/train_Mm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
393
+ datasets/exhaustive_7_4/top_2/train_Mm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
394
+ datasets/exhaustive_7_4/top_2/train_Mm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
395
+ datasets/exhaustive_7_4/top_2/train_Mm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
396
+ datasets/exhaustive_7_4/top_2/train_Mm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
397
+ datasets/exhaustive_7_4/top_2/train_Mm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
398
+ datasets/exhaustive_7_4/top_2/train_Mm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
399
+ datasets/exhaustive_7_4/top_2/train_Sm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
400
+ datasets/exhaustive_7_4/top_2/train_Sm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
401
+ datasets/exhaustive_7_4/top_2/train_Sm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
402
+ datasets/exhaustive_7_4/top_2/train_Sm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
403
+ datasets/exhaustive_7_4/top_2/train_Sm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
404
+ datasets/exhaustive_7_4/top_2/train_Sm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
405
+ datasets/exhaustive_7_4/top_2/train_Sm_Wd2e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
406
+ datasets/exhaustive_7_4/top_2/train_Sm_Wd2e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
407
+ datasets/exhaustive_7_4/top_2/train_Sm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
408
+ datasets/exhaustive_7_4/top_2/train_Sm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
409
+ datasets/exhaustive_7_4/top_3/makespans_train.npy filter=lfs diff=lfs merge=lfs -text
410
+ datasets/exhaustive_7_4/top_3/schedules_train.npy filter=lfs diff=lfs merge=lfs -text
411
+ datasets/exhaustive_7_4/top_3/train_Bm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
412
+ datasets/exhaustive_7_4/top_3/train_Bm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
413
+ datasets/exhaustive_7_4/top_3/train_Bm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
414
+ datasets/exhaustive_7_4/top_3/train_Bm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
415
+ datasets/exhaustive_7_4/top_3/train_Bm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
416
+ datasets/exhaustive_7_4/top_3/train_Bm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
417
+ datasets/exhaustive_7_4/top_3/train_Bm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
418
+ datasets/exhaustive_7_4/top_3/train_Bm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
419
+ datasets/exhaustive_7_4/top_3/train_Mm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
420
+ datasets/exhaustive_7_4/top_3/train_Mm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
421
+ datasets/exhaustive_7_4/top_3/train_Mm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
422
+ datasets/exhaustive_7_4/top_3/train_Mm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
423
+ datasets/exhaustive_7_4/top_3/train_Mm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
424
+ datasets/exhaustive_7_4/top_3/train_Mm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
425
+ datasets/exhaustive_7_4/top_3/train_Mm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
426
+ datasets/exhaustive_7_4/top_3/train_Mm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
427
+ datasets/exhaustive_7_4/top_3/train_Sm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
428
+ datasets/exhaustive_7_4/top_3/train_Sm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
429
+ datasets/exhaustive_7_4/top_3/train_Sm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
430
+ datasets/exhaustive_7_4/top_3/train_Sm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
431
+ datasets/exhaustive_7_4/top_3/train_Sm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
432
+ datasets/exhaustive_7_4/top_3/train_Sm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
433
+ datasets/exhaustive_7_4/top_3/train_Sm_Wd2e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
434
+ datasets/exhaustive_7_4/top_3/train_Sm_Wd2e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
435
+ datasets/exhaustive_7_4/top_3/train_Sm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
436
+ datasets/exhaustive_7_4/top_3/train_Sm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
437
+ datasets/exhaustive_7_4/top_4/makespans_train.npy filter=lfs diff=lfs merge=lfs -text
438
+ datasets/exhaustive_7_4/top_4/schedules_train.npy filter=lfs diff=lfs merge=lfs -text
439
+ datasets/exhaustive_7_4/top_4/train_Bm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
440
+ datasets/exhaustive_7_4/top_4/train_Bm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
441
+ datasets/exhaustive_7_4/top_4/train_Bm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
442
+ datasets/exhaustive_7_4/top_4/train_Bm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
443
+ datasets/exhaustive_7_4/top_4/train_Bm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
444
+ datasets/exhaustive_7_4/top_4/train_Bm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
445
+ datasets/exhaustive_7_4/top_4/train_Bm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
446
+ datasets/exhaustive_7_4/top_4/train_Bm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
447
+ datasets/exhaustive_7_4/top_4/train_Mm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
448
+ datasets/exhaustive_7_4/top_4/train_Mm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
449
+ datasets/exhaustive_7_4/top_4/train_Mm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
450
+ datasets/exhaustive_7_4/top_4/train_Mm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
451
+ datasets/exhaustive_7_4/top_4/train_Mm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
452
+ datasets/exhaustive_7_4/top_4/train_Mm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
453
+ datasets/exhaustive_7_4/top_4/train_Mm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
454
+ datasets/exhaustive_7_4/top_4/train_Mm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
455
+ datasets/exhaustive_7_4/top_4/train_Sm_Wd10e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
456
+ datasets/exhaustive_7_4/top_4/train_Sm_Wd10e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
457
+ datasets/exhaustive_7_4/top_4/train_Sm_Wd1e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
458
+ datasets/exhaustive_7_4/top_4/train_Sm_Wd1e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
459
+ datasets/exhaustive_7_4/top_4/train_Sm_Wd1e-1/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
460
+ datasets/exhaustive_7_4/top_4/train_Sm_Wd1e-1/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
461
+ datasets/exhaustive_7_4/top_4/train_Sm_Wd2e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
462
+ datasets/exhaustive_7_4/top_4/train_Sm_Wd2e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
463
+ datasets/exhaustive_7_4/top_4/train_Sm_Wd5e-0/checkpoints/best_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
464
+ datasets/exhaustive_7_4/top_4/train_Sm_Wd5e-0/checkpoints/last_checkpoint.pth filter=lfs diff=lfs merge=lfs -text
datasets/exhaustive_7_4/cds_makespan.npy CHANGED
Binary files a/datasets/exhaustive_7_4/cds_makespan.npy and b/datasets/exhaustive_7_4/cds_makespan.npy differ
 
datasets/exhaustive_7_4/min_makespan.npy CHANGED
Binary files a/datasets/exhaustive_7_4/min_makespan.npy and b/datasets/exhaustive_7_4/min_makespan.npy differ
 
datasets/exhaustive_7_4/neh_makespan.npy CHANGED
Binary files a/datasets/exhaustive_7_4/neh_makespan.npy and b/datasets/exhaustive_7_4/neh_makespan.npy differ
 
datasets/exhaustive_7_4/palmer_makespan.npy CHANGED
Binary files a/datasets/exhaustive_7_4/palmer_makespan.npy and b/datasets/exhaustive_7_4/palmer_makespan.npy differ
 
datasets/exhaustive_7_4/pfsp_instance.npy CHANGED
Binary files a/datasets/exhaustive_7_4/pfsp_instance.npy and b/datasets/exhaustive_7_4/pfsp_instance.npy differ
 
datasets/exhaustive_7_4/top_0/cds_makespan.npy CHANGED
Binary files a/datasets/exhaustive_7_4/top_0/cds_makespan.npy and b/datasets/exhaustive_7_4/top_0/cds_makespan.npy differ
 
datasets/exhaustive_7_4/top_0/makespans_val.npy CHANGED
Binary files a/datasets/exhaustive_7_4/top_0/makespans_val.npy and b/datasets/exhaustive_7_4/top_0/makespans_val.npy differ
 
datasets/exhaustive_7_4/top_0/min_makespan.npy CHANGED
Binary files a/datasets/exhaustive_7_4/top_0/min_makespan.npy and b/datasets/exhaustive_7_4/top_0/min_makespan.npy differ
 
datasets/exhaustive_7_4/top_0/neh_makespan.npy CHANGED
Binary files a/datasets/exhaustive_7_4/top_0/neh_makespan.npy and b/datasets/exhaustive_7_4/top_0/neh_makespan.npy differ
 
datasets/exhaustive_7_4/top_0/palmer_makespan.npy CHANGED
Binary files a/datasets/exhaustive_7_4/top_0/palmer_makespan.npy and b/datasets/exhaustive_7_4/top_0/palmer_makespan.npy differ
 
datasets/exhaustive_7_4/top_0/pfsp_instance.npy CHANGED
Binary files a/datasets/exhaustive_7_4/top_0/pfsp_instance.npy and b/datasets/exhaustive_7_4/top_0/pfsp_instance.npy differ
 
datasets/exhaustive_7_4/top_0/schedules_val.npy CHANGED
Binary files a/datasets/exhaustive_7_4/top_0/schedules_val.npy and b/datasets/exhaustive_7_4/top_0/schedules_val.npy differ
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/.terminated_phase1 ADDED
File without changes
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/batch_losses.npy ADDED
Binary file (808 Bytes). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/checkpoints/best_checkpoint.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:72245b865e2da0caf998a9504c9d343e7e2da768ca43c65c14ad8d3ae8f0916f
3
+ size 76597843
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/checkpoints/last_checkpoint.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:30e488f31cfd97b9237bf318bac641e5c6563978c0f0b7c2415afbb1f9d769cf
3
+ size 76597843
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/last_batch_loss_idx.npy ADDED
Binary file (132 Bytes). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/last_val_loss_idx.npy ADDED
Binary file (132 Bytes). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/.terminated_phase2 ADDED
File without changes
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/actual_makespan.npy ADDED
Binary file (132 Bytes). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/checkpoints_phase2/best_checkpoint_phase2.pth ADDED
Binary file (24.6 kB). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/checkpoints_phase2/last_checkpoint_phase2.pth ADDED
Binary file (24.6 kB). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/last_losses_idx.npy ADDED
Binary file (136 Bytes). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/makespan_losses.npy ADDED
Binary file (12.1 kB). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/optimal_job_sequence.npy ADDED
Binary file (184 Bytes). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/recover_schedules.log ADDED
The diff for this file is too large to render. See raw diff
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/recover_schedules_pbar.log ADDED
@@ -0,0 +1 @@
 
 
1
+ Latent schedules optimization: 100%|██████████████████████| 1500/1500 [02:37<00:00, 9.53it/s, total loss=3.36e+3, makespan=0.124, sinkhorn=1.68e+3]
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/results.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"metadata": {"nb_samples": 5040, "nb_jobs": 7, "nb_machines": 4, "init_type": "exhaustive", "data_path": "../datasets/exhaustive_7_4", "seed": 97, "date_time": "2026_03_12_12_30_42", "nb_train_samples": 4284, "nb_val_samples": 756, "data_source": "../datasets/exhaustive_7_4"}, "train_parameters": {"data_dir": "../datasets/exhaustive_7_4/top_0", "block_size": 7, "vocab_size": 7, "n_embd": 256, "n_head": 16, "n_layer": 8, "ff_width": 4, "train_batch_size": 128, "val_batch_size": 256, "dropout": 0.0, "nb_epochs": 5, "early_stopping_patience": 15, "nb_iters": 170, "checkpoint_interval": 34, "decay_lr": true, "lr_partitions_ratios": [0.66, null], "lr_partitions_iters": [112, 58], "init_lr": 0.0001, "max_lr": 0.001, "min_lr": 5e-05, "lr_warmup_iters_ratio": 0.1, "lr_decay_iters_ratio": 0.95, "beta1": 0.9, "beta2": 0.95, "weight_decay": 10.0, "grad_clip": 1.0, "compile": "", "compile_mode": "default", "intermediate_schedules": true, "save_only_last_checkpoint": false}, "rs_parameters": {"init_mode": "random", "n_optimization_steps": 1500, "epsilon": 0.01, "nb_sinkhorn_iters": 40, "decay_ls": false, "ls_partitions_ratios": [0.66, null], "init_ls": 2, "max_ls": 10, "min_ls": 0.1, "ls_warmup_iters_ratio": 0.2, "ls_decay_iters_ratio": 0.9, "decay_lr": true, "lr_partitions_ratios": [0.66, null], "init_lr": 0.01, "max_lr": 0.1, "min_lr": 0.0001, "lr_warmup_iters_ratio": 0.1, "lr_decay_iters_ratio": 0.9}, "neh_makespan": 0.3810127079486847, "cds_makespan": 0.38176918029785156, "palmer_makespan": 0.37838244438171387, "best_makespan": 0.37652552127838135}
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/sinkhorn_losses.npy ADDED
Binary file (12.1 kB). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/total_losses.npy ADDED
Binary file (12.1 kB). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/recover/viz_rs.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/train.log ADDED
@@ -0,0 +1,450 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 2026-03-15 10:39:51.663 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_0/schedules_train.npy with shape (4284, 7)
2
+ 2026-03-15 10:39:51.664 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_0/makespans_train.npy with shape (4284, 7)
3
+ 2026-03-15 10:39:51.665 | INFO | train:train:321 - schedules.shape: torch.Size([128, 7])
4
+ 2026-03-15 10:39:51.666 | INFO | train:train:322 - makespans.shape: torch.Size([128, 7])
5
+ 2026-03-15 10:39:51.666 | INFO | train:train:388 - data_dir: ../datasets/exhaustive_7_4/top_0
6
+ 2026-03-15 10:39:51.666 | INFO | train:train:389 - block_size: 7
7
+ 2026-03-15 10:39:51.666 | INFO | train:train:390 - vocab_size: 7
8
+ 2026-03-15 10:39:51.667 | INFO | train:train:391 - n_embd: 256
9
+ 2026-03-15 10:39:51.667 | INFO | train:train:392 - n_head: 16
10
+ 2026-03-15 10:39:51.667 | INFO | train:train:393 - n_layer: 8
11
+ 2026-03-15 10:39:51.668 | INFO | train:train:394 - ff_width: 4
12
+ 2026-03-15 10:39:51.668 | INFO | train:train:395 - train_batch_size: 128
13
+ 2026-03-15 10:39:51.668 | INFO | train:train:396 - val_batch_size: 256
14
+ 2026-03-15 10:39:51.668 | INFO | train:train:397 - dropout: 0.0
15
+ 2026-03-15 10:39:51.669 | INFO | train:train:398 - nb_epochs: 5
16
+ 2026-03-15 10:39:51.669 | INFO | train:train:399 - early_stopping_patience: 15
17
+ 2026-03-15 10:39:51.669 | INFO | train:train:400 - nb_iters: 170
18
+ 2026-03-15 10:39:51.669 | INFO | train:train:401 - checkpoint_interval: 34
19
+ 2026-03-15 10:39:51.670 | INFO | train:train:402 - decay_lr: True
20
+ 2026-03-15 10:39:51.670 | INFO | train:train:403 - lr_partitions_ratios: [0.66, None]
21
+ 2026-03-15 10:39:51.670 | INFO | train:train:404 - lr_partitions_iters: [112, 58]
22
+ 2026-03-15 10:39:51.671 | INFO | train:train:405 - init_lr: 0.0001
23
+ 2026-03-15 10:39:51.671 | INFO | train:train:406 - max_lr: 0.001
24
+ 2026-03-15 10:39:51.671 | INFO | train:train:407 - min_lr: 5e-05
25
+ 2026-03-15 10:39:51.671 | INFO | train:train:408 - lr_warmup_iters_ratio: 0.1
26
+ 2026-03-15 10:39:51.672 | INFO | train:train:409 - lr_decay_iters_ratio: 0.95
27
+ 2026-03-15 10:39:51.672 | INFO | train:train:410 - beta1: 0.9
28
+ 2026-03-15 10:39:51.672 | INFO | train:train:411 - beta2: 0.95
29
+ 2026-03-15 10:39:51.672 | INFO | train:train:412 - weight_decay: 10.0
30
+ 2026-03-15 10:39:51.673 | INFO | train:train:413 - grad_clip: 1.0
31
+ 2026-03-15 10:39:51.673 | INFO | train:train:414 - compile:
32
+ 2026-03-15 10:39:51.673 | INFO | train:train:415 - compile_mode: default
33
+ 2026-03-15 10:39:51.673 | INFO | train:train:416 - intermediate_schedules: True
34
+ 2026-03-15 10:39:51.674 | INFO | train:train:417 - save_only_last_checkpoint: False
35
+ 2026-03-15 10:39:51.741 | INFO | train:train:485 - The model has 6M trainable parameters
36
+ 2026-03-15 10:39:51.743 | INFO | train:train:506 - num decayed parameter tensors: 538, with 6,307,840 parameters
37
+ 2026-03-15 10:39:51.743 | INFO | train:train:507 - num non-decayed parameter tensors: 27, with 6,657 parameters
38
+ 2026-03-15 10:39:51.743 | INFO | train:train:511 - using fused AdamW: True
39
+ 2026-03-15 10:39:52.328 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_0/schedules_val.npy with shape (756, 7)
40
+ 2026-03-15 10:39:52.329 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_0/makespans_val.npy with shape (756, 7)
41
+ 2026-03-15 10:40:20.869 | INFO | train:train:698 - Best validation loss: 0.0007
42
+ 2026-03-15 10:40:20.876 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_1/schedules_train.npy with shape (4280, 7)
43
+ 2026-03-15 10:40:20.876 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_1/makespans_train.npy with shape (4280, 7)
44
+ 2026-03-15 10:40:20.894 | INFO | train:train:321 - schedules.shape: torch.Size([128, 7])
45
+ 2026-03-15 10:40:20.895 | INFO | train:train:322 - makespans.shape: torch.Size([128, 7])
46
+ 2026-03-15 10:40:20.895 | INFO | train:train:388 - data_dir: ../datasets/exhaustive_7_4/top_1
47
+ 2026-03-15 10:40:20.895 | INFO | train:train:389 - block_size: 7
48
+ 2026-03-15 10:40:20.896 | INFO | train:train:390 - vocab_size: 7
49
+ 2026-03-15 10:40:20.896 | INFO | train:train:391 - n_embd: 256
50
+ 2026-03-15 10:40:20.896 | INFO | train:train:392 - n_head: 16
51
+ 2026-03-15 10:40:20.896 | INFO | train:train:393 - n_layer: 8
52
+ 2026-03-15 10:40:20.897 | INFO | train:train:394 - ff_width: 4
53
+ 2026-03-15 10:40:20.897 | INFO | train:train:395 - train_batch_size: 128
54
+ 2026-03-15 10:40:20.897 | INFO | train:train:396 - val_batch_size: 256
55
+ 2026-03-15 10:40:20.897 | INFO | train:train:397 - dropout: 0.0
56
+ 2026-03-15 10:40:20.898 | INFO | train:train:398 - nb_epochs: 5
57
+ 2026-03-15 10:40:20.898 | INFO | train:train:399 - early_stopping_patience: 15
58
+ 2026-03-15 10:40:20.898 | INFO | train:train:400 - nb_iters: 170
59
+ 2026-03-15 10:40:20.899 | INFO | train:train:401 - checkpoint_interval: 34
60
+ 2026-03-15 10:40:20.899 | INFO | train:train:402 - decay_lr: True
61
+ 2026-03-15 10:40:20.899 | INFO | train:train:403 - lr_partitions_ratios: [0.66, None]
62
+ 2026-03-15 10:40:20.899 | INFO | train:train:404 - lr_partitions_iters: [112, 58]
63
+ 2026-03-15 10:40:20.900 | INFO | train:train:405 - init_lr: 0.0001
64
+ 2026-03-15 10:40:20.900 | INFO | train:train:406 - max_lr: 0.001
65
+ 2026-03-15 10:40:20.900 | INFO | train:train:407 - min_lr: 5e-05
66
+ 2026-03-15 10:40:20.900 | INFO | train:train:408 - lr_warmup_iters_ratio: 0.1
67
+ 2026-03-15 10:40:20.901 | INFO | train:train:409 - lr_decay_iters_ratio: 0.95
68
+ 2026-03-15 10:40:20.901 | INFO | train:train:410 - beta1: 0.9
69
+ 2026-03-15 10:40:20.901 | INFO | train:train:411 - beta2: 0.95
70
+ 2026-03-15 10:40:20.901 | INFO | train:train:412 - weight_decay: 0.1
71
+ 2026-03-15 10:40:20.902 | INFO | train:train:413 - grad_clip: 1.0
72
+ 2026-03-15 10:40:20.902 | INFO | train:train:414 - compile:
73
+ 2026-03-15 10:40:20.902 | INFO | train:train:415 - compile_mode: default
74
+ 2026-03-15 10:40:20.902 | INFO | train:train:416 - intermediate_schedules: True
75
+ 2026-03-15 10:40:20.903 | INFO | train:train:417 - save_only_last_checkpoint: False
76
+ 2026-03-15 10:40:20.978 | INFO | train:train:485 - The model has 6M trainable parameters
77
+ 2026-03-15 10:40:20.979 | INFO | train:train:506 - num decayed parameter tensors: 538, with 6,307,840 parameters
78
+ 2026-03-15 10:40:20.980 | INFO | train:train:507 - num non-decayed parameter tensors: 27, with 6,657 parameters
79
+ 2026-03-15 10:40:20.980 | INFO | train:train:511 - using fused AdamW: True
80
+ 2026-03-15 10:40:21.073 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_1/schedules_val.npy with shape (756, 7)
81
+ 2026-03-15 10:40:21.074 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_1/makespans_val.npy with shape (756, 7)
82
+ 2026-03-15 10:40:49.531 | INFO | train:train:698 - Best validation loss: 0.0009
83
+ 2026-03-15 10:40:49.539 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_1/schedules_train.npy with shape (4280, 7)
84
+ 2026-03-15 10:40:49.540 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_1/makespans_train.npy with shape (4280, 7)
85
+ 2026-03-15 10:40:49.541 | INFO | train:train:321 - schedules.shape: torch.Size([128, 7])
86
+ 2026-03-15 10:40:49.541 | INFO | train:train:322 - makespans.shape: torch.Size([128, 7])
87
+ 2026-03-15 10:40:49.542 | INFO | train:train:388 - data_dir: ../datasets/exhaustive_7_4/top_1
88
+ 2026-03-15 10:40:49.542 | INFO | train:train:389 - block_size: 7
89
+ 2026-03-15 10:40:49.542 | INFO | train:train:390 - vocab_size: 7
90
+ 2026-03-15 10:40:49.543 | INFO | train:train:391 - n_embd: 256
91
+ 2026-03-15 10:40:49.543 | INFO | train:train:392 - n_head: 16
92
+ 2026-03-15 10:40:49.543 | INFO | train:train:393 - n_layer: 8
93
+ 2026-03-15 10:40:49.543 | INFO | train:train:394 - ff_width: 4
94
+ 2026-03-15 10:40:49.544 | INFO | train:train:395 - train_batch_size: 128
95
+ 2026-03-15 10:40:49.544 | INFO | train:train:396 - val_batch_size: 256
96
+ 2026-03-15 10:40:49.544 | INFO | train:train:397 - dropout: 0.0
97
+ 2026-03-15 10:40:49.545 | INFO | train:train:398 - nb_epochs: 5
98
+ 2026-03-15 10:40:49.545 | INFO | train:train:399 - early_stopping_patience: 15
99
+ 2026-03-15 10:40:49.545 | INFO | train:train:400 - nb_iters: 170
100
+ 2026-03-15 10:40:49.545 | INFO | train:train:401 - checkpoint_interval: 34
101
+ 2026-03-15 10:40:49.546 | INFO | train:train:402 - decay_lr: True
102
+ 2026-03-15 10:40:49.546 | INFO | train:train:403 - lr_partitions_ratios: [0.66, None]
103
+ 2026-03-15 10:40:49.546 | INFO | train:train:404 - lr_partitions_iters: [112, 58]
104
+ 2026-03-15 10:40:49.547 | INFO | train:train:405 - init_lr: 0.0001
105
+ 2026-03-15 10:40:49.547 | INFO | train:train:406 - max_lr: 0.001
106
+ 2026-03-15 10:40:49.547 | INFO | train:train:407 - min_lr: 5e-05
107
+ 2026-03-15 10:40:49.548 | INFO | train:train:408 - lr_warmup_iters_ratio: 0.1
108
+ 2026-03-15 10:40:49.548 | INFO | train:train:409 - lr_decay_iters_ratio: 0.95
109
+ 2026-03-15 10:40:49.548 | INFO | train:train:410 - beta1: 0.9
110
+ 2026-03-15 10:40:49.548 | INFO | train:train:411 - beta2: 0.95
111
+ 2026-03-15 10:40:49.549 | INFO | train:train:412 - weight_decay: 1.0
112
+ 2026-03-15 10:40:49.549 | INFO | train:train:413 - grad_clip: 1.0
113
+ 2026-03-15 10:40:49.549 | INFO | train:train:414 - compile:
114
+ 2026-03-15 10:40:49.550 | INFO | train:train:415 - compile_mode: default
115
+ 2026-03-15 10:40:49.550 | INFO | train:train:416 - intermediate_schedules: True
116
+ 2026-03-15 10:40:49.550 | INFO | train:train:417 - save_only_last_checkpoint: False
117
+ 2026-03-15 10:40:49.690 | INFO | train:train:485 - The model has 6M trainable parameters
118
+ 2026-03-15 10:40:49.692 | INFO | train:train:506 - num decayed parameter tensors: 538, with 6,307,840 parameters
119
+ 2026-03-15 10:40:49.693 | INFO | train:train:507 - num non-decayed parameter tensors: 27, with 6,657 parameters
120
+ 2026-03-15 10:40:49.693 | INFO | train:train:511 - using fused AdamW: True
121
+ 2026-03-15 10:40:49.698 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_1/schedules_val.npy with shape (756, 7)
122
+ 2026-03-15 10:40:49.699 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_1/makespans_val.npy with shape (756, 7)
123
+ 2026-03-15 10:41:17.926 | INFO | train:train:698 - Best validation loss: 0.0010
124
+ 2026-03-15 10:41:17.933 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_1/schedules_train.npy with shape (4280, 7)
125
+ 2026-03-15 10:41:17.934 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_1/makespans_train.npy with shape (4280, 7)
126
+ 2026-03-15 10:41:17.935 | INFO | train:train:321 - schedules.shape: torch.Size([128, 7])
127
+ 2026-03-15 10:41:17.936 | INFO | train:train:322 - makespans.shape: torch.Size([128, 7])
128
+ 2026-03-15 10:41:17.936 | INFO | train:train:388 - data_dir: ../datasets/exhaustive_7_4/top_1
129
+ 2026-03-15 10:41:17.936 | INFO | train:train:389 - block_size: 7
130
+ 2026-03-15 10:41:17.937 | INFO | train:train:390 - vocab_size: 7
131
+ 2026-03-15 10:41:17.937 | INFO | train:train:391 - n_embd: 256
132
+ 2026-03-15 10:41:17.937 | INFO | train:train:392 - n_head: 16
133
+ 2026-03-15 10:41:17.937 | INFO | train:train:393 - n_layer: 8
134
+ 2026-03-15 10:41:17.938 | INFO | train:train:394 - ff_width: 4
135
+ 2026-03-15 10:41:17.938 | INFO | train:train:395 - train_batch_size: 128
136
+ 2026-03-15 10:41:17.938 | INFO | train:train:396 - val_batch_size: 256
137
+ 2026-03-15 10:41:17.939 | INFO | train:train:397 - dropout: 0.0
138
+ 2026-03-15 10:41:17.939 | INFO | train:train:398 - nb_epochs: 5
139
+ 2026-03-15 10:41:17.939 | INFO | train:train:399 - early_stopping_patience: 15
140
+ 2026-03-15 10:41:17.939 | INFO | train:train:400 - nb_iters: 170
141
+ 2026-03-15 10:41:17.940 | INFO | train:train:401 - checkpoint_interval: 34
142
+ 2026-03-15 10:41:17.940 | INFO | train:train:402 - decay_lr: True
143
+ 2026-03-15 10:41:17.940 | INFO | train:train:403 - lr_partitions_ratios: [0.66, None]
144
+ 2026-03-15 10:41:17.941 | INFO | train:train:404 - lr_partitions_iters: [112, 58]
145
+ 2026-03-15 10:41:17.941 | INFO | train:train:405 - init_lr: 0.0001
146
+ 2026-03-15 10:41:17.941 | INFO | train:train:406 - max_lr: 0.001
147
+ 2026-03-15 10:41:17.941 | INFO | train:train:407 - min_lr: 5e-05
148
+ 2026-03-15 10:41:17.942 | INFO | train:train:408 - lr_warmup_iters_ratio: 0.1
149
+ 2026-03-15 10:41:17.942 | INFO | train:train:409 - lr_decay_iters_ratio: 0.95
150
+ 2026-03-15 10:41:17.942 | INFO | train:train:410 - beta1: 0.9
151
+ 2026-03-15 10:41:17.943 | INFO | train:train:411 - beta2: 0.95
152
+ 2026-03-15 10:41:17.943 | INFO | train:train:412 - weight_decay: 5.0
153
+ 2026-03-15 10:41:17.943 | INFO | train:train:413 - grad_clip: 1.0
154
+ 2026-03-15 10:41:17.943 | INFO | train:train:414 - compile:
155
+ 2026-03-15 10:41:17.944 | INFO | train:train:415 - compile_mode: default
156
+ 2026-03-15 10:41:17.944 | INFO | train:train:416 - intermediate_schedules: True
157
+ 2026-03-15 10:41:17.944 | INFO | train:train:417 - save_only_last_checkpoint: False
158
+ 2026-03-15 10:41:18.013 | INFO | train:train:485 - The model has 6M trainable parameters
159
+ 2026-03-15 10:41:18.015 | INFO | train:train:506 - num decayed parameter tensors: 538, with 6,307,840 parameters
160
+ 2026-03-15 10:41:18.015 | INFO | train:train:507 - num non-decayed parameter tensors: 27, with 6,657 parameters
161
+ 2026-03-15 10:41:18.016 | INFO | train:train:511 - using fused AdamW: True
162
+ 2026-03-15 10:41:18.023 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_1/schedules_val.npy with shape (756, 7)
163
+ 2026-03-15 10:41:18.024 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_1/makespans_val.npy with shape (756, 7)
164
+ 2026-03-15 10:41:46.764 | INFO | train:train:698 - Best validation loss: 0.0009
165
+ 2026-03-15 10:41:46.772 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_1/schedules_train.npy with shape (4280, 7)
166
+ 2026-03-15 10:41:46.772 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_1/makespans_train.npy with shape (4280, 7)
167
+ 2026-03-15 10:41:46.774 | INFO | train:train:321 - schedules.shape: torch.Size([128, 7])
168
+ 2026-03-15 10:41:46.774 | INFO | train:train:322 - makespans.shape: torch.Size([128, 7])
169
+ 2026-03-15 10:41:46.774 | INFO | train:train:388 - data_dir: ../datasets/exhaustive_7_4/top_1
170
+ 2026-03-15 10:41:46.775 | INFO | train:train:389 - block_size: 7
171
+ 2026-03-15 10:41:46.775 | INFO | train:train:390 - vocab_size: 7
172
+ 2026-03-15 10:41:46.775 | INFO | train:train:391 - n_embd: 256
173
+ 2026-03-15 10:41:46.776 | INFO | train:train:392 - n_head: 16
174
+ 2026-03-15 10:41:46.776 | INFO | train:train:393 - n_layer: 8
175
+ 2026-03-15 10:41:46.776 | INFO | train:train:394 - ff_width: 4
176
+ 2026-03-15 10:41:46.777 | INFO | train:train:395 - train_batch_size: 128
177
+ 2026-03-15 10:41:46.777 | INFO | train:train:396 - val_batch_size: 256
178
+ 2026-03-15 10:41:46.777 | INFO | train:train:397 - dropout: 0.0
179
+ 2026-03-15 10:41:46.777 | INFO | train:train:398 - nb_epochs: 5
180
+ 2026-03-15 10:41:46.778 | INFO | train:train:399 - early_stopping_patience: 15
181
+ 2026-03-15 10:41:46.778 | INFO | train:train:400 - nb_iters: 170
182
+ 2026-03-15 10:41:46.778 | INFO | train:train:401 - checkpoint_interval: 34
183
+ 2026-03-15 10:41:46.779 | INFO | train:train:402 - decay_lr: True
184
+ 2026-03-15 10:41:46.779 | INFO | train:train:403 - lr_partitions_ratios: [0.66, None]
185
+ 2026-03-15 10:41:46.779 | INFO | train:train:404 - lr_partitions_iters: [112, 58]
186
+ 2026-03-15 10:41:46.780 | INFO | train:train:405 - init_lr: 0.0001
187
+ 2026-03-15 10:41:46.780 | INFO | train:train:406 - max_lr: 0.001
188
+ 2026-03-15 10:41:46.780 | INFO | train:train:407 - min_lr: 5e-05
189
+ 2026-03-15 10:41:46.781 | INFO | train:train:408 - lr_warmup_iters_ratio: 0.1
190
+ 2026-03-15 10:41:46.781 | INFO | train:train:409 - lr_decay_iters_ratio: 0.95
191
+ 2026-03-15 10:41:46.781 | INFO | train:train:410 - beta1: 0.9
192
+ 2026-03-15 10:41:46.782 | INFO | train:train:411 - beta2: 0.95
193
+ 2026-03-15 10:41:46.782 | INFO | train:train:412 - weight_decay: 10.0
194
+ 2026-03-15 10:41:46.782 | INFO | train:train:413 - grad_clip: 1.0
195
+ 2026-03-15 10:41:46.783 | INFO | train:train:414 - compile:
196
+ 2026-03-15 10:41:46.783 | INFO | train:train:415 - compile_mode: default
197
+ 2026-03-15 10:41:46.783 | INFO | train:train:416 - intermediate_schedules: True
198
+ 2026-03-15 10:41:46.784 | INFO | train:train:417 - save_only_last_checkpoint: False
199
+ 2026-03-15 10:41:47.003 | INFO | train:train:485 - The model has 6M trainable parameters
200
+ 2026-03-15 10:41:47.005 | INFO | train:train:506 - num decayed parameter tensors: 538, with 6,307,840 parameters
201
+ 2026-03-15 10:41:47.005 | INFO | train:train:507 - num non-decayed parameter tensors: 27, with 6,657 parameters
202
+ 2026-03-15 10:41:47.005 | INFO | train:train:511 - using fused AdamW: True
203
+ 2026-03-15 10:41:47.010 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_1/schedules_val.npy with shape (756, 7)
204
+ 2026-03-15 10:41:47.011 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_1/makespans_val.npy with shape (756, 7)
205
+ 2026-03-15 10:42:16.221 | INFO | train:train:698 - Best validation loss: 0.0014
206
+ 2026-03-15 10:42:16.229 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_2/schedules_train.npy with shape (4278, 7)
207
+ 2026-03-15 10:42:16.230 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_2/makespans_train.npy with shape (4278, 7)
208
+ 2026-03-15 10:42:16.232 | INFO | train:train:321 - schedules.shape: torch.Size([128, 7])
209
+ 2026-03-15 10:42:16.232 | INFO | train:train:322 - makespans.shape: torch.Size([128, 7])
210
+ 2026-03-15 10:42:16.233 | INFO | train:train:388 - data_dir: ../datasets/exhaustive_7_4/top_2
211
+ 2026-03-15 10:42:16.233 | INFO | train:train:389 - block_size: 7
212
+ 2026-03-15 10:42:16.233 | INFO | train:train:390 - vocab_size: 7
213
+ 2026-03-15 10:42:16.234 | INFO | train:train:391 - n_embd: 256
214
+ 2026-03-15 10:42:16.234 | INFO | train:train:392 - n_head: 16
215
+ 2026-03-15 10:42:16.234 | INFO | train:train:393 - n_layer: 8
216
+ 2026-03-15 10:42:16.235 | INFO | train:train:394 - ff_width: 4
217
+ 2026-03-15 10:42:16.235 | INFO | train:train:395 - train_batch_size: 128
218
+ 2026-03-15 10:42:16.235 | INFO | train:train:396 - val_batch_size: 256
219
+ 2026-03-15 10:42:16.236 | INFO | train:train:397 - dropout: 0.0
220
+ 2026-03-15 10:42:16.236 | INFO | train:train:398 - nb_epochs: 5
221
+ 2026-03-15 10:42:16.236 | INFO | train:train:399 - early_stopping_patience: 15
222
+ 2026-03-15 10:42:16.236 | INFO | train:train:400 - nb_iters: 170
223
+ 2026-03-15 10:42:16.237 | INFO | train:train:401 - checkpoint_interval: 34
224
+ 2026-03-15 10:42:16.237 | INFO | train:train:402 - decay_lr: True
225
+ 2026-03-15 10:42:16.237 | INFO | train:train:403 - lr_partitions_ratios: [0.66, None]
226
+ 2026-03-15 10:42:16.238 | INFO | train:train:404 - lr_partitions_iters: [112, 58]
227
+ 2026-03-15 10:42:16.238 | INFO | train:train:405 - init_lr: 0.0001
228
+ 2026-03-15 10:42:16.238 | INFO | train:train:406 - max_lr: 0.001
229
+ 2026-03-15 10:42:16.239 | INFO | train:train:407 - min_lr: 5e-05
230
+ 2026-03-15 10:42:16.239 | INFO | train:train:408 - lr_warmup_iters_ratio: 0.1
231
+ 2026-03-15 10:42:16.239 | INFO | train:train:409 - lr_decay_iters_ratio: 0.95
232
+ 2026-03-15 10:42:16.239 | INFO | train:train:410 - beta1: 0.9
233
+ 2026-03-15 10:42:16.240 | INFO | train:train:411 - beta2: 0.95
234
+ 2026-03-15 10:42:16.240 | INFO | train:train:412 - weight_decay: 0.1
235
+ 2026-03-15 10:42:16.240 | INFO | train:train:413 - grad_clip: 1.0
236
+ 2026-03-15 10:42:16.241 | INFO | train:train:414 - compile:
237
+ 2026-03-15 10:42:16.241 | INFO | train:train:415 - compile_mode: default
238
+ 2026-03-15 10:42:16.241 | INFO | train:train:416 - intermediate_schedules: True
239
+ 2026-03-15 10:42:16.241 | INFO | train:train:417 - save_only_last_checkpoint: False
240
+ 2026-03-15 10:42:16.378 | INFO | train:train:485 - The model has 6M trainable parameters
241
+ 2026-03-15 10:42:16.380 | INFO | train:train:506 - num decayed parameter tensors: 538, with 6,307,840 parameters
242
+ 2026-03-15 10:42:16.381 | INFO | train:train:507 - num non-decayed parameter tensors: 27, with 6,657 parameters
243
+ 2026-03-15 10:42:16.381 | INFO | train:train:511 - using fused AdamW: True
244
+ 2026-03-15 10:42:16.386 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_2/schedules_val.npy with shape (755, 7)
245
+ 2026-03-15 10:42:16.387 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_2/makespans_val.npy with shape (755, 7)
246
+ 2026-03-15 10:42:45.953 | INFO | train:train:698 - Best validation loss: 0.0014
247
+ 2026-03-15 10:42:45.961 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_2/schedules_train.npy with shape (4278, 7)
248
+ 2026-03-15 10:42:45.961 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_2/makespans_train.npy with shape (4278, 7)
249
+ 2026-03-15 10:42:45.963 | INFO | train:train:321 - schedules.shape: torch.Size([128, 7])
250
+ 2026-03-15 10:42:45.963 | INFO | train:train:322 - makespans.shape: torch.Size([128, 7])
251
+ 2026-03-15 10:42:45.963 | INFO | train:train:388 - data_dir: ../datasets/exhaustive_7_4/top_2
252
+ 2026-03-15 10:42:45.964 | INFO | train:train:389 - block_size: 7
253
+ 2026-03-15 10:42:45.964 | INFO | train:train:390 - vocab_size: 7
254
+ 2026-03-15 10:42:45.964 | INFO | train:train:391 - n_embd: 256
255
+ 2026-03-15 10:42:45.965 | INFO | train:train:392 - n_head: 16
256
+ 2026-03-15 10:42:45.965 | INFO | train:train:393 - n_layer: 8
257
+ 2026-03-15 10:42:45.965 | INFO | train:train:394 - ff_width: 4
258
+ 2026-03-15 10:42:45.966 | INFO | train:train:395 - train_batch_size: 128
259
+ 2026-03-15 10:42:45.966 | INFO | train:train:396 - val_batch_size: 256
260
+ 2026-03-15 10:42:45.966 | INFO | train:train:397 - dropout: 0.0
261
+ 2026-03-15 10:42:45.966 | INFO | train:train:398 - nb_epochs: 5
262
+ 2026-03-15 10:42:45.967 | INFO | train:train:399 - early_stopping_patience: 15
263
+ 2026-03-15 10:42:45.967 | INFO | train:train:400 - nb_iters: 170
264
+ 2026-03-15 10:42:45.967 | INFO | train:train:401 - checkpoint_interval: 34
265
+ 2026-03-15 10:42:45.968 | INFO | train:train:402 - decay_lr: True
266
+ 2026-03-15 10:42:45.968 | INFO | train:train:403 - lr_partitions_ratios: [0.66, None]
267
+ 2026-03-15 10:42:45.968 | INFO | train:train:404 - lr_partitions_iters: [112, 58]
268
+ 2026-03-15 10:42:45.969 | INFO | train:train:405 - init_lr: 0.0001
269
+ 2026-03-15 10:42:45.969 | INFO | train:train:406 - max_lr: 0.001
270
+ 2026-03-15 10:42:45.969 | INFO | train:train:407 - min_lr: 5e-05
271
+ 2026-03-15 10:42:45.970 | INFO | train:train:408 - lr_warmup_iters_ratio: 0.1
272
+ 2026-03-15 10:42:45.970 | INFO | train:train:409 - lr_decay_iters_ratio: 0.95
273
+ 2026-03-15 10:42:45.970 | INFO | train:train:410 - beta1: 0.9
274
+ 2026-03-15 10:42:45.970 | INFO | train:train:411 - beta2: 0.95
275
+ 2026-03-15 10:42:45.971 | INFO | train:train:412 - weight_decay: 1.0
276
+ 2026-03-15 10:42:45.971 | INFO | train:train:413 - grad_clip: 1.0
277
+ 2026-03-15 10:42:45.971 | INFO | train:train:414 - compile:
278
+ 2026-03-15 10:42:45.972 | INFO | train:train:415 - compile_mode: default
279
+ 2026-03-15 10:42:45.972 | INFO | train:train:416 - intermediate_schedules: True
280
+ 2026-03-15 10:42:45.972 | INFO | train:train:417 - save_only_last_checkpoint: False
281
+ 2026-03-15 10:42:46.113 | INFO | train:train:485 - The model has 6M trainable parameters
282
+ 2026-03-15 10:42:46.116 | INFO | train:train:506 - num decayed parameter tensors: 538, with 6,307,840 parameters
283
+ 2026-03-15 10:42:46.116 | INFO | train:train:507 - num non-decayed parameter tensors: 27, with 6,657 parameters
284
+ 2026-03-15 10:42:46.117 | INFO | train:train:511 - using fused AdamW: True
285
+ 2026-03-15 10:42:46.121 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_2/schedules_val.npy with shape (755, 7)
286
+ 2026-03-15 10:42:46.122 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_2/makespans_val.npy with shape (755, 7)
287
+ 2026-03-15 10:43:16.005 | INFO | train:train:698 - Best validation loss: 0.0019
288
+ 2026-03-15 10:43:16.013 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_2/schedules_train.npy with shape (4278, 7)
289
+ 2026-03-15 10:43:16.014 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_2/makespans_train.npy with shape (4278, 7)
290
+ 2026-03-15 10:43:16.015 | INFO | train:train:321 - schedules.shape: torch.Size([128, 7])
291
+ 2026-03-15 10:43:16.015 | INFO | train:train:322 - makespans.shape: torch.Size([128, 7])
292
+ 2026-03-15 10:43:16.016 | INFO | train:train:388 - data_dir: ../datasets/exhaustive_7_4/top_2
293
+ 2026-03-15 10:43:16.016 | INFO | train:train:389 - block_size: 7
294
+ 2026-03-15 10:43:16.016 | INFO | train:train:390 - vocab_size: 7
295
+ 2026-03-15 10:43:16.017 | INFO | train:train:391 - n_embd: 256
296
+ 2026-03-15 10:43:16.017 | INFO | train:train:392 - n_head: 16
297
+ 2026-03-15 10:43:16.017 | INFO | train:train:393 - n_layer: 8
298
+ 2026-03-15 10:43:16.018 | INFO | train:train:394 - ff_width: 4
299
+ 2026-03-15 10:43:16.018 | INFO | train:train:395 - train_batch_size: 128
300
+ 2026-03-15 10:43:16.018 | INFO | train:train:396 - val_batch_size: 256
301
+ 2026-03-15 10:43:16.019 | INFO | train:train:397 - dropout: 0.0
302
+ 2026-03-15 10:43:16.019 | INFO | train:train:398 - nb_epochs: 5
303
+ 2026-03-15 10:43:16.019 | INFO | train:train:399 - early_stopping_patience: 15
304
+ 2026-03-15 10:43:16.019 | INFO | train:train:400 - nb_iters: 170
305
+ 2026-03-15 10:43:16.020 | INFO | train:train:401 - checkpoint_interval: 34
306
+ 2026-03-15 10:43:16.020 | INFO | train:train:402 - decay_lr: True
307
+ 2026-03-15 10:43:16.020 | INFO | train:train:403 - lr_partitions_ratios: [0.66, None]
308
+ 2026-03-15 10:43:16.021 | INFO | train:train:404 - lr_partitions_iters: [112, 58]
309
+ 2026-03-15 10:43:16.021 | INFO | train:train:405 - init_lr: 0.0001
310
+ 2026-03-15 10:43:16.021 | INFO | train:train:406 - max_lr: 0.001
311
+ 2026-03-15 10:43:16.022 | INFO | train:train:407 - min_lr: 5e-05
312
+ 2026-03-15 10:43:16.022 | INFO | train:train:408 - lr_warmup_iters_ratio: 0.1
313
+ 2026-03-15 10:43:16.022 | INFO | train:train:409 - lr_decay_iters_ratio: 0.95
314
+ 2026-03-15 10:43:16.023 | INFO | train:train:410 - beta1: 0.9
315
+ 2026-03-15 10:43:16.023 | INFO | train:train:411 - beta2: 0.95
316
+ 2026-03-15 10:43:16.023 | INFO | train:train:412 - weight_decay: 5.0
317
+ 2026-03-15 10:43:16.024 | INFO | train:train:413 - grad_clip: 1.0
318
+ 2026-03-15 10:43:16.024 | INFO | train:train:414 - compile:
319
+ 2026-03-15 10:43:16.024 | INFO | train:train:415 - compile_mode: default
320
+ 2026-03-15 10:43:16.024 | INFO | train:train:416 - intermediate_schedules: True
321
+ 2026-03-15 10:43:16.025 | INFO | train:train:417 - save_only_last_checkpoint: False
322
+ 2026-03-15 10:43:16.250 | INFO | train:train:485 - The model has 6M trainable parameters
323
+ 2026-03-15 10:43:16.252 | INFO | train:train:506 - num decayed parameter tensors: 538, with 6,307,840 parameters
324
+ 2026-03-15 10:43:16.252 | INFO | train:train:507 - num non-decayed parameter tensors: 27, with 6,657 parameters
325
+ 2026-03-15 10:43:16.252 | INFO | train:train:511 - using fused AdamW: True
326
+ 2026-03-15 10:43:16.276 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_2/schedules_val.npy with shape (755, 7)
327
+ 2026-03-15 10:43:16.276 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_2/makespans_val.npy with shape (755, 7)
328
+ 2026-03-15 10:43:44.461 | INFO | train:train:698 - Best validation loss: 0.0006
329
+ 2026-03-15 10:43:44.469 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_2/schedules_train.npy with shape (4278, 7)
330
+ 2026-03-15 10:43:44.470 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_2/makespans_train.npy with shape (4278, 7)
331
+ 2026-03-15 10:43:44.471 | INFO | train:train:321 - schedules.shape: torch.Size([128, 7])
332
+ 2026-03-15 10:43:44.471 | INFO | train:train:322 - makespans.shape: torch.Size([128, 7])
333
+ 2026-03-15 10:43:44.472 | INFO | train:train:388 - data_dir: ../datasets/exhaustive_7_4/top_2
334
+ 2026-03-15 10:43:44.472 | INFO | train:train:389 - block_size: 7
335
+ 2026-03-15 10:43:44.472 | INFO | train:train:390 - vocab_size: 7
336
+ 2026-03-15 10:43:44.473 | INFO | train:train:391 - n_embd: 256
337
+ 2026-03-15 10:43:44.473 | INFO | train:train:392 - n_head: 16
338
+ 2026-03-15 10:43:44.473 | INFO | train:train:393 - n_layer: 8
339
+ 2026-03-15 10:43:44.474 | INFO | train:train:394 - ff_width: 4
340
+ 2026-03-15 10:43:44.474 | INFO | train:train:395 - train_batch_size: 128
341
+ 2026-03-15 10:43:44.474 | INFO | train:train:396 - val_batch_size: 256
342
+ 2026-03-15 10:43:44.475 | INFO | train:train:397 - dropout: 0.0
343
+ 2026-03-15 10:43:44.475 | INFO | train:train:398 - nb_epochs: 5
344
+ 2026-03-15 10:43:44.475 | INFO | train:train:399 - early_stopping_patience: 15
345
+ 2026-03-15 10:43:44.475 | INFO | train:train:400 - nb_iters: 170
346
+ 2026-03-15 10:43:44.476 | INFO | train:train:401 - checkpoint_interval: 34
347
+ 2026-03-15 10:43:44.476 | INFO | train:train:402 - decay_lr: True
348
+ 2026-03-15 10:43:44.476 | INFO | train:train:403 - lr_partitions_ratios: [0.66, None]
349
+ 2026-03-15 10:43:44.477 | INFO | train:train:404 - lr_partitions_iters: [112, 58]
350
+ 2026-03-15 10:43:44.477 | INFO | train:train:405 - init_lr: 0.0001
351
+ 2026-03-15 10:43:44.477 | INFO | train:train:406 - max_lr: 0.001
352
+ 2026-03-15 10:43:44.478 | INFO | train:train:407 - min_lr: 5e-05
353
+ 2026-03-15 10:43:44.478 | INFO | train:train:408 - lr_warmup_iters_ratio: 0.1
354
+ 2026-03-15 10:43:44.478 | INFO | train:train:409 - lr_decay_iters_ratio: 0.95
355
+ 2026-03-15 10:43:44.479 | INFO | train:train:410 - beta1: 0.9
356
+ 2026-03-15 10:43:44.479 | INFO | train:train:411 - beta2: 0.95
357
+ 2026-03-15 10:43:44.479 | INFO | train:train:412 - weight_decay: 10.0
358
+ 2026-03-15 10:43:44.480 | INFO | train:train:413 - grad_clip: 1.0
359
+ 2026-03-15 10:43:44.480 | INFO | train:train:414 - compile:
360
+ 2026-03-15 10:43:44.480 | INFO | train:train:415 - compile_mode: default
361
+ 2026-03-15 10:43:44.481 | INFO | train:train:416 - intermediate_schedules: True
362
+ 2026-03-15 10:43:44.481 | INFO | train:train:417 - save_only_last_checkpoint: False
363
+ 2026-03-15 10:43:44.549 | INFO | train:train:485 - The model has 6M trainable parameters
364
+ 2026-03-15 10:43:44.550 | INFO | train:train:506 - num decayed parameter tensors: 538, with 6,307,840 parameters
365
+ 2026-03-15 10:43:44.551 | INFO | train:train:507 - num non-decayed parameter tensors: 27, with 6,657 parameters
366
+ 2026-03-15 10:43:44.551 | INFO | train:train:511 - using fused AdamW: True
367
+ 2026-03-15 10:43:44.655 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_2/schedules_val.npy with shape (755, 7)
368
+ 2026-03-15 10:43:44.656 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_2/makespans_val.npy with shape (755, 7)
369
+ 2026-03-15 10:44:13.151 | INFO | train:train:698 - Best validation loss: 0.0021
370
+ 2026-03-15 10:44:13.159 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_3/schedules_train.npy with shape (4277, 7)
371
+ 2026-03-15 10:44:13.160 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_3/makespans_train.npy with shape (4277, 7)
372
+ 2026-03-15 10:44:13.238 | INFO | train:train:321 - schedules.shape: torch.Size([128, 7])
373
+ 2026-03-15 10:44:13.238 | INFO | train:train:322 - makespans.shape: torch.Size([128, 7])
374
+ 2026-03-15 10:44:13.239 | INFO | train:train:388 - data_dir: ../datasets/exhaustive_7_4/top_3
375
+ 2026-03-15 10:44:13.239 | INFO | train:train:389 - block_size: 7
376
+ 2026-03-15 10:44:13.239 | INFO | train:train:390 - vocab_size: 7
377
+ 2026-03-15 10:44:13.240 | INFO | train:train:391 - n_embd: 256
378
+ 2026-03-15 10:44:13.240 | INFO | train:train:392 - n_head: 16
379
+ 2026-03-15 10:44:13.240 | INFO | train:train:393 - n_layer: 8
380
+ 2026-03-15 10:44:13.241 | INFO | train:train:394 - ff_width: 4
381
+ 2026-03-15 10:44:13.241 | INFO | train:train:395 - train_batch_size: 128
382
+ 2026-03-15 10:44:13.241 | INFO | train:train:396 - val_batch_size: 256
383
+ 2026-03-15 10:44:13.242 | INFO | train:train:397 - dropout: 0.0
384
+ 2026-03-15 10:44:13.242 | INFO | train:train:398 - nb_epochs: 5
385
+ 2026-03-15 10:44:13.242 | INFO | train:train:399 - early_stopping_patience: 15
386
+ 2026-03-15 10:44:13.242 | INFO | train:train:400 - nb_iters: 170
387
+ 2026-03-15 10:44:13.243 | INFO | train:train:401 - checkpoint_interval: 34
388
+ 2026-03-15 10:44:13.243 | INFO | train:train:402 - decay_lr: True
389
+ 2026-03-15 10:44:13.243 | INFO | train:train:403 - lr_partitions_ratios: [0.66, None]
390
+ 2026-03-15 10:44:13.244 | INFO | train:train:404 - lr_partitions_iters: [112, 58]
391
+ 2026-03-15 10:44:13.244 | INFO | train:train:405 - init_lr: 0.0001
392
+ 2026-03-15 10:44:13.244 | INFO | train:train:406 - max_lr: 0.001
393
+ 2026-03-15 10:44:13.245 | INFO | train:train:407 - min_lr: 5e-05
394
+ 2026-03-15 10:44:13.245 | INFO | train:train:408 - lr_warmup_iters_ratio: 0.1
395
+ 2026-03-15 10:44:13.245 | INFO | train:train:409 - lr_decay_iters_ratio: 0.95
396
+ 2026-03-15 10:44:13.246 | INFO | train:train:410 - beta1: 0.9
397
+ 2026-03-15 10:44:13.246 | INFO | train:train:411 - beta2: 0.95
398
+ 2026-03-15 10:44:13.246 | INFO | train:train:412 - weight_decay: 0.1
399
+ 2026-03-15 10:44:13.247 | INFO | train:train:413 - grad_clip: 1.0
400
+ 2026-03-15 10:44:13.247 | INFO | train:train:414 - compile:
401
+ 2026-03-15 10:44:13.247 | INFO | train:train:415 - compile_mode: default
402
+ 2026-03-15 10:44:13.247 | INFO | train:train:416 - intermediate_schedules: True
403
+ 2026-03-15 10:44:13.248 | INFO | train:train:417 - save_only_last_checkpoint: False
404
+ 2026-03-15 10:44:13.328 | INFO | train:train:485 - The model has 6M trainable parameters
405
+ 2026-03-15 10:44:13.330 | INFO | train:train:506 - num decayed parameter tensors: 538, with 6,307,840 parameters
406
+ 2026-03-15 10:44:13.330 | INFO | train:train:507 - num non-decayed parameter tensors: 27, with 6,657 parameters
407
+ 2026-03-15 10:44:13.331 | INFO | train:train:511 - using fused AdamW: True
408
+ 2026-03-15 10:44:13.590 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_3/schedules_val.npy with shape (755, 7)
409
+ 2026-03-15 10:44:13.591 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_3/makespans_val.npy with shape (755, 7)
410
+ 2026-03-15 10:44:41.579 | INFO | train:train:698 - Best validation loss: 0.0033
411
+ 2026-03-15 10:44:41.587 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_3/schedules_train.npy with shape (4277, 7)
412
+ 2026-03-15 10:44:41.588 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_3/makespans_train.npy with shape (4277, 7)
413
+ 2026-03-15 10:44:41.589 | INFO | train:train:321 - schedules.shape: torch.Size([128, 7])
414
+ 2026-03-15 10:44:41.590 | INFO | train:train:322 - makespans.shape: torch.Size([128, 7])
415
+ 2026-03-15 10:44:41.590 | INFO | train:train:388 - data_dir: ../datasets/exhaustive_7_4/top_3
416
+ 2026-03-15 10:44:41.591 | INFO | train:train:389 - block_size: 7
417
+ 2026-03-15 10:44:41.591 | INFO | train:train:390 - vocab_size: 7
418
+ 2026-03-15 10:44:41.591 | INFO | train:train:391 - n_embd: 256
419
+ 2026-03-15 10:44:41.592 | INFO | train:train:392 - n_head: 16
420
+ 2026-03-15 10:44:41.592 | INFO | train:train:393 - n_layer: 8
421
+ 2026-03-15 10:44:41.592 | INFO | train:train:394 - ff_width: 4
422
+ 2026-03-15 10:44:41.593 | INFO | train:train:395 - train_batch_size: 128
423
+ 2026-03-15 10:44:41.593 | INFO | train:train:396 - val_batch_size: 256
424
+ 2026-03-15 10:44:41.593 | INFO | train:train:397 - dropout: 0.0
425
+ 2026-03-15 10:44:41.594 | INFO | train:train:398 - nb_epochs: 5
426
+ 2026-03-15 10:44:41.594 | INFO | train:train:399 - early_stopping_patience: 15
427
+ 2026-03-15 10:44:41.594 | INFO | train:train:400 - nb_iters: 170
428
+ 2026-03-15 10:44:41.595 | INFO | train:train:401 - checkpoint_interval: 34
429
+ 2026-03-15 10:44:41.595 | INFO | train:train:402 - decay_lr: True
430
+ 2026-03-15 10:44:41.595 | INFO | train:train:403 - lr_partitions_ratios: [0.66, None]
431
+ 2026-03-15 10:44:41.596 | INFO | train:train:404 - lr_partitions_iters: [112, 58]
432
+ 2026-03-15 10:44:41.596 | INFO | train:train:405 - init_lr: 0.0001
433
+ 2026-03-15 10:44:41.596 | INFO | train:train:406 - max_lr: 0.001
434
+ 2026-03-15 10:44:41.597 | INFO | train:train:407 - min_lr: 5e-05
435
+ 2026-03-15 10:44:41.597 | INFO | train:train:408 - lr_warmup_iters_ratio: 0.1
436
+ 2026-03-15 10:44:41.597 | INFO | train:train:409 - lr_decay_iters_ratio: 0.95
437
+ 2026-03-15 10:44:41.598 | INFO | train:train:410 - beta1: 0.9
438
+ 2026-03-15 10:44:41.598 | INFO | train:train:411 - beta2: 0.95
439
+ 2026-03-15 10:44:41.598 | INFO | train:train:412 - weight_decay: 1.0
440
+ 2026-03-15 10:44:41.599 | INFO | train:train:413 - grad_clip: 1.0
441
+ 2026-03-15 10:44:41.599 | INFO | train:train:414 - compile:
442
+ 2026-03-15 10:44:41.599 | INFO | train:train:415 - compile_mode: default
443
+ 2026-03-15 10:44:41.600 | INFO | train:train:416 - intermediate_schedules: True
444
+ 2026-03-15 10:44:41.600 | INFO | train:train:417 - save_only_last_checkpoint: False
445
+ 2026-03-15 10:44:41.670 | INFO | train:train:485 - The model has 6M trainable parameters
446
+ 2026-03-15 10:44:41.672 | INFO | train:train:506 - num decayed parameter tensors: 538, with 6,307,840 parameters
447
+ 2026-03-15 10:44:41.673 | INFO | train:train:507 - num non-decayed parameter tensors: 27, with 6,657 parameters
448
+ 2026-03-15 10:44:41.673 | INFO | train:train:511 - using fused AdamW: True
449
+ 2026-03-15 10:44:41.726 | INFO | train:__init__:288 - Loaded schedules from ../datasets/exhaustive_7_4/top_3/schedules_val.npy with shape (755, 7)
450
+ 2026-03-15 10:44:41.726 | INFO | train:__init__:293 - Loaded makespans from ../datasets/exhaustive_7_4/top_3/makespans_val.npy with shape (755, 7)
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/train_parameters.json ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "data_dir": "../datasets/exhaustive_7_4/top_0",
3
+ "block_size": 7,
4
+ "vocab_size": 7,
5
+ "n_embd": 256,
6
+ "n_head": 16,
7
+ "n_layer": 8,
8
+ "ff_width": 4,
9
+ "train_batch_size": 128,
10
+ "val_batch_size": 256,
11
+ "dropout": 0.0,
12
+ "nb_epochs": 5,
13
+ "early_stopping_patience": 15,
14
+ "nb_iters": 170,
15
+ "checkpoint_interval": 34,
16
+ "decay_lr": true,
17
+ "lr_partitions_ratios": [
18
+ 0.66,
19
+ null
20
+ ],
21
+ "lr_partitions_iters": [
22
+ 112,
23
+ 58
24
+ ],
25
+ "init_lr": 0.0001,
26
+ "max_lr": 0.001,
27
+ "min_lr": 5e-05,
28
+ "lr_warmup_iters_ratio": 0.1,
29
+ "lr_decay_iters_ratio": 0.95,
30
+ "beta1": 0.9,
31
+ "beta2": 0.95,
32
+ "weight_decay": 10.0,
33
+ "grad_clip": 1.0,
34
+ "compile": "",
35
+ "compile_mode": "default",
36
+ "intermediate_schedules": true,
37
+ "save_only_last_checkpoint": false
38
+ }
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/train_pbar_epoch.log ADDED
@@ -0,0 +1 @@
 
 
1
+ Epoch 5/5: 100%|███████████████████████████████████████████████████████████████████████████████████| 34/34 [00:07<00:00, 4.59it/s]
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/train_pbar_val.log ADDED
@@ -0,0 +1 @@
 
 
1
+ Validation 5.00: 100%|███████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 30.58it/s]
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/val_losses.npy ADDED
Binary file (148 Bytes). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd10e-0/viz_train.ipynb ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "id": "24989eac",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "import numpy as np\n",
11
+ "import matplotlib.pyplot as plt"
12
+ ]
13
+ },
14
+ {
15
+ "cell_type": "code",
16
+ "execution_count": 3,
17
+ "id": "c6c1eda1",
18
+ "metadata": {},
19
+ "outputs": [
20
+ {
21
+ "name": "stdout",
22
+ "output_type": "stream",
23
+ "text": [
24
+ "(335,)\n"
25
+ ]
26
+ },
27
+ {
28
+ "data": {
29
+ "image/png": "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ZZepZs2aOnDggBo2bKjf/va3at++veLj4/Xpp5/q66+/1pNPPnnSGh555BHNnj1b3bp100033aSWLVtqx44deuutt7Rw4UIlJiaqV69eatSokW644QbdfffdioiI0EsvvaQ6depo69atp/Wcr7vuOt1111266667lJycrB49egSt79atm26++WaNGzdOq1atUq9evRQVFaX169frrbfe0lNPPRV0Ti0AQOkIWQBQhZx//vl6+OGHNWXKFM2aNUs+n0+bNm06aci65JJL9K9//Uvjx4/X7bffriZNmujRRx/V5s2bHRGyJCkrK0vGGD355JO666671L59e73//vsaNWpUYMje6UhNTdXixYt1zz33aNKkSTp27JjatWun//73v0HnBbv55ps1bdo0TZgwQYcPH1bDhg01atQo3XfffZKkuLg43XrrrZo9e7beffdd+Xw+NWvWTM8++6xGjBhx0hoaNGigpUuX6v7779e0adOUk5OjBg0aqG/fvoqLi5MkRUVF6b333tOtt96q+++/X2lpabr99tuVlJSkYcOGndZzbtiwoS644AItWrRIN954Y4nnvJoyZYo6duyof/7zn/rLX/4SmFzk97//vbp27XpajwcA1ZnLOOHIYgAATpPP51OdOnX0m9/8Ri+88ILd5QAAEMAxWQAAxzt27Fix2Qb//e9/65dfflH37t3tKQoAgFLQkwUAcLz58+frjjvu0LXXXqvatWtrxYoV+te//qWWLVtq+fLlQSczBgDAbhyTBQBwvIyMDKWnp+vpp5/WL7/8ouTkZA0ePFjjx48nYAEAHIeeLAAAAAAIIY7JAgAAAIAQImQBAAAAQAhVu2OyfD6ftm/frpo1a5brBJYAAAAAqgZjjA4dOqT69esHTkQfCtUuZG3fvl3p6el2lwEAAADAIX766Sc1bNgwZPdX7UJWzZo1JVkvZEJCgs3VSF6vV7Nnz1avXr0UFRVldzkoAW3kfLRReKCdnI82Cg+0k/PRRuHB6/VqxowZuvHGGwMZIVSqXcjyDxFMSEhwTMiKi4tTQkICH0KHoo2cjzYKD7ST89FG4YF2cj7aKDz420lSyA8jYuILAAAAAAghQhYAAAAAhBAhCwAAAABCqNodkwUAAICqpbCwUF6v1+4yArxeryIjI3Xs2DEVFhbaXU61FxUVpYiIiEp9TEIWAAAAwtbhw4f1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Br/Dhw/rwQcf1IcffqgdO3aooKBAR48ePWVPVrt27QLXa9SooYSEBO3evbvU7ePi4gIBS5Lq1asX2P7gwYPatWuXOnfuHFgfERGhjh07lnuK+rVr1yoyMlJdunQJLKtdu7ZatGihtWvXSpJGjRqlESNGaPbs2erRo4euueaawPMaMWKErrnmGq1YsUK9evVS//79A2HNCWwfLlidvfyyNGBApObPLz71PAAAAE6PyyXVqGHPT6gm6atRo0bQ7bvuukvvvfeeHnnkEX3xxRdatWqV2rZtq/z8/JPez4kTPLhcrpMGopK2t3EScknSjTfeqB9//FF/+MMftHr1anXq1EmTJk2SJPXt21dbtmzRHXfcoe3bt+vSSy8NGt5oN0KWjfwzSHq9ESffEAAAAFWGx+NRYWFhmbZdtGiRhg4dqquvvlpt27ZVWlqaNm/eXLEFnqBWrVpKTU3V119/HVhWWFioFStWlPs+W7ZsqYKCgqBTNu3bt0/r1q0LOgwoPT1dt9xyi959913deeedeuGFFwLr6tSpoyFDhug///mPJk6cqOeff77c9YSaI4YLVlexsdZlfj5ZFwAAoLrIyMjQ0qVLtXnzZsXHxys5ObnUbZs3b653331XV1xxhVwul+6///5yD9E7E3/60580btw4NWvWTOecc44mTZqk/fv3l+k8W6tXr1bNmjUDt10ul9q3b6+rrrpKw4cP1z//+U/VrFlT9957rxo0aKCrrrpKknT77berb9++Ovvss7V//37NmzdPLVu2lCQ98MAD6tixo1q3bq28vDx98MEHgXVOQMiykb8nKz+fniwAAIDq4q677tKQIUPUqlUrHT16VJs2bSp12wkTJuiPf/yjLrjgAqWkpOiee+5RTk5OJVZrueeee7Rz504NHjxYERERuummm9S7d29FRJz679iLLroo6HZERIQKCgr08ssv67bbbtPll1+u/Px8XXTRRfroo48CQxcLCws1cuRI/fzzz0pISFCfPn0CczN4PB6NHj1amzdvVmxsrC688EK98cYboX/i5UTIslFRTxYhCwAAoLo4++yztWTJkqBlGRkZJR4DlZGRoc8++yxo2ciRI4Nunzh8sKT78Z8TS5K6d+8etM3QoUM1dOjQoO379+8ftE1kZKQmTZoUOCbK5/OpZcuWuu6664o/wVIe50RJSUn697//Xep6/2OV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AAAA4YWQ5XCELAAAACC8ELIcjpAFAAAAhBdClsMxuyAAAAAQXghZDsfsggAAAEB4IWQ5HMMFAQAAgPDiiJA1efJkZWRkKCYmRl26dNFXX31V6rYvvPCCLrzwQiUlJSkpKUk9evQ46fbhjpAFAAAAhBfbQ9b06dOVnZ2tMWPGaMWKFWrfvr169+6t3bt3l7j9/Pnzdf3112vevHlasmSJ0tPT1atXL23btq2SK68chCwAAAAgvNgesiZMmKDhw4dr2LBhatWqlaZMmaK4uDi99NJLJW4/bdo03XrrrerQoYPOOeccvfjii/L5fJo7d24lV145CFkAAABAeIm088Hz8/O1fPlyjR49OrDM7XarR48eWrJkSZnu48iRI/J6vUpOTi5xfV5envLy8gK3c3JyJEler1der/cMqg8Nfw2l1RId7ZYUodxcn7zewlLv59Ahafp0l6691qhWrYqotPo6VRvBfrRReKCdnI82Cg+0k/PRRuGhItvH1pC1d+9eFRYWKjU1NWh5amqqvv/++zLdxz333KP69eurR48eJa4fN26cxo4dW2z57NmzFefvJnKAOXPmlLh8w4bGkjpo06Zd+uij0o89e/LJjvrii4b64ou1GjDghwqqsnorrY3gHLRReKCdnI82Cg+0k/PRRtWXrSHrTI0fP15vvPGG5s+fr5iYmBK3GT16tLKzswO3c3JyAsdxJSQkVFappfJ6vZozZ4569uypqKioYuv373fpueekhIRU9evXr8T7+O47aeFCqyldrhbq169ZhdZc3ZyqjWA/2ig80E7ORxuFB9rJ+Wij8OD1ejVz5swKuW9bQ1ZKSooiIiK0a9euoOW7du1SWlraSfd94oknNH78eH366adq165dqdtFR0crOjq62PKoqChHvelLq8efA48edSsqquRD6B57TDLGur5zZ+nb4cw47T2D4mij8EA7OR9tFB5oJ+ejjaovW/8a93g86tixY9CkFf5JLDIzM0vd77HHHtPDDz+sWbNmqVOnTpVRqm1ONfHFunXSG28U3a6ikywCAAAAYcP2Lo/s7Gy98MILeuWVV7R27VqNGDFCubm5GjZsmCRp8ODBQRNjPProo7r//vv10ksvKSMjQzt37tTOnTt1+PBhu55ChTpVyJo0SfL5pNatrdvbt1dOXQAAAABKZnvIGjBggJ544gk98MAD6tChg1at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4Ai2hyxJysrKUlZWVonr5s+fX2zZtddeq2uvvbaCqwIAAACA02frMVkAAAAAUNUQsgAAAAAghAhZAAAAABBChCwAAAAACCFCFgAAAACEECELAAAAAEKIkAUAAAAAIUTIAgAAAIAQImQBAAAAQAgRsgAAAAAghAhZAAAAABBChCwAAAAACCFCFgAAAACEUKTdBVQ2Y4wkKScnx+ZKLF6vV0eOHFFOTo6ioqLsLgcloI2cjzYKD7ST89FG4YF2cj7aKDz420kqygihUu1C1qFDhyRJ6enpNlcCAAAAwAkOHTqkWrVqhez+XCbUsc3hfD6ftm/frpo1a8rlctldjnJycpSenq6ffvpJCQkJdpeDEtBGzkcbhQfayfloo/BAOzkfbRQe/O303XffqUWLFnK7Q3ckVbXryXK73WrYsKHdZRSTkJDAh9DhaCPno43CA+3kfLRReKCdnI82Cg8NGjQIacCSmPgCAAAAAEKKkAUAAAAAIUTIsll0dLTGjBmj6Ohou0tBKWgj56ONwgPt5Hy0UXignZyPNgoPFdlO1W7iCwAAAACoSPRkAQAAAEAIEbIAAAAAIIQIWQAAAAAQQoQsAAAAAAghQpaNJk+erIyMDMXExKhLly766quv7C6p2nrwwQflcrmCfs4555zA+mPHjmnkyJGqXbu24uPjdc0112jXrl02Vlw9fP7557riiitUv359uVwuzZgxI2i9MUYPPPCA6tWrp9jYWPXo0UPr168P2uaXX37RoEGDlJCQoMTERN1www06fPhwJT6Lqu1UbTR06NBin60+ffoEbUMbVaxx48bp/PPPV82aNVW3bl31799f69atC9qmLN9xW7du1WWXXaa4uDjVrVtXd999twoKCirzqVRpZWmn7t27F/s83XLLLUHb0E4V57nnnlO7du0CJxjOzMzUxx9/HFjP58gZTtVOlfU5ImTZZPr06crOztaYMWO0YsUKtW/fXr1799bu3bvtLq3aat26tXbs2BH4WbhwYWDdHXfcof/+97966623tGDBAm3fvl2/+c1vbKy2esjNzVX79u01efLkEtc/9thjevrppzVlyhQtXbpUNWrUUO/evXXs2LHANoMGDdKaNWs0Z84cffDBB/r888910003VdZTqPJO1UaS1KdPn6DP1uuvvx60njaqWAsWLNDIkSP15Zdfas6cOfJ6verVq5dyc3MD25zqO66wsFCXXXaZ8vPztXjxYr3yyiuaOnWqHnjgATueUpVUlnaSpOHDhwd9nh577LHAOtqpYjVs2FDjx4/X8uXLtWzZMl1yySW66qqrtGbNGkl8jpziVO0kVdLnyMAWnTt3NiNHjgzcLiwsNPXr1zfjxo2zsarqa8yYMaZ9+/Ylrjtw4ICJiooyb731VmDZ2rVrjSSzZMmSSqoQksx7770XuO3z+UxaWpp5/PHHA8sOHDhgoqOjzeuvv26MMea7774zkszXX38d2Objjz82LpfLbNu2rdJqry5ObCNjjBkyZIi56qqrSt2HNqp8u3fvNpLMggULjDFl+4776KOPjNvtNjt37gxs89xzz5mEhASTl5dXuU+gmjixnYwxplu3bua2224rdR/aqfIlJSWZF198kc+Rw/nbyZjK+xzRk2WD/Px8LV++XD169Agsc7vd6tGjh5YsWWJjZdXb+vXrVb9+fZ111lkaNGiQtm7dKklavny5vF5vUHudc845atSoEe1lo02bNmnnzp1B7VKrVi116dIl0C5LlixRYmKiOnXqFNimR48ecrvdWrp0aaXXXF3Nnz9fdevWVYsWLTRixAjt27cvsI42qnwHDx6UJCUnJ0sq23fckiVL1LZtW6Wmpga26d27t3JycoL+O4zQObGd/KZNm6aUlBS1adNGo0eP1pEjRwLraKfKU1hYqDfeeEO5ubnKzMzkc+RQJ7aTX2V8jiJD8xRwOvbu3avCwsKgxpOk1NRUff/99zZVVb116dJFU6dOVYsWLbRjxw6NHTtWF154ob799lvt3LlTHo9HiYmJQfukpqZq586d9hSMwGtf0ufIv27nzp2qW7du0PrIyEglJyfTdpWkT58++s1vfqMmTZpo48aN+stf/qK+fftqyZIlioiIoI0qmc/n0+23366uXbuqTZs2klSm77idO3eW+Fnzr0NoldROkjRw4EA1btxY9evX1zfffKN77rlH69at07vvviuJdqoMq1evVmZmpo4dO6b4+Hi99957atWqlVatWsXnyEFKayep8j5HhCxAUt++fQPX27Vrpy5duqhx48Z68803FRsba2NlQHj73e9+F7jetm1btWvXTk2bNtX8+fN16aWX2lhZ9TRy5Eh9++23QcecwnlKa6fjj1Vs27at6tWrp0svvVQbN25U06ZNK7vMaqlFixZatWqV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3eahhx4y69atMy+//LKJjY01L7/8cuB5NG7c2CQnJ5vJkyeb9evXm3Hjxhm3222+//77M29UAEBIEbIAAKelW7dupmXLlsbn8wWW3XPPPaZly5al7vP1118bSebQoUPGGFMsZBhjTE5OjomOjg6EqhP5g86LL74YWLZmzRojyaxdu7bUxz4+ZPnvY+XKlUHbNG3a1Lz22mtByx5++GGTmZkZtN/EiRNLfRy/yy67zNx5552B2926dTO33XZb0DYnPv+BAweanj17Bm1z9913m1atWgVuN27c2Pz+978P3Pb5fKZu3brmueeeO2VNAIDKxXBBAMBp+9WvfiWXyxW4nZmZqfXr16uwsFCStHz5cl1xxRVq1KiRatasqW7dukmStm7dWup9rl27Vnl5ebr00ktP+tjt2rULXK9Xr54kBYYilkdubq42btyoG264QfHx8YGfv/3tb9q4cWPQtp06dQq6XVhYqIcfflht27ZVcnKy4uPj9cknn5z0eZZk7dq16tq1a9Cyrl27Br2mUvBzd7lcSktLO6PnDgCoGEx8AQAIqdzcXPXu3Vu9e/fWtGnTVKdOHW3dulW9e/dWfn5+qfvFxsaW6f6Pn2zCH/R8Pl+56z18+LAk6YUXXlCXLl2C1kVERATdrlGjRtDtxx9/XE899ZQmTpyotm3bqkaNGrr99ttP+jzPxIkTbbhcrjN67gCAikHIAgCctqVLlwbd/vLLL9W8eXNFRETo+++/1759+zR+/Hilp6dLkpYtWxa0vcfjkaSgXprmzZsrNjZWc+fO1Y033lghdZf0uKmpqapfv75+/PFHDRo06LTub9GiRbrqqqv0+9//XpIV9n744Qe1atUq6DGPf7yStGzZUosWLSp232effXaxoAcAcD5CFgDgtG3dulXZ2dm6+eabtWLFCk2aNCkwG16jRo3k8Xg0adIk3XLLLfr222/18MMPB+3fuHFjuVwuffDBB+rXr59iY2MVHx+ve+65R3/+85/l8XjUtWtX7dmzR2vWrNENN9wQkrrr1q2r2NhYzZo1Sw0bNlRMTIxq1aqlsWPHatSoUapVq5b69OmjvLw8LVu2TPv371d2dnap99e8eXO9/fbbWrx4sZKSkjRhwgTt2rUrKGRlZGRo6dKl2rx5s+Lj45WcnFzsfu68806df/75evjhhzVgwAAtWbJEzzzzTNAMhwCA8MExWQCA0zZ48GAdPXpUnTt31siRI3XbbbfppptukiTVqVNHU6dO1VtvvaVWrVpp/PjxeuKJJ4L2b9CggcaOHat7771XqampysrKkiTdf//9uvPOO/XAAw+oZcuWGjBgQEiPOYqMjNTTTz+tf/7zn6pfv76uuuoqSdKNN96oF198US+//LLatm2rbt26aerUqYEp30tz33336bzzzlPv3r3VvXt3paWlqX///kHb3HXXXYqIiFCrVq0CQydPdN555+nNN9/UG2+8oTZt2uiBBx7QQw89FJjaHgAQXlzGHHdiEwAAAADAGaEnCwAAAABCiJAFAAAAACFEyAIAAACAECJkAQAAAEAIEbIAAAAAIIQIWQAAAAAQQoQsAAAAAAghQhYAAAAAhBAhCwAAAABCiJAFAAAAACFEyAIAAACAEPp/rV31pteVRjkAAAAASUVORK5CYII=",
30
+ "text/plain": [
31
+ "<Figure size 1000x600 with 1 Axes>"
32
+ ]
33
+ },
34
+ "metadata": {},
35
+ "output_type": "display_data"
36
+ }
37
+ ],
38
+ "source": [
39
+ "# plot the loss curves\n",
40
+ "batch_losses = np.lib.format.open_memmap(\"batch_losses.npy\", dtype=np.float32, mode=\"r\")\n",
41
+ "print(batch_losses.shape)\n",
42
+ "last_batch_loss_idx = np.lib.format.open_memmap(\"last_batch_loss_idx.npy\", dtype=np.float32, mode=\"r\")\n",
43
+ "plt.figure(figsize=(10, 6))\n",
44
+ "plt.plot(batch_losses[:last_batch_loss_idx[...]+1], label=\"training Loss\", color=\"blue\")\n",
45
+ "plt.xlabel(\"batch iteration\")\n",
46
+ "plt.ylabel(\"loss\")\n",
47
+ "plt.title(\"training loss curve\")\n",
48
+ "plt.legend()\n",
49
+ "plt.grid(True)\n",
50
+ "plt.show()"
51
+ ]
52
+ },
53
+ {
54
+ "cell_type": "code",
55
+ "execution_count": 4,
56
+ "id": "38bfe104",
57
+ "metadata": {},
58
+ "outputs": [
59
+ {
60
+ "data": {
61
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1kAAAIjCAYAAADxz9EgAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAYE1JREFUeJzt3XlcVXX+x/H3ZRcRNwREcUlNrVzKLdTUxgW1jRYz6zeuaWWkE6WNTWpOM1lNOVY6ma02ZS4ttjkmWVopZm7TlLtpmAq4k6CI3PP743SvXgEFPHDuvbyej8d9cDj3e8/5HPp64833e77XYRiGIQAAAACAJQLsLgAAAAAA/AkhCwAAAAAsRMgCAAAAAAsRsgAAAADAQoQsAAAAALAQIQsAAAAALETIAgAAAAALEbIAAAAAwEKELAAAAACwECELAFCsN998Uw6HQ7t373bv69Gjh3r06HHB1y5fvlwOh0PLly+3tCaHw6HHH3/c0mOWxOOPPy6Hw1Hh5wUA+B5CFgDA6yxevNiWIAUAgBWC7C4AAOBbli5dWu7nWLx4sWbOnFlk0Dpx4oSCgvjfFwDAezGSBQAolZCQEIWEhNh2/rCwMEJWBcrJybG7BADwOYQsAPAT7733nhwOh1asWFHouZdfflkOh0M//vijJOmHH37Q0KFDdckllygsLEyxsbEaPny4Dh06dMHzFHVP1q+//qqkpCRVrVpV0dHRevDBB5WXl1fotd98840GDBigBg0aKDQ0VPHx8XrwwQd14sQJd5uhQ4dq5syZksz7r1wPl6LuydqwYYP69eunyMhIRUREqGfPnlq9erVHG9f9ZStXrlRKSorq1KmjqlWr6uabb9aBAwcueN1FOX36tJ544gk1adJEoaGhatSokR599NFC17527VolJiYqKipKVapUUePGjTV8+HCPNvPmzVO7du1UrVo1RUZGqlWrVnr++ecvWIPT6dTzzz+vVq1aKSwsTHXq1FHfvn21du1aSdLu3bvlcDj05ptvFnrtuT9L131nmzZt0p133qmaNWuqa9euevbZZ+VwOPTLL78UOsaECRMUEhKiI0eOuPd999136tu3r6pXr67w8HB1795dK1euvOC1AIC/4E+BAOAnrrvuOkVERGjBggXq3r27x3Pz58/X5ZdfriuuuEKSlJqaqp9//lnDhg1TbGysfvrpJ82ePVs//fSTVq9eXaoFHk6cOKGePXsqPT1dY8aMUVxcnP7973/ryy+/LNR24cKFys3N1X333afatWtrzZo1evHFF/Xrr79q4cKFkqR77rlH+/btU2pqqv79739f8Pw//fSTrrnmGkVGRmr8+PEKDg7Wyy+/rB49emjFihXq1KmTR/sHHnhANWvW1OTJk7V7925Nnz5dycnJmj9/fomv2eXuu+/WnDlzdNttt+mhhx7Sd999p6lTp2rz5s368MMPJUlZWVnq06eP6tSpoz//+c+qUaOGdu/erQ8++MB9nNTUVA0aNEg9e/bU008/LUnavHmzVq5cqbFjx563hhEjRujNN99Uv379dPfdd+v06dP65ptvtHr1arVv377U1yRJAwYMULNmzfTkk0/KMAxdf/31Gj9+vBYsWKBx48Z5tF2wYIH69OmjmjVrSpK+/PJL9evXT+3atdPkyZMVEBCgN954Q3/4wx/0zTffqGPHjmWqCQB8igEA8BuDBg0yoqOjjdOnT7v37d+/3wgICDD++te/uvfl5uYWeu27775rSDK+/vpr97433njDkGTs2rXLva979+5G9+7d3d9Pnz7dkGQsWLDAvS8nJ8do2rSpIcn46quvznveqVOnGg6Hw/jll1/c++6//36juP9FSTImT57s/j4pKckICQkxdu7c6d63b98+o1q1aka3bt0KXUuvXr0Mp9Pp3v/ggw8agYGBxtGjR4s8n8vkyZM9atq4caMhybj77rs92j388MOGJOPLL780DMMwPvzwQ0OS8f333xd77LFjxxqRkZEe/91K4ssvvzQkGWPGjCn0nOsad+3aZUgy3njjjUJtzv1Zuq5x0KBBhdomJCQY7dq189i3Zs0aQ5Lx1ltvuc/ZrFkzIzEx0eNnnJubazRu3Njo3bt3qa4PAHwV0wUBwI8MHDhQWVlZHsumv/fee3I6nRo4cKB7X5UqVdzbJ0+e1MGDB3X11VdLktavX1+qcy5evFh169bVbbfd5t4XHh6uUaNGFWp79nlzcnJ08OBBde7cWYZhaMOGDaU6ryQVFBRo6dKlSkpK0iWXXOLeX7duXd1555369ttvlZ2d7fGaUaNGeYzUXXPNNSooKChyKtz5LF68WJKUkpLisf+hhx6SJH322WeSpBo1akiSPv30U+Xn5xd5rBo1aignJ0epqamlquH999+Xw+HQ5MmTCz13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daF+NHTo0ELvUX379rWnWHi1qVOnqkOHDqpWrZqio6OVlJSkrVu3erQ5efKk7r//ftWuXVsRERG69dZblZmZaVPF8EYl6Uc9evQo9L507733luo8hCwvNn/+fKWkpGjy5Mlav3692rRpo8TERGVlZdldGnzM5Zdfrv3797sf3377rd0lwQfk5OSoTZs2mjlzZpHPP/PMM3rhhRc0a9Ysfffdd6pataoSExN18uTJCq4U3uxC/UiS+vbt6/Ee9e6771ZghfAVK1as0P3336/Vq1crNTVV+fn56tOnj3JyctxtHnzwQX3yySdauHChVqxYoX379umWW26xsWp4m5L0I0kaOXKkx/vSM888U6rzsIS7F+vUqZM6dOigGTNmSJKcTqfi4+P1wAMP6M9//rPN1cFXPP7441q0aJE2btxodynwYQ6HQx9++KGSkpIkmaNYcXFxeuihh/Twww9Lko4dO6aYmBi9+eabuuOOO2ysFt7q3H4kmSNZR48eLTTCBVzIgQMHFB0drRUrVqhbt246duyY6tSpo7lz5+q2226TJG3ZskUtW7ZUWlqarr76apsrhjc6tx9J5khW27ZtNX369DIfl5EsL3Xq1CmtW7dOvXr1cu8LCAhQr169lJaWZmNl8EXbt29XXFycLrnkEt11111KT0+3uyT4uF27dikjI8PjPap69erq1KkT71EoteXLlys6OlrNmzfXfffdp0OHDtldEnzAsWPHJEm1atWSJK1bt075+fke70stWrRQgwYNeF9Csc7tRy7vvPOOoqKidMUVV2jChAnKzc0t1XGDLKsQljp48KAKCgoUExPjsT8mJkZbtmyxqSr4ok6dOunNN99U8+bNtX//fk2ZMkXXXHONfvzxR1WrVs3u8uCjMjIyJKnI9yjXc0BJ9O3bV7fccosaN26snTt36tFHH1W/fv2UlpamwMBAu8uDl3I6nfrTn/6kLl266IorrpBkvi+FhISoRo0aHm15X0JxiupHknTnnXeqYcOGiouL0w8//KBHHnlEW7du1QcffFDiYxOyAD/Xr18/93br1q3VqVMnNWzYUAsWLNCIESNsrAwA5DG1tFWrVmrdurWaNGmi5cuXq2fPnjZWBm92//3368cff+QeY1yU4vrRqFGj3NutWrVS3bp11bNnT+3cuVNNmjQp0bGZLuiloqKiFBgYWGhFnMzMTMXGxtpUFfxBjRo1dOmll2rHjh12lwIf5nof4j0KVrvkkksUFRXFexSKlZycrE8//VRfffWV6tev794fGxurU6dO6ejRox7teV9CUYrrR0Xp1KmTJJXqfYmQ5aVCQkLUrl07LVu2zL3P6XRq2bJlSkhIsLEy+Lrjx49r586dqlu3rt2lwIc1btxYsbGxHu9R2dnZ+u6773iPwkX59ddfdejQId6jUIhhGEpOTtaHH36oL7/8Uo0bN/Z4vl27dgoODvZ4X9q6davS09N5X4LbhfpRUVyLh5XmfYnpgl4sJSVFQ4YMUfv27dWxY0dNnz5dOTk5GjZsmN2lwYc8/PDDuuGGG9SwYUPt27dPkydPVmBgoAYNGmR3afByx48f9/ir3a5du7Rx40bVqlVLDRo00J/+9Cf97W9/U7NmzdS4cWNNnDhRcXFxHivHAefrR7Vq1dKUKVN06623KjY2Vjt37tT48ePVtGlTJSYm2lg1vNH999+vuXPn6qOPPlK1atXc91lVr15dVapUUfXq1TVixAilpKSoVq1aioyM1AMPPKCEhARWFoTbhfrRzp07NXfuXPXv31+1a9fWDz/8oAcffFDdunVT69atS34iA17txRdfNBo0aGCEhIQYHTt2NFavXm13SfAxAwcONOrWrWuEhIQY9erVMwYOHGjs2LHD7rLgA7766itDUqHHkCFDDMMwDKfTaUycONGIiYkxQkNDjZ49expbt261t2h4nfP1o9zcXKNPnz5GnTp1jODgYKNhw4bGyJEjjYyMDLvLhhcqqh9JMt544w13mxMnThijR482atasaYSHhxs333yzsX//fvuKhte5UD9KT083unXrZtSqVcsIDQ01mjZtaowbN844duxYqc7D52QBAAAAgIW4JwsAAAAALETIAgAAAAALEbIAAAAAwEKELAAAAACwECELAAAAACxEyAIAAAAACxGyAAAAAMBChCwAAAAAsBAhCwDg9Xbv3i2Hw6GNGzeW2zmWL18uh8Oho0ePlts5JKlHjx7605/+VK7nAADYK8juAgAAqEw++OADBQcHl7j97t271bhxY23YsEFt27Ytv8IAAJYhZAEAUIFq1apldwkAgHLGdEEAgNdwOp165pln1LRpU4WGhqpBgwb6+9//7n7+559/1rXXXqvw8HC1adNGaWlpHq//9ttvdc0116hKlSqKj4/XmDFjlJOT434+Ly9PjzzyiOLj4xUaGqqmTZvqtddeK7KW3Nxc9evXT126dNHRo0fdUxbnzZunzp07KywsTFdccYVWrFjh8boVK1aoY8eOCg0NVd26dfXnP/9Zp0+fdj9/7nTBRo0a6cknn9Tw4cNVrVo1NWjQQLNnz3Y/37hxY0nSlVdeKYfDoR49epT65woAqFiELACA15gwYYKeeuopTZw4UZs2bdLcuXMVExPjfv4vf/mLHn74YW3cuFGXXnqpBg0a5A4wO3fuVN++fXXrrbfqhx9+0Pz58/Xtt98qOTnZ/frBgwfr3Xff1QsvvKDNmzfr5ZdfVkRERKE6jh49qt69e8vpdCo1NVU1atRwPzdu3Dg99NBD2rBhgxISEnTDDTfo0KFDkqS9e/eqf//+6tChg/773//qpZde0muvvaa//e1v573u5557Tu3bt9eGDRs0evRo3Xfffdq6daskac2aNZKkL774Qvv379cHH3xQth8uAKDiGAAAeIHs7GwjNDTUeOWVVwo9t2vXLkOS8eqrr7r3/fTTT4YkY/PmzYZhGMaIESOMUaNGebzum2++MQICAowTJ04YW7duNSQZqampRZ7/q6++ch+vdevWxq233mrk5eUVquGpp55y78vPzzfq169vPP3004ZhGMajjz5qNG/e3HA6ne42M2fONCIiIoyCggLDMAyje/fuxtixY93PN2zY0Pi///s/9/dOp9OIjo42XnrpJY/zbtiw4bw/PwCA92AkCwDgFTZv3qy8vDz17Nmz2DatW7d2b9etW1eSlJWVJUn673//qzfffFMRERHuR2JiopxOp3bt2qWNGzcqMDBQ3bt3P28dvXv3VtOmTTV//nyFhIQUej4hIcG9HRQUpPbt22vz5s3ua0hISJDD4XC36dKli44fP65ff/21RNflcDgUGxvrvi4AgO9h4QsAgFeoUqXKBducvSqfK8g4nU5J0vHjx3XPPfdozJgxhV7XoEED7dixo0R1XHfddXr//fe1adMmtWrVqkSvuVjnrjbocDjc1wUA8D2MZAEAvEKzZs1UpUoVLVu2rEyvv+qqq7Rp0yY1bdq00CMkJEStWrWS0+kstFDFuZ566ikNGTJEPXv21KZNmwo9v3r1avf26dOntW7dOrVs2VKS1LJlS6WlpckwDHeblStXqlq1aqpfv36Zrss1mlZQUFCm1wMAKh4hCwDgFcLCwvTII49o/Pjxeuutt7Rz506tXr262NX/zvXII49o1apVSk5O1saNG7V9+3Z99NFH7oUvGjVqpCFDhmj48OFatGiRdu3apeXLl2vBggWFjvXss8/qrrvu0h/+8Adt2bLF47mZM2fqww8/1JYtW3T//ffryJEjGj58uCRp9OjR2rNnjx544AFt2bJFH330kSZPnqyUlBQFBJTtf7nR0dGqUqWKlixZoszMTB07dqxMxwEAVBxCFgDAa0ycOFEPPfSQJk2apJYtW2rgwIElvjepdevWWrFihbZt26ZrrrlGV155pSZNmqS4uDh3m5deekm33XabRo8erRYtWmjkyJEeS7yf7Z///Kduv/12/eEPf9C2bdvc+5966ik99dRTatOmjb799lt9/PHHioqKkiTVq1dPixcv1po1a9SmTRvde++9GjFihB577LEy/0yCgoL0wgsv6OWXX1ZcXJxuuummMh8LAFAxHMbZcxoAAECRdu/ercaNG2vDhg1q27at3eUAALwYI1kAAAAAYCFCFgAAAABYiOmCAAAAAGAhRrIAAAAAwEKELAAAAACwECELAAAAACxEyAIAAAAACxGyAAAAAMBChCwAAAAAsBAhCwAAAAAsRMgCAAAAAAv9Py9yMHM9tCSgAAAAAElFTkSuQmCC",
62
+ "text/plain": [
63
+ "<Figure size 1000x600 with 1 Axes>"
64
+ ]
65
+ },
66
+ "metadata": {},
67
+ "output_type": "display_data"
68
+ }
69
+ ],
70
+ "source": [
71
+ "# plot the val loss curves\n",
72
+ "val_losses = np.lib.format.open_memmap(\"val_losses.npy\", dtype=np.float32, mode=\"r\")\n",
73
+ "last_val_loss_idx = np.lib.format.open_memmap(\"last_val_loss_idx.npy\", dtype=np.float32, mode=\"r\")\n",
74
+ "plt.figure(figsize=(10, 6))\n",
75
+ "plt.plot(val_losses[:last_val_loss_idx[...]+1], label=\"validation loss\", color=\"red\")\n",
76
+ "plt.xlabel(\"checkpoint\")\n",
77
+ "plt.ylabel(\"loss\")\n",
78
+ "plt.title(\"validation loss curve\")\n",
79
+ "plt.legend()\n",
80
+ "plt.grid(True)\n",
81
+ "plt.show()"
82
+ ]
83
+ }
84
+ ],
85
+ "metadata": {
86
+ "kernelspec": {
87
+ "display_name": "ai",
88
+ "language": "python",
89
+ "name": "python3"
90
+ },
91
+ "language_info": {
92
+ "codemirror_mode": {
93
+ "name": "ipython",
94
+ "version": 3
95
+ },
96
+ "file_extension": ".py",
97
+ "mimetype": "text/x-python",
98
+ "name": "python",
99
+ "nbconvert_exporter": "python",
100
+ "pygments_lexer": "ipython3",
101
+ "version": "3.11.13"
102
+ }
103
+ },
104
+ "nbformat": 4,
105
+ "nbformat_minor": 5
106
+ }
datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/.terminated_phase1 ADDED
File without changes
datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/batch_losses.npy ADDED
Binary file (808 Bytes). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/checkpoints/best_checkpoint.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6d964e143f93f49f2e95d1654446c9b5dc6b515cda48503fe5d96e05ba6bfdf1
3
+ size 76597843
datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/checkpoints/last_checkpoint.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ebe9dd4e6377aabfb8696e17a0f755b43ea4635b47ed8dd34f4964fd23b0492e
3
+ size 76597843
datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/last_batch_loss_idx.npy ADDED
Binary file (132 Bytes). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/last_val_loss_idx.npy ADDED
Binary file (132 Bytes). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/recover/.terminated_phase2 ADDED
File without changes
datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/recover/actual_makespan.npy ADDED
Binary file (132 Bytes). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/recover/checkpoints_phase2/best_checkpoint_phase2.pth ADDED
Binary file (24.6 kB). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/recover/checkpoints_phase2/last_checkpoint_phase2.pth ADDED
Binary file (24.6 kB). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/recover/last_losses_idx.npy ADDED
Binary file (136 Bytes). View file
 
datasets/exhaustive_7_4/top_0/train_Bm_Wd1e-0/recover/makespan_losses.npy ADDED
Binary file (12.1 kB). View file