-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
-
112
-
113
-
114
-
115
-
116
-
117
-
118
-
119
-
120
-
121
-
122
-
123
-
124
-
125
-
126
-
127
-
128
-
129
-
130
-
131
-
132
-
133
-
134
-
135
-
136
-
137
-
138
-
139
-
140
-
141
-
142
-
143
-
144
-
145
-
146
-
147
-
148
-
149
-
150
-
151
-
152
-
153
-
154
-
155
-
156
-
157
-
158
-
159
-
160
-
161
-
162
-
163
-
164
-
165
-
166
-
167
-
168
-
169
-
170
-
171
-
172
-
173
-
174
-
175
-
176
-
177
-
178
-
179
-
180
-
181
-
182
-
183
-
184
-
185
-
186
-
187
-
188
-
189
-
190
-
191
-
192
-
193
-
194
-
195
-
196
-
197
-
198
-
199
-
200
-
201
-
202
-
203
-
204
-
205
-
206
-
207
-
208
-
209
-
210
-
211
-
212
-
213
-
214
-
215
-
216
-
217
-
218
-
219
-
220
-
221
-
222
-
223
-
224
-
225
-
226
-
227
-
228
-
229
-
230
-
231
-
232
-
233
-
234
-
235
-
236
-
237
-
238
-
239
-
240
-
241
-
242
-
243
-
244
-
245
-
246
-
247
-
248
-
249
-
250
-
251
-
252
-
253
-
254
-
255
-
256
-
257
-
258
-
259
-
260
-
261
-
262
-
263
-
264
-
265
-
266
-
267
-
268
-
269
-
270
-
271
-
272
-
273
-
274
-
275
-
276
-
277
-
278
-
279
-
280
-
281
-
282
-
283
-
284
-
285
-
286
-
287
-
288
-
289
-
290
-
291
-
292
-
293
-
294
-
295
-
296
-
297
-
298
-
299
-
300
-
301
-
302
-
303
-
304
-
305
-
306
-
307
-
308
-
309
-
310
-
311
-
312
-
313
-
314
-
315
-
316
-
317
-
318
-
319
-
320
-
321
-
322
-
323
-
324
-
325
-
326
-
327
-
328
-
329
-
330
-
331
-
332
-
333
-
334
-
335
-
336
-
337
-
338
-
339
-
340
-
341
-
342
-
343
-
344
-
345
-
346
-
347
-
348
-
349
-
350
-
351
-
352
-
353
-
354
-
355
-
356
-
357
-
358
-
359
-
360
-
361
-
362
-
363
-
364
-
365
-
366
-
367
-
368
-
369
-
370
-
371
-
372
-
373
-
374
-
375
-
376
-
377
-
378
-
379
-
380
-
381
-
382
-
383
-
384
-
385
-
386
-
387
-
388
-
389
-
390
-
391
-
392
-
393
-
394
-
395
-
396
-
397
-
398
-
399
-
400
-
401
-
402
-
403
-
404
-
405
-
406
-
407
-
408
-
409
-
410
-
411
-
412
-
413
-
414
-
415
-
416
-
417
-
418
-
419
-
420
-
421
-
422
-
423
-
424
-
425
-
426
-
427
-
428
-
429
-
430
-
431
-
432
-
433
-
434
-
435
-
436
-
437
-
438
-
439
-
440
-
441
-
442
-
443
-
444
-
445
-
446
-
447
-
448
-
449
-
450
-
451
-
452
-
453
-
454
-
455
-
456
-
457
-
458
-
459
-
460
-
461
-
462
-
463
-
464
-
465
-
466
-
467
-
468
-
469
-
470
-
471
-
472
-
473
-
474
-
475
-
476
-
477
-
478
-
479
-
480
-
481
-
482
-
483
-
484
-
485
-
486
-
487
-
488
-
489
-
490
-
491
-
492
-
493
-
494
-
495
-
496
-
497
-
498
-
499
-
500
-
501
-
502
-
503
-
504
-
505
-
506
-
507
-
508
-
509
-
510
-
511
-
512
-
513
-
514
-
515
-
516
-
517
-
518
-
519
-
520
-
521
-
522
-
523
-
524
-
525
-
526
-
527
-
528
-
529
-
530
-
531
-
532
-
533
-
534
-
535
-
536
-
537
-
538
-
539
-
540
-
541
-
542
-
543
-
544
-
545
-
546
-
547
-
548
-
549
-
550
-
551
-
552
-
553
-
554
-
555
-
556
-
557
-
558
-
559
-
560
-
561
-
562
-
563
-
564
-
565
-
566
-
567
-
568
-
569
-
570
-
571
-
572
-
573
-
574
-
575
-
576
-
577
-
578
-
579
-
580
-
581
-
582
-
583
-
584
-
585
-
586
-
587
-
588
-
589
-
590
-
591
-
592
-
593
-
594
-
595
-
596
-
597
-
598
-
599
-
600
-
601
-
602
-
603
-
604
-
605
-
606
-
607
-
608
-
609
-
610
-
611
-
612
-
613
-
614
-
615
-
616
-
617
-
618
-
619
-
620
-
621
-
622
-
623
-
624
-
625
-
626
-
627
-
628
-
629
-
630
-
631
-
632
-
633
-
634
-
635
-
636
-
637
-
638
-
639
-
640
-
641
-
642
-
643
-
644
-
645
-
646
-
647
-
648
-
649
-
650
-
651
-
652
-
653
-
654
-
655
-
656
-
657
-
658
-
659
-
660
-
661
-
662
-
663
-
664
-
665
-
666
-
667
-
668
-
669
-
670
-
671
-
672
-
673
-
674
-
675
-
676
-
677
-
678
-
679
-
680
-
681
-
682
-
683
-
684
-
685
-
686
-
687
-
688
-
689
-
690
-
691
-
692
-
693
-
694
-
695
-
696
-
697
-
698
-
699
-
700
-
701
-
702
-
703
-
704
-
705
-
706
-
707
-
708
-
709
-
710
-
711
-
712
-
713
-
714
-
715
-
716
-
717
-
718
-
719
-
720
-
721
-
722
-
723
-
724
-
725
-
726
-
727
-
728
-
729
-
730
-
731
-
732
-
733
-
734
-
735
-
736
-
737
-
738
-
739
-
740
-
741
-
742
-
743
-
744
-
745
-
746
-
747
-
748
-
749
-
750
-
751
-
752
-
753
-
754
-
755
-
756
-
757
-
758
-
759
-
760
-
761
-
762
-
763
-
764
-
765
-
766
-
767
-
768
-
769
-
770
-
771
-
772
-
773
-
774
-
775
-
776
-
777
-
778
-
779
-
780
-
781
-
782
-
783
-
784
-
785
-
786
-
787
-
788
-
789
-
790
-
791
-
792
-
793
-
794
-
795
-
796
-
797
-
798
-
799
-
800
-
801
-
802
-
803
-
804
-
805
-
806
-
807
-
808
-
809
-
810
-
811
-
812
-
813
-
814
-
815
-
816
-
817
-
818
-
819
-
820
-
821
-
822
-
823
-
824
-
825
-
826
-
827
-
828
-
829
-
830
-
831
-
832
-
833
-
834
-
835
-
836
-
837
-
838
-
839
-
840
-
841
-
842
-
843
-
844
-
845
-
846
-
847
-
848
-
849
-
850
-
851
-
852
-
853
-
854
-
855
-
856
-
857
-
858
-
859
-
860
-
861
-
862
-
863
-
864
-
865
-
866
-
867
-
868
-
869
-
870
-
871
-
872
-
873
-
874
-
875
-
876
-
877
-
878
-
879
-
880
-
881
-
882
-
883
-
884
-
885
-
886
-
887
-
888
-
889
-
890
-
891
-
892
-
893
-
894
-
895
-
896
-
897
-
898
-
899
-
900
-
901
-
902
-
903
-
904
-
905
-
906
-
907
-
908
-
909
-
910
-
911
-
912
-
913
-
914
-
915
-
916
-
917
-
918
-
919
-
920
-
921
-
922
-
923
-
924
-
925
-
926
-
927
-
928
-
929
-
930
-
931
-
932
-
933
-
934
-
935
-
936
-
937
-
938
-
939
-
940
-
941
-
942
-
943
-
944
-
945
-
946
-
947
-
948
-
949
-
950
-
951
-
952
-
953
-
954
-
955
-
956
-
957
-
958
-
959
-
960
-
961
-
962
-
963
-
964
-
965
-
966
-
967
-
968
-
969
-
970
-
971
-
972
-
973
-
974
-
975
-
976
-
977
-
978
-
979
-
980
-
981
-
982
-
983
-
984
-
985
-
986
-
987
-
988
-
989
-
990
-
991
-
992
-
993
-
994
-
995
-
996
-
997
-
998
-
999
-
1000
-
1001
-
1002
-
1003
-
1004
-
1005
-
1006
-
1007
-
1008
-
1009
-
1010
-
1011
-
1012
-
1013
-
1014
-
1015
-
1016
-
1017
-
1018
-
1019
-
1020
-
1021
-
1022
-
1023
-
1024
-
1025
-
1026
-
1027
-
1028
-
1029
-
1030
-
1031
-
1032
-
1033
-
1034
-
1035
-
1036
-
1037
-
1038
-
1039
-
1040
-
1041
-
1042
-
1043
-
1044
-
1045
-
1046
-
1047
-
1048
-
1049
-
1050
-
1051
-
1052
-
1053
-
1054
-
1055
-
1056
-
1057
-
1058
-
1059
-
1060
-
1061
-
1062
-
1063
-
1064
-
1065
-
1066
-
1067
-
1068
-
1069
-
1070
-
1071
-
1072
-
1073
-
1074
-
1075
-
1076
-
1077
-
1078
-
1079
-
1080
-
1081
-
1082
-
1083
-
1084
-
1085
-
1086
-
1087
-
1088
-
1089
-
1090
-
1091
-
1092
-
1093
-
1094
-
1095
-
1096
-
1097
-
1098
-
1099
-
1100
-
1101
-
1102
-
1103
-
1104
-
1105
-
1106
-
1107
-
1108
-
1109
-
1110
-
1111
-
1112
-
1113
-
1114
-
1115
-
1116
-
1117
-
1118
-
1119
-
1120
-
1121
-
1122
-
1123
-
1124
-
1125
-
1126
-
1127
-
1128
-
1129
-
1130
-
1131
-
1132
-
1133
-
1134
-
1135
-
1136
-
1137
-
1138
-
1139
-
1140
-
1141
-
1142
-
1143
-
1144
-
1145
-
1146
-
1147
-
1148
-
1149
-
1150
-
1151
-
1152
-
1153
-
1154
-
1155
-
1156
-
1157
-
1158
-
1159
-
1160
-
1161
-
1162
-
1163
-
1164
-
1165
-
1166
-
1167
-
1168
-
1169
-
1170
-
1171
-
1172
-
1173
-
1174
-
1175
-
1176
-
1177
-
1178
-
1179
-
1180
-
1181
-
1182
-
1183
-
1184
-
1185
-
1186
-
1187
-
1188
-
1189
-
1190
-
1191
-
1192
-
1193
-
1194
-
1195
-
1196
-
1197
-
1198
-
1199
-
1200
-
1201
-
1202
-
1203
-
1204
-
1205
-
1206
-
1207
-
1208
-
1209
-
1210
-
1211
-
1212
-
1213
-
1214
-
1215
-
1216
-
1217
-
1218
-
1219
-
1220
-
1221
-
1222
-
1223
-
1224
-
1225
-
1226
-
1227
-
1228
-
1229
-
1230
-
1231
-
1232
-
1233
-
1234
-
1235
-
1236
-
1237
-
1238
-
1239
-
1240
-
1241
-
1242
-
1243
-
1244
-
1245
-
1246
-
1247
-
1248
-
1249
-
1250
-
1251
-
1252
-
1253
-
1254
-
1255
-
1256
-
1257
-
1258
-
1259
-
1260
-
1261
-
1262
-
1263
-
1264
-
1265
-
1266
-
1267
-
1268
-
1269
-
1270
-
1271
-
1272
-
1273
-
1274
-
1275
-
1276
-
1277
-
1278
-
1279
-
1280
-
1281
-
1282
-
1283
-
1284
-
1285
-
1286
-
1287
-
1288
-
1289
-
1290
-
1291
-
1292
-
1293
-
1294
-
1295
-
1296
-
1297
-
1298
-
1299
-
1300
-
1301
-
1302
-
1303
-
1304
-
1305
-
1306
-
1307
-
1308
-
1309
-
1310
-
1311
-
1312
-
1313
-
1314
-
1315
-
1316
-
1317
-
1318
-
1319
-
1320
-
1321
-
1322
-
1323
-
1324
-
1325
-
1326
-
1327
-
1328
-
1329
-
1330
-
1331
-
1332
-
1333
-
1334
-
1335
-
1336
-
1337
-
1338
-
1339
-
1340
-
1341
-
1342
-
1343
-
1344
-
1345
-
1346
-
1347
-
1348
-
1349
-
1350
-
1351
-
1352
-
1353
-
1354
-
1355
-
1356
-
1357
-
1358
-
1359
-
1360
-
1361
-
1362
-
1363
-
1364
-
1365
-
1366
-
1367
-
1368
-
1369
-
1370
-
1371
-
1372
-
1373
-
1374
-
1375
-
1376
-
1377
-
1378
-
1379
-
1380
-
1381
-
1382
-
1383
-
1384
-
1385
-
1386
-
1387
-
1388
-
1389
-
1390
-
1391
-
1392
-
1393
-
1394
-
1395
-
1396
-
1397
-
1398
-
1399
-
1400
-
1401
-
1402
-
1403
-
1404
-
1405
-
1406
-
1407
-
1408
-
1409
-
1410
-
1411
-
1412
-
1413
-
1414
-
1415
-
1416
-
1417
-
1418
-
1419
-
1420
-
1421
-
1422
-
1423
-
1424
-
1425
-
1426
-
1427
-
1428
-
1429
-
1430
-
1431
-
1432
-
1433
-
1434
-
1435
-
1436
-
1437
-
1438
-
1439
-
1440
-
1441
-
1442
-
1443
-
1444
-
1445
-
1446
-
1447
-
1448
-
1449
-
1450
-
1451
-
1452
-
1453
-
1454
-
1455
-
1456
-
1457
-
1458
-
1459
-
1460
-
1461
-
1462
-
1463
-
1464
-
1465
-
1466
-
1467
-
1468
-
1469
-
1470
-
1471
-
1472
-
1473
-
1474
-
1475
-
1476
-
1477
-
1478
-
1479
-
1480
-
1481
-
1482
-
1483
-
1484
-
1485
-
1486
-
1487
-
1488
-
1489
-
1490
-
1491
-
1492
-
1493
-
1494
-
1495
-
1496
-
1497
-
1498
-
1499
-
1500
-
1501
-
1502
-
1503
-
1504
-
1505
-
1506
-
1507
-
1508
-
1509
-
1510
-
1511
-
1512
-
1513
-
1514
-
1515
-
1516
-
1517
-
1518
-
1519
-
1520
-
1521
-
1522
-
1523
-
1524
-
1525
-
1526
-
1527
-
1528
-
1529
-
1530
-
1531
-
1532
-
1533
-
1534
-
1535
-
1536
-
1537
-
1538
-
1539
-
1540
-
1541
-
1542
-
1543
-
1544
-
1545
-
1546
-
1547
-
1548
-
1549
-
1550
-
1551
-
1552
-
1553
-
1554
-
1555
-
1556
-
1557
-
1558
-
1559
-
1560
-
1561
-
1562
-
1563
-
1564
-
1565
-
1566
-
1567
-
1568
-
1569
-
1570
-
1571
-
1572
-
1573
-
1574
-
1575
-
1576
-
1577
-
1578
-
1579
-
1580
-
1581
-
1582
-
1583
-
1584
-
1585
-
1586
-
1587
-
1588
-
1589
-
1590
-
1591
-
1592
-
1593
-
1594
-
1595
-
1596
-
1597
-
1598
-
1599
-
1600
-
1601
-
1602
-
1603
-
1604
-
1605
-
1606
-
1607
-
1608
-
1609
-
1610
-
1611
-
1612
-
1613
-
1614
-
1615
-
1616
-
1617
-
1618
-
1619
-
1620
-
1621
-
1622
-
1623
-
1624
-
1625
-
1626
-
1627
-
1628
-
1629
-
1630
-
1631
-
1632
-
1633
-
1634
-
1635
-
1636
-
1637
-
1638
-
1639
-
1640
-
1641
-
1642
-
1643
-
1644
-
1645
-
1646
-
1647
-
1648
-
1649
-
1650
-
1651
-
1652
-
1653
-
1654
-
1655
-
1656
-
1657
-
1658
-
1659
-
1660
-
1661
-
1662
-
1663
-
1664
-
1665
-
1666
-
1667
-
1668
-
1669
-
1670
-
1671
-
1672
-
1673
-
1674
-
1675
-
1676
-
1677
-
1678
-
1679
-
1680
-
1681
-
1682
-
1683
-
1684
-
1685
-
1686
-
1687
-
1688
-
1689
-
1690
-
1691
-
1692
-
1693
-
1694
-
1695
-
1696
-
1697
-
1698
-
1699
-
1700
-
1701
-
1702
-
1703
-
1704
-
1705
-
1706
-
1707
-
1708
-
1709
-
1710
-
1711
-
1712
-
1713
-
1714
-
1715
-
1716
-
1717
-
1718
-
1719
-
1720
-
1721
-
1722
-
1723
-
1724
-
1725
-
1726
-
1727
-
1728
-
1729
-
1730
-
1731
-
1732
-
1733
-
1734
-
1735
-
1736
-
1737
-
1738
-
1739
-
1740
-
1741
-
1742
-
1743
-
1744
-
1745
-
1746
-
1747
-
1748
-
1749
-
1750
-
1751
-
1752
-
1753
-
1754
-
1755
-
1756
-
1757
-
1758
-
1759
-
1760
-
1761
-
1762
-
1763
-
1764
-
1765
-
1766
-
1767
-
1768
-
1769
-
1770
-
1771
-
1772
-
1773
-
1774
-
1775
-
1776
-
1777
-
1778
-
1779
-
1780
-
1781
-
1782
-
1783
-
1784
-
1785
-
1786
-
1787
-
1788
-
1789
-
1790
-
1791
-
1792
-
1793
-
1794
-
1795
-
1796
-
1797
-
1798
-
1799
-
1800
-
1801
-
1802
-
1803
-
1804
-
1805
-
1806
-
1807
-
1808
-
1809
-
1810
-
1811
-
1812
-
1813
-
1814
-
1815
-
1816
-
1817
-
1818
-
1819
-
1820
-
1821
-
1822
-
1823
-
1824
-
1825
-
1826
-
1827
-
1828
-
1829
-
1830
-
1831
-
1832
-
1833
-
1834
-
1835
-
1836
-
1837
-
1838
-
1839
-
1840
-
1841
-
1842
-
1843
-
1844
-
1845
-
1846
-
1847
-
1848
-
1849
-
1850
-
1851
-
1852
-
1853
-
1854
-
1855
-
1856
-
1857
-
1858
-
1859
-
1860
-
1861
-
1862
-
1863
-
1864
-
1865
-
1866
-
1867
-
1868
-
1869
-
1870
-
1871
-
1872
-
1873
-
1874
-
1875
-
1876
-
1877
-
1878
-
1879
-
1880
-
1881
-
1882
-
1883
-
1884
-
1885
-
1886
-
1887
-
1888
-
1889
-
1890
-
1891
-
1892
-
1893
-
1894
-
1895
-
1896
-
1897
-
1898
-
1899
-
1900
-
1901
-
1902
-
1903
-
1904
-
1905
-
1906
-
1907
-
1908
-
1909
-
1910
-
1911
-
1912
-
1913
-
1914
-
1915
-
1916
-
1917
-
1918
-
1919
-
1920
-
1921
-
1922
-
1923
-
1924
-
1925
-
1926
-
1927
-
1928
-
1929
-
1930
-
1931
-
1932
-
1933
-
1934
-
1935
-
1936
-
1937
-
1938
-
1939
-
1940
-
1941
-
1942
-
1943
-
1944
-
1945
-
1946
-
1947
-
1948
-
1949
-
1950
-
1951
-
1952
-
1953
-
1954
-
1955
-
1956
-
1957
-
1958
-
1959
-
1960
-
1961
-
1962
-
1963
-
1964
-
1965
-
1966
-
1967
-
1968
-
1969
-
1970
-
1971
-
1972
-
1973
-
1974
-
1975
-
1976
-
1977
-
1978
-
1979
-
1980
-
1981
-
1982
-
1983
-
1984
-
1985
-
1986
-
1987
-
1988
-
1989
-
1990
-
1991
-
1992
-
1993
-
1994
-
1995
-
1996
-
1997
-
1998
-
1999
-
2000
-
2001
-
2002
-
2003
-
2004
-
2005
-
2006
-
2007
-
2008
-
2009
-
2010
-
2011
-
2012
-
2013
-
2014
-
2015
-
2016
-
2017
-
2018
-
2019
-
2020
-
2021
-
2022
-
2023
-
2024
-
2025
-
2026
-
2027
-
2028
-
2029
-
2030
-
2031
-
2032
-
2033
-
2034
-
2035
-
2036
-
2037
-
2038
-
2039
-
2040
-
2041
-
2042
-
2043
-
2044
-
2045
-
2046
-
2047
-
2048
-
2049
-
2050
-
2051
-
2052
-
2053
-
2054
-
2055
-
2056
-
2057
-
2058
-
2059
-
2060
-
2061
-
2062
-
2063
-
2064
-
2065
-
2066
-
2067
-
2068
-
2069
-
2070
-
2071
-
2072
-
2073
-
2074
-
2075
-
2076
-
2077
-
2078
-
2079
-
2080
-
2081
-
2082
-
2083
-
2084
-
2085
-
2086
-
2087
-
2088
-
2089
-
2090
-
2091
-
2092
-
2093
-
2094
-
2095
-
2096
-
2097
-
2098
-
2099
-
2100
-
2101
-
2102
-
2103
-
2104
-
2105
-
2106
-
2107
-
2108
-
2109
-
2110
-
2111
-
2112
-
2113
-
2114
-
2115
-
2116
-
2117
-
2118
-
2119
-
2120
-
2121
-
2122
-
2123
-
2124
-
2125
-
2126
-
2127
-
2128
-
2129
-
2130
-
2131
-
2132
-
2133
-
2134
-
2135
-
2136
-
2137
-
2138
-
2139
-
2140
-
2141
-
2142
-
2143
-
2144
-
2145
-
2146
-
2147
-
2148
-
2149
-
2150
-
2151
-
2152
-
2153
-
2154
-
2155
-
2156
-
2157
-
2158
-
2159
-
2160
-
2161
-
2162
-
2163
-
2164
-
2165
-
2166
-
2167
-
2168
-
2169
-
2170
-
2171
-
2172
-
2173
-
2174
-
2175
-
2176
-
2177
-
2178
-
2179
-
2180
-
2181
-
2182
-
2183
-
2184
-
2185
-
2186
-
2187
-
2188
-
2189
-
2190
-
2191
-
2192
-
2193
-
2194
-
2195
-
2196
-
2197
-
2198
-
2199
-
2200
-
2201
-
2202
-
2203
-
2204
-
2205
-
2206
-
2207
-
2208
-
2209
-
2210
-
2211
-
2212
-
2213
-
2214
-
2215
-
2216
-
2217
-
2218
-
2219
-
2220
-
2221
-
2222
-
2223
-
2224
-
2225
-
2226
-
2227
-
2228
-
2229
-
2230
-
2231
-
2232
-
2233
-
2234
-
2235
-
2236
-
2237
-
2238
-
2239
-
2240
-
2241
-
2242
-
2243
-
2244
-
2245
-
2246
-
2247
-
2248
-
2249
-
2250
-
2251
-
2252
-
2253
-
2254
-
2255
-
2256
-
2257
-
2258
-
2259
-
2260
-
2261
-
2262
-
2263
-
2264
-
2265
-
2266
-
2267
-
2268
-
2269
-
2270
-
2271
-
2272
-
2273
-
2274
-
2275
-
2276
-
2277
-
2278
-
2279
-
2280
-
2281
-
2282
-
2283
-
2284
-
2285
-
2286
-
2287
-
2288
-
2289
-
2290
-
2291
-
2292
-
2293
-
2294
-
2295
-
2296
-
2297
-
2298
-
2299
-
2300
-
2301
-
2302
-
2303
-
2304
-
2305
-
2306
-
2307
-
2308
-
2309
-
2310
-
2311
-
2312
-
2313
-
2314
-
2315
-
2316
-
2317
-
2318
-
2319
-
2320
-
2321
-
2322
-
2323
-
2324
-
2325
-
2326
-
2327
-
2328
-
2329
-
2330
-
2331
-
2332
-
2333
-
2334
-
2335
-
2336
-
2337
-
2338
-
2339
-
2340
-
2341
-
2342
-
2343
-
2344
-
2345
-
2346
-
2347
-
2348
-
2349
-
2350
-
2351
-
2352
-
2353
-
2354
-
2355
-
2356
-
2357
-
2358
-
2359
-
2360
-
2361
-
2362
-
2363
-
2364
-
2365
-
2366
-
2367
-
2368
-
2369
-
2370
-
2371
-
2372
-
2373
-
2374
-
2375
-
2376
-
2377
-
2378
-
2379
-
2380
-
2381
-
2382
-
2383
-
2384
-
2385
-
2386
-
2387
-
2388
-
2389
-
2390
-
2391
-
2392
-
2393
-
2394
-
2395
-
2396
-
2397
-
2398
-
2399
-
2400
-
2401
-
2402
-
2403
-
2404
-
2405
-
2406
-
2407
-
2408
-
2409
-
2410
-
2411
-
2412
-
2413
-
2414
-
2415
-
2416
-
2417
-
2418
-
2419
-
2420
-
2421
-
2422
-
2423
-
2424
-
2425
-
2426
-
2427
-
2428
-
2429
-
2430
-
2431
-
2432
-
2433
-
2434
-
2435
-
2436
-
2437
-
2438
-
2439
-
2440
-
2441
-
2442
-
2443
-
2444
-
2445
-
2446
-
2447
-
2448
-
2449
-
2450
-
2451
-
2452
-
2453
-
2454
-
2455
-
2456
-
2457
-
2458
-
2459
-
2460
-
2461
-
2462
-
2463
-
2464
-
2465
-
2466
-
2467
-
2468
-
2469
-
2470
-
2471
-
2472
-
2473
-
2474
-
2475
-
2476
-
2477
-
2478
-
2479
-
2480
-
2481
-
2482
-
2483
-
2484
-
2485
-
2486
-
2487
-
2488
-
2489
-
2490
-
2491
-
2492
-
2493
-
2494
-
2495
-
2496
-
2497
-
2498
-
2499
-
2500
-
2501
-
2502
-
2503
-
2504
-
2505
-
2506
-
2507
-
2508
-
2509
-
2510
-
2511
-
2512
-
2513
-
2514
-
2515
-
2516
-
2517
-
2518
-
2519
-
2520
-
2521
-
2522
-
2523
-
2524
-
2525
-
2526
-
2527
-
2528
-
2529
-
2530
-
2531
-
2532
-
2533
-
2534
-
2535
-
2536
-
2537
-
2538
-
2539
-
2540
-
2541
-
2542
-
2543
-
2544
-
2545
-
2546
-
2547
-
2548
-
2549
-
2550
-
2551
-
2552
-
2553
-
2554
-
2555
-
2556
-
2557
-
2558
-
2559
-
2560
-
2561
-
2562
-
2563
-
2564
-
2565
-
2566
-
2567
-
2568
-
2569
-
2570
-
2571
-
2572
-
2573
-
2574
-
2575
-
2576
-
2577
-
2578
-
2579
-
2580
-
2581
-
2582
-
2583
-
2584
-
2585
-
2586
-
2587
-
2588
-
2589
-
2590
-
2591
-
2592
-
2593
-
2594
-
2595
-
2596
-
2597
-
2598
-
2599
-
2600
-
2601
-
2602
-
2603
-
2604
-
2605
-
2606
-
2607
-
2608
-
2609
-
2610
-
2611
-
2612
-
2613
-
2614
-
2615
-
2616
-
2617
-
2618
-
2619
-
2620
-
2621
-
2622
-
2623
-
2624
-
2625
-
2626
-
2627
-
2628
-
2629
-
2630
-
2631
-
2632
-
2633
-
2634
-
2635
-
2636
-
2637
-
2638
-
2639
-
2640
-
2641
-
2642
-
2643
-
2644
-
2645
-
2646
-
2647
-
2648
-
2649
-
2650
-
2651
-
2652
-
2653
-
2654
-
2655
-
2656
-
2657
-
2658
-
2659
-
2660
-
2661
-
2662
-
2663
-
2664
-
2665
-
2666
-
2667
-
2668
-
2669
-
2670
-
2671
-
2672
-
2673
-
2674
-
2675
-
2676
-
2677
-
2678
-
2679
-
2680
-
2681
-
2682
-
2683
-
2684
-
2685
-
2686
-
2687
-
2688
-
2689
-
2690
-
2691
-
2692
-
2693
-
2694
-
2695
-
2696
-
2697
-
2698
-
2699
-
2700
-
2701
-
2702
-
2703
-
2704
-
2705
-
2706
-
2707
-
2708
-
2709
-
2710
-
2711
-
2712
-
2713
-
2714
-
2715
-
2716
-
2717
-
2718
-
2719
-
2720
-
2721
-
2722
-
2723
-
2724
-
2725
-
2726
-
2727
-
2728
-
2729
-
2730
-
2731
-
2732
-
2733
-
2734
-
2735
-
2736
-
2737
-
2738
-
2739
-
2740
-
2741
-
2742
-
2743
-
2744
-
2745
-
2746
-
2747
-
2748
-
2749
-
2750
-
2751
-
2752
-
2753
-
2754
-
2755
-
2756
-
2757
-
2758
-
2759
-
2760
-
2761
-
2762
-
2763
-
2764
-
2765
-
2766
-
2767
-
2768
-
2769
-
2770
-
2771
-
2772
-
2773
-
2774
-
2775
-
2776
-
2777
-
2778
-
2779
-
2780
-
2781
-
2782
-
2783
-
2784
-
2785
-
2786
-
2787
-
2788
-
2789
-
2790
-
2791
-
2792
-
2793
-
2794
-
2795
-
2796
-
2797
-
2798
-
2799
-
2800
-
2801
-
2802
-
2803
-
2804
-
2805
-
2806
-
2807
-
2808
-
2809
-
2810
-
2811
-
2812
-
2813
-
2814
-
2815
-
2816
-
2817
-
2818
-
2819
-
2820
-
2821
-
2822
-
2823
-
2824
-
2825
-
2826
-
2827
-
2828
-
2829
-
2830
-
2831
-
2832
-
2833
-
2834
-
2835
-
2836
-
2837
-
2838
-
2839
-
2840
-
2841
-
2842
-
2843
-
2844
-
2845
-
2846
-
2847
-
2848
-
2849
-
2850
-
2851
-
2852
-
2853
-
2854
-
2855
-
2856
-
2857
-
2858
-
2859
-
2860
-
2861
-
2862
-
2863
-
2864
-
2865
-
2866
-
2867
-
2868
-
2869
-
2870
-
2871
-
2872
-
2873
-
2874
-
2875
-
2876
-
2877
-
2878
-
2879
-
2880
-
2881
-
2882
-
2883
-
2884
-
2885
-
2886
-
2887
-
2888
-
2889
-
2890
-
2891
-
2892
-
2893
-
2894
-
2895
-
2896
-
2897
-
2898
-
2899
-
2900
-
2901
-
2902
-
2903
-
2904
-
2905
-
2906
-
2907
-
2908
-
2909
-
2910
-
2911
-
2912
-
2913
-
2914
-
2915
-
2916
-
2917
-
2918
-
2919
-
2920
-
2921
-
2922
-
2923
-
2924
-
2925
-
2926
-
2927
-
2928
-
2929
-
2930
-
2931
-
2932
-
2933
-
2934
-
2935
-
2936
-
2937
-
2938
-
2939
-
2940
-
2941
-
2942
-
2943
-
2944
-
2945
-
2946
-
2947
-
2948
-
2949
-
2950
-
2951
-
2952
-
2953
-
2954
-
2955
-
2956
-
2957
-
2958
-
2959
-
2960
-
2961
-
2962
-
2963
-
2964
-
2965
-
2966
-
2967
-
2968
-
2969
-
2970
-
2971
-
2972
-
2973
-
2974
-
2975
-
2976
-
2977
-
2978
-
2979
-
2980
-
2981
-
2982
-
2983
-
2984
-
2985
-
2986
-
2987
-
2988
-
2989
-
2990
-
2991
-
2992
-
2993
-
2994
-
2995
-
2996
-
2997
-
2998
-
2999
-
3000
-
3001
-
3002
-
3003
-
3004
-
3005
-
3006
-
3007
-
3008
-
3009
-
3010
-
3011
-
3012
-
3013
-
3014
-
3015
-
3016
-
3017
-
3018
-
3019
-
3020
-
3021
-
3022
-
3023
-
3024
-
3025
-
3026
-
3027
-
3028
-
3029
-
3030
-
3031
-
3032
-
3033
-
3034
-
3035
-
3036
-
3037
-
3038
-
3039
-
3040
-
3041
-
3042
-
3043
-
3044
-
3045
-
3046
-
3047
-
3048
-
3049
-
3050
-
3051
-
3052
-
3053
-
3054
-
3055
-
3056
-
3057
-
3058
-
3059
-
3060
-
3061
-
3062
-
3063
-
3064
-
3065
-
3066
-
3067
-
3068
-
3069
-
3070
-
3071
-
3072
-
3073
-
3074
-
3075
-
3076
-
3077
-
3078
-
3079
-
3080
-
3081
-
3082
-
3083
-
3084
-
3085
-
3086
-
3087
-
3088
-
3089
-
3090
-
3091
-
3092
-
3093
-
3094
-
3095
-
3096
-
3097
-
3098
-
3099
-
3100
-
3101
-
3102
-
3103
-
3104
-
3105
-
3106
-
3107
-
3108
-
3109
-
3110
-
3111
-
3112
-
3113
-
3114
-
3115
-
3116
-
3117
-
3118
-
3119
-
3120
-
3121
-
3122
-
3123
-
3124
-
3125
-
3126
-
3127
-
3128
-
3129
-
3130
-
3131
-
3132
-
3133
-
3134
-
3135
-
3136
-
3137
-
3138
-
3139
-
3140
-
3141
-
3142
-
3143
-
3144
-
3145
-
3146
-
3147
-
3148
-
3149
-
3150
-
3151
-
3152
-
3153
-
3154
-
3155
-
3156
-
3157
-
3158
-
3159
-
3160
-
3161
-
3162
-
3163
-
3164
-
3165
-
3166
-
3167
-
3168
-
3169
-
3170
-
3171
-
3172
-
3173
-
3174
-
3175
-
3176
-
3177
-
3178
-
3179
-
3180
-
3181
-
3182
-
3183
-
3184
-
3185
-
3186
-
3187
-
3188
-
3189
-
3190
-
3191
-
3192
-
3193
-
3194
-
3195
-
3196
-
3197
-
3198
-
3199
-
3200
-
3201
-
3202
-
3203
-
3204
-
3205
-
3206
-
3207
-
3208
-
3209
-
3210
-
3211
-
3212
-
3213
-
3214
-
3215
-
3216
-
3217
-
3218
-
3219
-
3220
-
3221
-
3222
-
3223
-
3224
-
3225
-
3226
-
3227
-
3228
-
3229
-
3230
-
3231
-
3232
-
3233
-
3234
-
3235
-
3236
-
3237
-
3238
-
3239
-
3240
-
3241
-
3242
-
3243
-
3244
-
3245
-
3246
-
3247
-
3248
-
3249
-
3250
-
3251
-
3252
-
3253
-
3254
-
3255
-
3256
-
3257
-
3258
-
3259
-
3260
-
3261
-
3262
-
3263
-
3264
-
3265
-
3266
-
3267
-
3268
-
3269
-
3270
-
3271
-
3272
-
3273
-
3274
-
3275
-
3276
-
3277
-
3278
-
3279
-
3280
-
3281
-
3282
-
3283
-
3284
-
3285
-
3286
-
3287
-
3288
-
3289
-
3290
-
3291
-
3292
-
3293
-
3294
-
3295
-
3296
-
3297
-
3298
-
3299
-
3300
-
3301
-
3302
-
3303
-
3304
-
3305
-
3306
-
3307
-
3308
-
3309
-
3310
-
3311
-
3312
-
3313
-
3314
-
3315
-
3316
-
3317
-
3318
-
3319
-
3320
-
3321
-
3322
-
3323
-
3324
-
3325
-
3326
-
3327
-
3328
-
3329
-
3330
-
3331
-
3332
-
3333
-
3334
-
3335
-
3336
-
3337
-
3338
-
3339
-
3340
-
3341
-
3342
-
3343
-
3344
-
3345
-
3346
-
3347
-
3348
-
3349
-
3350
-
3351
-
3352
-
3353
-
3354
-
3355
-
3356
-
3357
-
3358
-
3359
-
3360
-
3361
-
3362
-
3363
-
3364
-
3365
-
3366
-
3367
-
3368
-
3369
-
3370
-
3371
-
3372
-
3373
-
3374
-
3375
-
3376
-
3377
-
3378
-
3379
-
3380
-
3381
-
3382
-
3383
-
3384
-
3385
-
3386
-
3387
-
3388
-
3389
-
3390
-
3391
-
3392
-
3393
-
3394
-
3395
-
3396
-
3397
-
3398
-
3399
-
3400
-
3401
-
3402
-
3403
-
3404
-
3405
-
3406
-
3407
-
3408
-
3409
-
3410
-
3411
-
3412
-
3413
-
3414
-
3415
-
3416
-
3417
-
3418
-
3419
-
3420
-
3421
-
3422
-
3423
-
3424
-
3425
-
3426
-
3427
-
3428
-
3429
-
3430
-
3431
-
3432
-
3433
-
3434
-
3435
-
3436
-
3437
-
3438
-
3439
-
3440
-
3441
-
3442
-
3443
-
3444
-
3445
-
3446
-
3447
-
3448
-
3449
-
3450
-
3451
-
3452
-
3453
-
3454
-
3455
-
3456
-
3457
-
3458
-
3459
-
3460
-
3461
-
3462
-
3463
-
3464
-
3465
-
3466
-
3467
-
3468
-
3469
-
3470
-
3471
-
3472
-
3473
-
3474
-
3475
-
3476
-
3477
-
3478
-
3479
-
3480
-
3481
-
3482
-
3483
-
3484
-
3485
-
3486
-
3487
-
3488
-
3489
-
3490
-
3491
-
3492
-
3493
-
3494
-
3495
-
3496
-
3497
-
3498
-
3499
-
3500
-
3501
-
3502
-
3503
-
3504
-
3505
-
3506
-
3507
-
3508
-
3509
-
3510
-
3511
-
3512
-
3513
-
3514
-
3515
-
3516
-
3517
-
3518
-
3519
-
3520
-
3521
-
3522
-
3523
-
3524
-
3525
-
3526
-
3527
-
3528
-
3529
-
3530
-
3531
-
3532
-
3533
-
3534
-
3535
-
3536
-
3537
-
3538
-
3539
-
3540
-
3541
-
3542
-
3543
-
3544
-
3545
-
3546
-
3547
-
3548
-
3549
-
3550
-
3551
-
3552
-
3553
-
3554
-
3555
-
3556
-
3557
-
3558
-
3559
-
3560
-
3561
-
3562
-
3563
-
3564
-
3565
-
3566
-
3567
-
3568
-
3569
-
3570
-
3571
-
3572
-
3573
-
3574
-
3575
-
3576
-
3577
-
3578
-
3579
-
3580
-
3581
-
3582
-
3583
-
3584
-
3585
-
3586
-
3587
-
3588
-
3589
-
3590
-
3591
-
3592
-
3593
-
3594
-
3595
-
3596
-
3597
-
3598
-
3599
-
3600
-
3601
-
3602
-
3603
-
3604
-
3605
-
3606
-
3607
-
3608
-
3609
-
3610
-
3611
-
3612
-
3613
-
3614
-
3615
-
3616
-
3617
-
3618
-
3619
-
3620
-
3621
-
3622
-
3623
-
3624
-
3625
-
3626
-
3627
-
3628
-
3629
-
3630
-
3631
-
3632
-
3633
-
3634
-
3635
-
3636
-
3637
-
3638
-
3639
-
3640
-
3641
-
3642
-
3643
-
3644
-
3645
-
3646
-
3647
-
3648
-
3649
-
3650
-
3651
-
3652
-
3653
-
3654
-
3655
-
3656
-
3657
-
3658
-
3659
-
3660
-
3661
-
3662
-
3663
-
3664
-
3665
-
3666
-
3667
-
3668
-
3669
-
3670
-
3671
-
3672
-
3673
-
3674
-
3675
-
3676
-
3677
-
3678
-
3679
-
3680
-
3681
-
3682
-
3683
-
3684
-
3685
-
3686
-
3687
-
3688
-
3689
-
3690
-
3691
-
3692
-
3693
-
3694
-
3695
-
3696
-
3697
-
3698
-
3699
-
3700
-
3701
-
3702
-
3703
-
3704
-
3705
-
3706
-
3707
-
3708
-
3709
-
3710
-
3711
-
3712
-
3713
-
3714
-
3715
-
3716
-
3717
-
3718
-
3719
-
3720
-
3721
-
3722
-
3723
-
3724
-
3725
-
3726
-
3727
-
3728
-
3729
-
3730
-
3731
-
3732
-
3733
-
3734
-
3735
-
3736
-
3737
-
3738
-
3739
-
3740
-
3741
-
3742
-
3743
-
3744
-
3745
-
3746
-
3747
-
3748
-
3749
-
3750
-
3751
-
3752
-
3753
-
3754
-
3755
-
3756
-
3757
-
3758
-
3759
-
3760
-
3761
-
3762
-
3763
-
3764
-
3765
-
3766
-
3767
-
3768
-
3769
-
3770
-
3771
-
3772
-
3773
-
3774
-
3775
-
3776
-
3777
-
3778
-
3779
-
3780
-
3781
-
3782
-
3783
-
3784
-
3785
-
3786
-
3787
-
3788
-
3789
-
3790
-
3791
-
3792
-
3793
-
3794
-
3795
-
3796
-
3797
-
3798
-
3799
-
3800
-
3801
-
3802
-
3803
-
3804
-
3805
-
3806
-
3807
-
3808
-
3809
-
3810
-
3811
-
3812
-
3813
-
3814
-
3815
-
3816
-
3817
-
3818
-
3819
-
3820
-
3821
-
3822
-
3823
-
3824
-
3825
-
3826
-
3827
-
3828
-
3829
-
3830
-
3831
-
3832
-
3833
-
3834
-
3835
-
3836
-
3837
-
3838
-
3839
-
3840
-
3841
-
3842
-
3843
-
3844
-
3845
-
3846
-
3847
-
3848
-
3849
-
3850
-
3851
-
3852
-
3853
-
3854
-
3855
-
3856
-
3857
-
3858
-
3859
-
3860
-
3861
-
3862
-
3863
-
3864
-
3865
-
3866
-
3867
-
3868
-
3869
-
3870
-
3871
-
3872
-
3873
-
3874
-
3875
-
3876
-
3877
-
3878
-
3879
-
3880
-
3881
-
3882
-
3883
-
3884
-
3885
-
3886
-
3887
-
3888
-
3889
-
3890
-
3891
-
3892
-
3893
-
3894
-
3895
-
3896
-
3897
-
3898
-
3899
-
3900
-
3901
-
3902
-
3903
-
3904
-
3905
-
3906
-
3907
-
3908
-
3909
-
3910
-
3911
-
3912
-
3913
-
3914
-
3915
-
3916
-
3917
-
3918
-
3919
-
3920
-
3921
-
3922
-
3923
-
3924
-
3925
-
3926
-
3927
-
3928
-
3929
-
3930
-
3931
-
3932
-
3933
-
3934
-
3935
-
3936
-
3937
-
3938
-
3939
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "LPphBnKR-aWF"
},
"source": [
"# Step 0: Imports"
]
},
{
"cell_type": "code",
"execution_count": 1,
"execution_state": "idle",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ge5QvElvhCOw",
"outputId": "c7cdaefa-d6dc-44ad-c258-e4fb2aca97a5"
},
"outputs": [],
"source": [
"# using tqdm.auto glitches out collaborative editing\n",
"from tqdm import tqdm\n",
"import torch\n",
"import torch.nn as nn\n",
"from torch.utils.data import DataLoader, TensorDataset\n",
"import matplotlib as mpl\n",
"import matplotlib.pyplot as plt, mpld3\n",
"\n",
"from math import sqrt\n",
"from collections import deque\n",
"import os\n",
"import random\n",
"from concurrent.futures import ProcessPoolExecutor\n",
"import pickle\n",
"\n",
"torch.manual_seed(42)\n",
"random.seed(42)\n",
"\n",
"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
"assert device.type == \"cuda\", \"CUDA is not available. Please check your GPU setup.\""
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_state": "idle",
"metadata": {
"id": "lylOX2POPwFL"
},
"outputs": [],
"source": [
"# VTXS numbers here are inclusive\n",
"MIN_VTXS = 3\n",
"MAX_VTXS = 15\n",
"MAX_TUNE_VTXS = 7\n",
"AVG_DEG = 2\n",
"SEQ_LEN = MAX_VTXS + 1 # means 32 edges, final token is the target vertex\n",
"PAD_TOKEN = 0\n",
"EPOCH_SIZE = 2**20\n",
"# vertices are labelled 1,2,...,MAX_VTXS\n",
"# we also have a padding token which is 0."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gKt-yIpDebF1"
},
"source": [
"# Step 1: Generate synthetic data"
]
},
{
"cell_type": "code",
"execution_count": 3,
"execution_state": "idle",
"metadata": {},
"outputs": [],
"source": [
"# original task data\n",
"# the data will be edge lists\n",
"# like this: [1 3 1 5 2 4 0 0 0 0 2]\n",
"# this represents edges (1,3), (1,5) (2,4)\n",
"# (the zeros are just padding tokens)\n",
"# the final 2 means which vertex we're going to \n",
"\n",
"# the label is the shortest distance from vtx 1 to vtx 2\n",
"# or \"number of vertices\" if no path exists\n",
"\n",
"def random_graph(n):\n",
" edge_list = []\n",
" adjacencies = [set() for _ in range(n+1)]\n",
" indices = [random.randint(1, n) for _ in range(AVG_DEG * n)]\n",
" for i in range(0, len(indices), 2):\n",
" u = indices[i]\n",
" v = indices[i + 1]\n",
" if u != v:\n",
" if u < v:\n",
" edge_list += [u, v]\n",
" else:\n",
" edge_list += [v, u]\n",
" adjacencies[u].add(v)\n",
" adjacencies[v].add(u)\n",
" edge_list += [PAD_TOKEN]*(2*SEQ_LEN-1-len(edge_list))\n",
" return edge_list, adjacencies\n",
"\n",
"def SSSP(G, target=2, distonly=True):\n",
" dist = [MAX_VTXS] * len(G)\n",
" parent = [-1] * len(G)\n",
" dist[1] = 0\n",
" frontier = deque()\n",
" frontier.append(1)\n",
" while len(frontier) > 0:\n",
" vtx = frontier.popleft()\n",
" for x in G[vtx]:\n",
" if dist[x] == MAX_VTXS:\n",
" parent[x] = vtx\n",
" dist[x] = 1 + dist[vtx]\n",
" frontier.append(x)\n",
" if x == target:\n",
" if distonly:\n",
" return dist[x]\n",
" path = [x]\n",
" while parent[x] != -1:\n",
" x = parent[x]\n",
" path.append(x)\n",
" return list(reversed(path))\n",
" return MAX_VTXS if distonly else []\n",
"\n",
"# large: size up to MAX_VTXS instead of MAX_TUNE_VTXS\n",
"# target: 2, \"onpath\", \"any\"\n",
"# largetarget: whether can go up to MAX_VTXS or just MAX_TUNE_VTXS\n",
"def mkbatch(size, large=True, target=2, largetarget=True):\n",
" graphs = []\n",
" dists = []\n",
" \n",
" for i in range(size):\n",
" n = random.randint(MIN_VTXS, MAX_VTXS if large else MAX_TUNE_VTXS)\n",
" while True:\n",
" edge_list, adj_list = random_graph(n)\n",
" if target == 2:\n",
" # Train data\n",
" dist = SSSP(adj_list)\n",
" # Filter out some short distance graphs\n",
" if 6 <= dist < MAX_VTXS or (dist < 6 and 2 * random.random() < 1 / (6 - dist)) or (dist == MAX_VTXS and random.random() < 1 / MAX_VTXS):\n",
" edge_list[-1] = 2\n",
" break\n",
" elif target == \"onpath\":\n",
" path = SSSP(adj_list, 2, False)\n",
" if len(path) < 1:\n",
" continue\n",
" dist = random.randrange(1, len(path))\n",
" if largetarget or path[dist] <= MAX_TUNE_VTXS:\n",
" edge_list[-1] = path[dist]\n",
" break\n",
" elif target == \"any\":\n",
" edge_list[-1] = random.randint(2, MAX_VTXS if largetarget else MAX_TUNE_VTXS)\n",
" dist = SSSP(adj_list, edge_list[-1])\n",
" break\n",
" graphs.append(edge_list)\n",
" dists.append(dist)\n",
" \n",
" data = torch.tensor(graphs)\n",
" labels = torch.tensor(dists, dtype=torch.float32)\n",
" padding = data == PAD_TOKEN\n",
" return data, labels, padding\n",
"\n",
"def savebatch(size, idx):\n",
" data, labels, padding = mkbatch(size)\n",
" everything = {\n",
" \"data\": data,\n",
" \"labels\": labels,\n",
" \"padding\": padding,\n",
" }\n",
" \n",
" with open(f'data-new/{idx}.pickle', 'wb') as file:\n",
" pickle.dump(everything, file)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"execution_state": "idle",
"metadata": {},
"outputs": [],
"source": [
"# Only need to run this once to generate training data\n",
"# RESTART THE KERNEL BEFORE RUNNING AND ONLY RUN THE CELLS ABOVE\n",
"# Python is slow and awful\n",
"\n",
"# with ProcessPoolExecutor() as executor:\n",
"# for i in range(64):\n",
"# executor.submit(savebatch, EPOCH_SIZE, i)\n",
"# executor.shutdown()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"execution_state": "idle",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(tensor([[ 5, 11, 9, 10, 3, 4, 6, 13, 3, 9, 9, 13, 1, 10, 6, 8, 1, 2,\n",
" 6, 13, 4, 5, 1, 4, 2, 10, 0, 0, 0, 0, 2],\n",
" [ 4, 10, 1, 10, 2, 7, 6, 9, 4, 5, 4, 6, 5, 7, 3, 5, 0, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2],\n",
" [ 9, 10, 3, 7, 1, 3, 5, 6, 13, 14, 1, 15, 4, 6, 4, 11, 2, 11,\n",
" 6, 13, 9, 15, 7, 14, 10, 12, 3, 15, 0, 0, 2]]),\n",
" tensor([1., 5., 8.]),\n",
" tensor([[False, False, False, False, False, False, False, False, False, False,\n",
" False, False, False, False, False, False, False, False, False, False,\n",
" False, False, False, False, False, False, True, True, True, True,\n",
" False],\n",
" [False, False, False, False, False, False, False, False, False, False,\n",
" False, False, False, False, False, False, True, True, True, True,\n",
" True, True, True, True, True, True, True, True, True, True,\n",
" False],\n",
" [False, False, False, False, False, False, False, False, False, False,\n",
" False, False, False, False, False, False, False, False, False, False,\n",
" False, False, False, False, False, False, False, False, True, True,\n",
" False]]))"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mkbatch(3)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"execution_state": "idle",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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JiZGixYtarY9AgCA1sPWcPTZZ59p5MiRCg4O1muvvaajR49q8eLFuuqqq6yaRYsWacWKFcrKytK+ffvUoUMHeTwenT171qoZP368jhw5ory8PG3evFm7du3SAw88YM17vV6NGTNGPXv2VGFhoX79619r/vz5WrVqVbPvGQAAtGxBdr74U089pZiYGK1Zs8Yai42NtX7t8/m0bNkyzZkzR3feeack6fe//71cLpc2btyocePG6b333tOWLVt04MABDRkyRJL09NNP64c//KF+85vfKDo6Wi+88IKqq6v1/PPPKyQkRH379lVRUZGWLFniF6IAAABsPXP0yiuvaMiQIfrpT3+qyMhIDRw4UL/73e+s+ePHj6u0tFQJCQnWmNPp1PDhw1VQUCBJKigoUEREhBWMJCkhIUGBgYHat2+fVXPTTTcpJCTEqvF4PCouLtZnn312Xl9VVVXyer1+BwAAaBtsDUcffvihVq5cqWuvvVa5ubmaNm2aHnzwQa1du1aSVFpaKklyuVx+z3O5XNZcaWmpIiMj/eaDgoLUuXNnv5oLrWG+hikjI0NOp9M6YmJiGnXfAACg5bI1HNXV1WnQoEF68sknNXDgQD3wwAO6//77lZWVZWdbSk9PV2VlpXWcOHHC1n4AAEDzsTUcdevWTfHx8X5jcXFxKikpkSRFRUVJksrKyvxqysrKrLmoqCiVl5f7zZ87d06nTp3yq7nQGuZrmBwOh8LDw/0OAADQNtgajkaOHKni4mK/sT//+c/q2bOn9M+Ls6OiopSfn2/Ne71e7du3T263W5LkdrtVUVGhwsJCq2b79u2qq6vT8OHDrZpdu3appqbGqsnLy9N1113nd2ccAACAreEoNTVVe/fu1ZNPPqkPPvhA69at06pVq5ScnCxJCggIUEpKih5//HG98sorOnTokO69915FR0frrrvukv55punWW2/V/fffr/379+vNN9/U9OnTNW7cOEVHR0uSfvGLXygkJESTJ0/WkSNH9NJLL2n58uVKS0uzc/sAAKAFsvVW/qFDh2rDhg1KT0/XggULFBsbq2XLlmn8+PFWzaxZs3TmzBk98MADqqio0I033qgtW7YoNDTUqnnhhRc0ffp0jR49WoGBgUpKStKKFSuseafTqa1btyo5OVmDBw9W165dNW/ePG7jBwAA5wnw+Xw+u5to6bxer5xOpyor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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"bins = torch.bincount(mkbatch(2**15)[1].to(torch.uint8).cpu())\n",
"plt.bar(range(len(bins)), bins)\n",
"plt.xlabel(\"Label\")\n",
"plt.ylabel(\"Count\")\n",
"with open(\"plots/train-dist.html\", \"w\") as f:\n",
" mpld3.save_html(plt.gcf(), f)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"execution_state": "idle",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Count')"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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z549q+TkZHXq1EnXXHONJk6cqPLycq/XOHr0qOLj49WuXTuFhYXpkUce0fnz573WbNu2TUOHDlVQUJB69+6trKysFnuPAADgyuDT0SRJN910k06cOGE9duzYYe2bM2eO3nrrLb322mvKz8/X8ePHdffdd1v76+rqFB8fr9raWu3atUsvv/yysrKylJ6ebq05fPiw4uPjNXbsWBUVFWn27Nl64IEHtHHjxhZ/rwAAwHcF2D3AjwkICFBERESj7ZWVlfqv//ovrV69Wrfddpsk6aWXXlK/fv20e/dujRo1Sps2bdKHH36ozZs3Kzw8XIMHD9Z//Md/aN68eVq0aJECAwOVmZmpnj17asmSJZKkfv36aceOHXr22Wflcrla/P0CAADf5PNnmj7++GNFRkaqV69emjJlio4ePSpJKiws1Llz5xQXF2et7du3r7p166aCggJJUkFBgQYMGKDw8HBrjcvlktvt1sGDB601336NhjUNr/F9ampq5Ha7vR4AAODq5dPRFBMTo6ysLOXk5GjlypU6fPiwbr31Vp05c0ZlZWUKDAxUaGio19eEh4errKxMklRWVuYVTA37G/b90Bq3262vv/76e2fLyMiQ0+m0HlFRUc32vgEAgO/x6Y/nbr/9duvfAwcOVExMjLp37661a9eqbdu2ts6Wlpam1NRU67nb7SacAAC4ivn0mabvCg0N1Y033qhDhw4pIiJCtbW1qqio8FpTXl5uXQMVERHR6LfpGp7/2JqQkJAfDLOgoCCFhIR4PQAAwNXrioqmqqoqffLJJ+rSpYuGDRumNm3aKC8vz9pfWlqqo0ePKjY2VpIUGxurAwcO6OTJk9aa3NxchYSEKDo62lrz7ddoWNPwGgAAAPL1aHr44YeVn5+vI0eOaNeuXfqnf/on+fv765577pHT6VRSUpJSU1O1detWFRYWatq0aYqNjdWoUaMkSePHj1d0dLTuu+8+ffDBB9q4caMWLFig5ORkBQUFSZKmT5+uv/71r5o7d65KSkr0wgsvaO3atZozZ47N7x4AAPgSn76m6dNPP9U999yjL774Qtddd51uueUW7d69W9ddd50k6dlnn5Wfn58mTpyompoauVwuvfDCC9bX+/v7Kzs7WzNmzFBsbKzat2+vxMREPf7449aanj17asOGDZozZ46WLVumrl276sUXX+R2AwAAwIvD4/F47B7iauB2u+V0OlVZWcn1TZdRj/kb7B6h2R15Kv6Sv4bjAADN41J+fvv0x3MAAAC+gmgCAAAwQDQBAAAYIJoAAAAMEE0AAAAGiCYAAAADRBMAAIABogkAAMAA0QQAAGCAaAIAADBANAEAABggmgAAAAwQTQAAAAaIJgAAAANEEwAAgAGiCQAAwADRBAAAYIBoAgAAMEA0AQAAGCCaAAAADBBNAAAABogmAAAAA0QTAACAAaIJAADAANEEAABggGgCAAAwQDQBAAAYIJoAAAAMEE0AAAAGiCYAAAADRBMAAIABogkAAMAA0QQAAGCAaAIAADBANAEAABggmgAAAAwQTQAAAAaIJgAAAANEEwAAgAGiCQAAwADRBAAAYIBoAgAAMEA0AQAAGCCaAAAADBBNAAAABogmAAAAAwF2DwAAf48e8zfYPUKzO/JUvN0jALgIzjQBAAAYIJoAAAAMEE0AAAAGiCYAAAADRBMAAIABogkAAMAA0QQAAGCAaAIAADBANAEAABggmgAAAAwQTQAAAAaIJgAAAANEEwAAgAGi6TtWrFihHj16KDg4WDExMdq7d6/dIwEAAB8QYPcAvmTNmjVKTU1VZmamYmJitHTpUrlcLpWWliosLMzu8QDge/WYv8HuEZrdkafi7R4B8MKZpm955pln9OCDD2ratGmKjo5WZmam2rVrpz/+8Y92jwYAAGzGmaZv1NbWqrCwUGlpadY2Pz8/xcXFqaCgoNH6mpoa1dTUWM8rKyslSW63u4Umbp3qa76ye4Rm15T/ZjgOf8OxuIDjcEH/hRsvyyx2Kn7MZfcIV7WG/848Hs+PriWavvH555+rrq5O4eHhXtvDw8NVUlLSaH1GRoYee+yxRtujoqIu65y4+jiX2j2Bb+A4/A3H4gKOwwUch5Zx5swZOZ3OH1xDNDVRWlqaUlNTref19fU6ffq0OnXqJIfDYetsTeV2uxUVFaVjx44pJCTE7nFsxbG4gONwAcfhAo7D33AsLrgajoPH49GZM2cUGRn5o2uJpm907txZ/v7+Ki8v99peXl6uiIiIRuuDgoIUFBTktS00NPSyz9kSQkJCrtj/+Jsbx+ICjsMFHIcLOA5/w7G44Eo/Dj92hqkBF4J/IzAwUMOGDVNeXp61rb6+Xnl5eYqNjbV1NgAAYD/ONH1LamqqEhMTNXz4cI0cOVJLly5VdXW1pk2bZvdoAADAZkTTt0yaNEmnTp1Senq6ysrKNHjwYOXk5DS6OPxqFRQUpIULFzb62LE14lhcwHG4gONwAcfhbzgWF7S24+DwmPyOHQAAQCvHNU0AAAAGiCYAAAADRBMAAIABogkAAMAA0QTLihUr1KNHDwUHBysmJkZ79+61e6QWt337dt11112KjIyUw+HQ+vXr7R6pxWVkZGjEiBHq0KGDwsLClJCQoNLSUrvHssXKlSs1cOBA68Z9sbGxeuedd+wey3ZPPfWUHA6HZs+ebfcoLWrRokVyOBxej759+9o9lm0+++wz/fKXv1SnTp3Utm1bDRgwQPv27bN7rMuKaIIkac2aNUpNTdXChQv1/vvva9CgQXK5XDp58qTdo7Wo6upqDRo0SCtWrLB7FNvk5+crOTlZu3fvVm5urs6dO6fx48erurra7tFaXNeuXfXUU0+psLBQ+/bt02233aaf//znOnjwoN2j2ea9997TH/7wBw0cONDuUWxx00036cSJE9Zjx44ddo9kiy+//FKjR49WmzZt9M477+jDDz/UkiVLdO2119o92mXFLQcgSYqJidGIESO0fPly6Zu7oUdFRWnmzJmaP3++3ePZwuFwaN26dUpISLB7FFudOnVKYWFhys/P15gxY+wex3YdO3bU008/raSkJLtHaXFVVVUaOnSoXnjhBT3xxBMaPHiwli5tPX9NdtGiRVq/fr2KiorsHsV28+fP186dO/Xuu+/aPUqL4kwTVFtbq8LCQsXFxVnb/Pz8FBcXp4KCAltng/0qKyulb2KhNaurq9Orr76q6urqVvunlZKTkxUfH+/1vxWtzccff6zIyEj16tVLU6ZM0dGjR+0eyRZvvvmmhg8frn/+539WWFiYhgwZov/8z/+0e6zLjmiCPv/8c9XV1TW683l4eLjKyspsmwv2q6+v1+zZszV69Gj179/f7nFsceDAAV1zzTUKCgrS9OnTtW7dOkVHR9s9Vot79dVX9f777ysjI8PuUWwTExOjrKws5eTkaOXKlTp8+LBuvfVWnTlzxu7RWtxf//pXrVy5UjfccIM2btyoGTNm6Ne//rVefvllu0e7rPgzKgC+V3JysoqLi1vtdRuS1KdPHxUVFamyslKvv/66EhMTlZ+f36rC6dixY5o1a5Zyc3MVHBxs9zi2uf32261/Dxw4UDExMerevbvWrl3b6j6ura+v1/Dhw/W73/1OkjRkyBAVFxcrMzNTiYmJdo932XCmCercubP8/f1VXl7utb28vFwRERG2zQV7paSkKDs7W1u3blXXrl3tHsc2gYGB6t27t4YNG6aMjAwNGjRIy5Yts3usFlVYWKiTJ09q6NChCggIUEBAgPLz8/Xcc88pICBAdXV1do9oi9DQUN144406dOiQ3aO0uC5dujT6Pw79+vW76j+uJJqgwMBADRs2THl5eda2+vp65eXltdprN1ozj8ejlJQUrVu3Tlu2bFHPnj3tHsmn1NfXq6amxu4xWtS4ceN04MABFRUVWY/hw4drypQpKioqkr+/v90j2qKqqkqffPKJunTpYvcoLW706NGNbkXyf//3f+revbttM7UEPp6DJCk1NVWJiYkaPny4Ro4cqaVLl6q6ulrTpk2ze7QWVVVV5fX/Gg8fPqyioiJ17NhR3bp1s3W2lpKcnKzVq1frjTfeUIcOHazr2pxOp9q2bWv3eC0qLS1Nt99+u7p166YzZ85o9erV2rZtmzZu3Gj3aC2qQ4cOja5pa9++vTp16tSqrnV7+OGHddddd6l79+46fvy4Fi5cKH9/f91zzz12j9bi5syZo5tvvlm/+93v9C//8i/au3evVq1apVWrVtk92uXlAb7x/PPPe7p16+YJDAz0jBw50rN79267R2pxW7du9Uhq9EhMTLR7tBZzsfcvyfPSSy/ZPVqLu//++z3du3f3BAYGeq677jrPuHHjPJs2bbJ7LJ/w05/+1DNr1iy7x2hRkyZN8nTp0sUTGBjo+clPfuKZNGmS59ChQ3aPZZu33nrL079/f09QUJCnb9++nlWrVtk90mXHfZoAAAAMcE0TAACAAaIJAADAANEEAABggGgCAAAwQDQBAAAYIJoAAAAMEE0AAAAGiCYAAAADRBMA/ICsrCyFhob+3a/jcDi0fv36ZpkJgD2IJgBXvalTpyohIcHuMQBc4YgmAAAAA0QTgFbtmWee0YABA9S+fXtFRUXp3/7t31RVVdVo3fr163XDDTcoODhYLpdLx44d89r/xhtvaOjQoQoODlavXr302GOP6fz58y34TgBcbkQTgFbNz89Pzz33nA4ePKiXX35ZW7Zs0dy5c73WfPXVV3ryySf1pz/9STt37lRFRYUmT55s7X/33Xf1q1/9SrNmzdKHH36oP/zhD8rKytKTTz5pwzsCcLk4PB6Px+4hAOBymjp1qioqKowuxH799dc1ffp0ff7559I3F4JPmzZNu3fvVkxMjCSppKRE/fr10549ezRy5EjFxcVp3LhxSktLs17nf/7nfzR37lwdP35c+uZC8HXr1nFtFXAFC7B7AACw0+bNm5WRkaGSkhK53W6dP39eZ8+e1VdffaV27dpJkgICAjRixAjra/r27avQ0FB99NFHGjlypD744APt3LnT68xSXV1do9cBcGUjmgC0WkeOHNGdd96pGTNm6Mknn1THjh21Y8cOJSUlqba21jh2qqqq9Nhjj+nuu+9utC84OPgyTA7ADkQTgFarsLBQ9fX1WrJkifz8LlziuXbt2kbrzp8/r3379mnkyJGSpNLSUlVUVKhfv36SpKFDh6q0tFS9e/du4XcAoCURTQBahcrKShUVFXlt69y5s86dO6fnn39ed911l3bu3KnMzMxGX9umTRvNnDlTzz33nAICApSSkqJRo0ZZEZWenq4777xT3bp10y9+8Qv5+fnpgw8+UHFxsZ544okWe48ALi9+ew5Aq7Bt2zYNGTLE6/Hf//3feuaZZ/T73/9e/fv31yuvvKKMjIxGX9uuXTvNmzdP9957r0aPHq1rrrlGa9assfa7XC5lZ2dr06ZNGjFihEaNGqVnn31W3bt3b+F3CeBy4rfnAAAADHCmCQAAwADRBAAAYIBoAgAAMEA0AQAAGCCaAAAADBBNAAAABogmAAAAA0QTAACAAaIJAADAANEEAABggGgCAAAw8P8EXnfR5pfcLAAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"bins = torch.bincount(mkbatch(2**15, large=False, target=\"onpath\")[1].to(torch.uint8).cpu())\n",
"plt.bar(range(len(bins)), bins)\n",
"plt.xlabel(\"Label\")\n",
"plt.ylabel(\"Count\")"
]
},
{
"cell_type": "code",
"execution_count": 11,
"execution_state": "idle",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Count')"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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hSIjI3XgwAF3t9UoVVVV6emnn1Z4eLhatGihTp06af78+eb+ThrqHKGpiVi3bp2Sk5P1zDPP6ODBg+rZs6dsNpvOnDnj7tYand27dysxMVHvvfeesrOzdenSJcXGxur8+fPubq1R279/v/785z+rR48e7m6lUfv666911113qXnz5vr73/+uDz/8UOnp6WrTpo27W2uUXnjhBa1atUrLly/XRx99pBdeeEELFy7Un/70J3e31iTxyIEmIioqSv3799fy5cul7592HhYWpsmTJ2vWrFnubq9R+/LLLxUYGKjdu3dr0KBB7m6nUTp37pz69OmjlStX6tlnn1WvXr20dOlSd7fVKM2aNUt79+7Vu+++6+5WmoR7771XQUFBevnll42xESNGqEWLFnr99dfd2ltTxJ2mJuDixYsqKChQTEyMMebl5aWYmBjl5+e7tbemoLy8XJLUtm1bd7fSaCUmJiouLs7l3zjqx9tvv61+/frpN7/5jQIDA9W7d2/913/9l7vbarTuvPNO5eTk6B//+Ick6fDhw9qzZ4+GDx/u7taaJJ4I3gT861//UlVVVa0nmwcFBam4uNhtfTUF1dXVmjp1qu666y51797d3e00Sm+88YYOHjyo/fv3u7uVJuGzzz7TqlWrlJycrKeeekr79+/XE088IR8fH40bN87d7TU6s2bNksPhUJcuXeTt7a2qqio999xzGjNmjLtba5IITUA9SkxMVFFRkfbs2ePuVhqlkydPasqUKcrOzpafn5+722kSqqur1a9fPz3//POSpN69e6uoqEgZGRmEpnqwfv16rVmzRmvXrlW3bt1UWFioqVOnKjQ0lOvtBoSmJqB9+/by9vZWaWmpy3hpaamCg4Pd1ldjl5SUpKysLOXm5urmm292dzuNUkFBgc6cOaM+ffoYY1VVVcrNzdXy5ctVUVEhb29vt/bY2ISEhCgiIsJlrGvXrvrf//1ft/XUmE2fPl2zZs3SyJEjJUmRkZH65z//qbS0NEKTG7CmqQnw8fFR3759lZOTY4xVV1crJydH0dHRbu2tMXI6nUpKStLGjRu1c+dOhYeHu7ulRmvo0KH64IMPVFhYaGz9+vXTmDFjVFhYSGCqB3fddVetR2j84x//UIcOHdzWU2N24cIFeXm5/qr29vZWdXW123pqyrjT1EQkJydr3Lhx6tevnwYMGKClS5fq/PnzeuSRR9zdWqOTmJiotWvX6q233pK/v7/sdrskyWq1qkWLFu5ur1Hx9/evtVasVatWateuHWvI6sm0adN055136vnnn9dvf/tb7du3T6tXr9bq1avd3VqjdN999+m5557TLbfcom7duunQoUNavHixHn30UXe31iTxyIEmZPny5Vq0aJHsdrt69eqlF198UVFRUe5uq9GxWCxXHH/11Vc1fvz4G95PUzN48GAeOVDPsrKylJKSoo8//ljh4eFKTk7WhAkT3N1Wo/TNN9/o6aef1saNG3XmzBmFhoZq1KhRmjNnjnx8fNzdXpNDaAIAADCBNU0AAAAmEJoAAABMIDQBAACYQGgCAAAwgdAEAABgAqEJAADABEITAACACYQmAAAAEwhNAPAjMjMz1bp163/7OBaLRZs2baqTngC4B6EJQKM3fvx4xcfHu7sNAA0coQkAAMAEQhOAJm3x4sWKjIxUq1atFBYWpt///vc6d+5crbpNmzbp9ttvl5+fn2w2m06ePOky/9Zbb6lPnz7y8/PTrbfeqrlz56qysvIGngmA+kZoAtCkeXl56cUXX9TRo0f12muvaefOnZoxY4ZLzYULF/Tcc8/pL3/5i/bu3auysjKNHDnSmH/33Xc1duxYTZkyRR9++KH+/Oc/KzMzU88995wbzghAfbE4nU6nu5sAgPo0fvx4lZWVmVqI/de//lWTJk3Sv/71L+n7heCPPPKI3nvvPUVFRUmSiouL1bVrV73//vsaMGCAYmJiNHToUKWkpBjHef311zVjxgydOnVK+n4h+MaNG1lbBTRgzdzdAAC4044dO5SWlqbi4mI5HA5VVlbqu+++04ULF9SyZUtJUrNmzdS/f3/jNV26dFHr1q310UcfacCAATp8+LD27t3rcmepqqqq1nEANGyEJgBN1vHjx3Xvvffq8ccf13PPPae2bdtqz549SkhI0MWLF02HnXPnzmnu3Lm6//77a835+fnVQ+cA3IHQBKDJKigoUHV1tdLT0+Xl9f+XeK5fv75WXWVlpQ4cOKABAwZIkkpKSlRWVqauXbtKkvr06aOSkhLddtttN/gMANxIhCYATUJ5ebkKCwtdxtq3b69Lly7pT3/6k+677z7t3btXGRkZtV7bvHlzTZ48WS+++KKaNWumpKQkDRw40AhRc+bM0b333qtbbrlFDzzwgLy8vHT48GEVFRXp2WefvWHnCKB+8e05AE3Crl271Lt3b5ftv//7v7V48WK98MIL6t69u9asWaO0tLRar23ZsqVmzpyp0aNH66677tLPfvYzrVu3zpi32WzKysrS9u3b1b9/fw0cOFBLlixRhw4dbvBZAqhPfHsOAADABO40AQAAmEBoAgAAMIHQBAAAYAKhCQAAwARCEwAAgAmEJgAAABMITQAAACYQmgAAAEwgNAEAAJhAaAIAADCB0AQAAGDC/wOGFHlNUKJeowAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"bins = torch.bincount(mkbatch(2**15, large=True, target=\"onpath\", largetarget=False)[1].to(torch.uint8).cpu())\n",
"plt.bar(range(len(bins)), bins)\n",
"plt.xlabel(\"Label\")\n",
"plt.ylabel(\"Count\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Q3Cg_8UQep8g"
},
"source": [
"# Step 2: Define Transformer Model"
]
},
{
"cell_type": "code",
"execution_count": 13,
"execution_state": "idle",
"metadata": {
"id": "tLOWhg_CeWzH"
},
"outputs": [],
"source": [
"class TransformerModel(nn.Module):\n",
" def __init__(self, input_dim, model_dim, output_dim, num_heads, num_layers, seq_len, dropout):\n",
" super().__init__()\n",
" self.model_dim = model_dim\n",
" self.embedding = nn.Embedding(input_dim, model_dim // 2)\n",
" encoder_layer = nn.TransformerEncoderLayer(d_model=model_dim, nhead=num_heads,\n",
" dim_feedforward=model_dim*4,\n",
" dropout=dropout, batch_first=True)\n",
" self.transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers)\n",
" self.fc_out = nn.Linear(model_dim, output_dim)\n",
"\n",
" def forward(self, src, key_padding_mask):\n",
" batch_sz = src.size(0)\n",
" src = torch.cat((src, torch.full((batch_sz, 1), MAX_VTXS + 1, device=device)), dim=1)\n",
" embed = torch.cat((self.embedding(src[:,::2]), self.embedding(src[:,1::2])), dim=2)\n",
" output = self.transformer_encoder(embed, src_key_padding_mask=key_padding_mask[:, ::2])\n",
" return self.fc_out(output[:, -1, :])"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "bpIeg86S-hBb"
},
"source": [
"# Step 3: Make Model"
]
},
{
"cell_type": "code",
"execution_count": 14,
"execution_state": "idle",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "kWXvJRDYgFVP",
"outputId": "c13adb9d-6565-43b5-8437-20cef3dc0d16"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training data: 209715K\n",
"Trainable parameters in the model: 550433\n"
]
}
],
"source": [
"# PARAMS\n",
"VOCAB_SIZE = 1 + MAX_VTXS + 1 # pad plus max number of vertices plus target token\n",
"MODEL_DIM = 64 # Dimension of model (embedding and transformer)\n",
"NEPOCHS = 200\n",
"BSZ = 2**15 # Batch size\n",
"NHEADS = 2\n",
"NLAYERS = 11\n",
"DROPOUT = 0 # 0.2\n",
"model = TransformerModel(input_dim=VOCAB_SIZE, model_dim=MODEL_DIM,\n",
" output_dim=1, num_heads=NHEADS,\n",
" num_layers=NLAYERS, seq_len=SEQ_LEN,\n",
" dropout=DROPOUT).to(device)\n",
"model = torch.compile(model)\n",
"\n",
"trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad)\n",
"print(f\"Training data: {NEPOCHS*EPOCH_SIZE//10**3}K\")\n",
"print(f\"Trainable parameters in the model: {trainable_params}\")\n",
"\n",
"train_err = []\n",
"len1 = []\n",
"len2 = []\n",
"len3 = []\n",
"leninf = []\n",
"epoch = 0\n",
"\n",
"# clear loss file\n",
"open('loss', 'w').close()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"execution_state": "idle",
"metadata": {},
"outputs": [],
"source": [
"# model = TransformerModel(input_dim=VOCAB_SIZE, model_dim=MODEL_DIM,\n",
"# output_dim=1, num_heads=NHEADS,\n",
"# num_layers=NLAYERS, seq_len=SEQ_LEN,\n",
"# dropout=DROPOUT).to(device)\n",
"# model = torch.compile(model)\n",
"# model.load_state_dict(torch.load('model.pth', weights_only=True))\n",
"\n",
"LR = 5e-4\n",
"\n",
"criterion = nn.MSELoss()\n",
"optimizer = torch.optim.Adam(model.parameters(), lr=LR)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "f8Zn33m7CxL5"
},
"source": [
"# Step 4: Train the Model for the first task"
]
},
{
"cell_type": "code",
"execution_count": null,
"execution_state": "running",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 486
},
"id": "pvTfzGmCeXU4",
"outputId": "0d3a20f3-23be-4c19-9eb6-46bfe11a48b1"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/sipb/.venv/lib64/python3.12/site-packages/torch/nn/functional.py:6278: UserWarning: Memory Efficient attention on Navi31 GPU is still experimental. Enable it with TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1. (Triggered internally at ../aten/src/ATen/native/transformers/hip/sdp_utils.cpp:269.)\n",
" attn_output = scaled_dot_product_attention(\n",
"/tmp/torchinductor_sipb/lc/clcqc3ufbzrethiy77dmsu54kurxdmh4eji2f3msm347rhmfpf4j.py:1078: UserWarning: Attempting to use hipBLASLt on an unsupported architecture! Overriding blas backend to hipblas (Triggered internally at ../aten/src/ATen/Context.cpp:296.)\n",
" extern_kernels.mm(reinterpret_tensor(buf1, (524288, 64), (64, 1), 0), reinterpret_tensor(primals_5, (64, 192), (1, 64), 0), out=buf2)\n",
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:41<00:00, 1.31s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 0/200 \t Train Err: 29.90892779827118 11.204990872880444 6.002899471088313 2.7772275000461377 119.98257398605347\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/200 \t Train Err: 24.833097636699677 7.996231320299557 10.17519548535347 4.934848785400391 95.85787630081177\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 2/200 \t Train Err: 20.868117928504944 0.06162079039495438 9.863971814513206 5.750443048775196 84.68168807029724\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 3/200 \t Train Err: 16.48520603775978 0.03265308297704905 2.906232228502631 4.825529254972935 70.63315153121948\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 4/200 \t Train Err: 12.373839050531387 0.012339260501903482 1.0458019012585282 5.470552921295166 52.21906542778015\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 5/200 \t Train Err: 9.265015065670013 0.020387541531817988 0.6235579419881105 4.304356303066015 38.14229780435562\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 6/200 \t Train Err: 6.847102478146553 0.00765054406656418 0.34211935847997665 3.4029701724648476 27.37058013677597\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 7/200 \t Train Err: 5.120877355337143 0.006255884032725589 0.24545069271698594 2.8054168857634068 19.56860715150833\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 8/200 \t Train Err: 3.8786706030368805 0.01005001129124139 0.19835278647951782 2.2635713517665863 14.35572400689125\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 9/200 \t Train Err: 3.386067658662796 0.06476508973355521 0.3309611896984279 2.269792005419731 11.835063099861145\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.07it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 10/200 \t Train Err: 2.6640610471367836 0.019311404510517605 0.15212045633234084 1.7280069142580032 9.439383015036583\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 11/200 \t Train Err: 2.271987594664097 0.004357099162007216 0.09561244037467986 1.4371714778244495 8.072030693292618\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 12/200 \t Train Err: 2.110176682472229 0.0037538947944995016 0.0762243423378095 1.3135331608355045 7.434565886855125\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 13/200 \t Train Err: 1.935215126723051 0.0025575611580279656 0.06788019218947738 1.1661983076483011 6.806286051869392\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 14/200 \t Train Err: 1.8060001619160175 0.0021859380358364433 0.05315158853773028 1.051108269020915 6.399133637547493\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.07it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 15/200 \t Train Err: 1.7425284087657928 0.003451302447501803 0.042916826030705124 0.9607762675732374 6.2206505835056305\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 16/200 \t Train Err: 1.649382572621107 0.0032472783022967633 0.039788190391846 0.9184560999274254 5.846587151288986\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 17/200 \t Train Err: 1.6013295575976372 0.0026137664608540945 0.03258192975772545 0.8397737592458725 5.709988132119179\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 18/200 \t Train Err: 1.5462302453815937 0.002207836727393442 0.028909130429383367 0.7771711964160204 5.481079399585724\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 19/200 \t Train Err: 1.4744272604584694 0.002453724335282459 0.027229167113546282 0.7396254185587168 5.192027851939201\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 20/200 \t Train Err: 1.405750896781683 0.0035180113754904596 0.025897870946209878 0.7007174119353294 4.946545287966728\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 21/200 \t Train Err: 1.37083425745368 0.005473145276482683 0.026675976172555238 0.6762280324473977 4.781045973300934\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 22/200 \t Train Err: 1.3181258291006088 0.003216923019863316 0.02211966845788993 0.6302088163793087 4.611788898706436\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 23/200 \t Train Err: 1.270566176623106 0.0022422261081374018 0.019996988266939297 0.5934071252122521 4.4385934472084045\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 24/200 \t Train Err: 1.1932538747787476 0.004239499055984197 0.020018045412143692 0.552213310264051 4.133698016405106\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 25/200 \t Train Err: 1.173534195870161 0.00575368078352767 0.02177350874990225 0.5586085859686136 4.002377942204475\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 26/200 \t Train Err: 1.0854019112884998 0.003320175252156332 0.01748313583084382 0.5035764751955867 3.7186833322048187\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 27/200 \t Train Err: 1.0489223580807447 0.002155393432985875 0.014516596915200353 0.47800380270928144 3.589349642395973\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 28/200 \t Train Err: 1.0285752080380917 0.003717334211614798 0.01597064675297588 0.4826665371656418 3.4730969667434692\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 29/200 \t Train Err: 0.9720142241567373 0.004084829584826366 0.014119503815891221 0.43038015346974134 3.3248252645134926\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 30/200 \t Train Err: 0.9608706310391426 0.002451939526508795 0.011319156386889517 0.4139528265222907 3.2747417390346527\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 31/200 \t Train Err: 0.9179007802158594 0.002311610933247721 0.01079355452384334 0.3930521896108985 3.1119269728660583\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 32/200 \t Train Err: 0.8977434728294611 0.0021589329044218175 0.00950733212812338 0.3691776511259377 3.040615402162075\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 33/200 \t Train Err: 0.881706677377224 0.0020159517880529165 0.009437998596695252 0.35962088825181127 2.982758790254593\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 34/200 \t Train Err: 0.8403967656195164 0.001898838694614824 0.00869621682795696 0.3381345858797431 2.8688452169299126\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 35/200 \t Train Err: 0.8310248833149672 0.0013434199390758295 0.007526626766775735 0.32297050580382347 2.818771593272686\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 36/200 \t Train Err: 0.8045722767710686 0.0018811499339790316 0.0069304521166486666 0.30397533625364304 2.722321219742298\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 37/200 \t Train Err: 0.807910643517971 0.0022051451851439197 0.007862750302592758 0.30017248587682843 2.739243097603321\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:29<00:00, 1.07it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 38/200 \t Train Err: 0.7853260803967714 0.005179399433473009 0.008613282887381501 0.2864332143217325 2.6513936147093773\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 39/200 \t Train Err: 0.7792632356286049 0.004665168027713662 0.009170589764835313 0.277913779951632 2.6232368499040604\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 40/200 \t Train Err: 0.7583489026874304 0.00292711379006505 0.007873743350501172 0.27461743634194136 2.522021509706974\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 41/200 \t Train Err: 0.7282119914889336 0.0017558942890900653 0.006133111986855511 0.23886349285021424 2.4373623058199883\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 42/200 \t Train Err: 0.7180026862770319 0.0023761796346661868 0.006810532162489835 0.23614320810884237 2.375364724546671\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 43/200 \t Train Err: 0.7019325699657202 0.005046901515015634 0.008944688888732344 0.22622147155925632 2.30900501832366\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.03it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 44/200 \t Train Err: 0.6817822623997927 0.0017093055594159523 0.005646904020977672 0.21380048524588346 2.223499771207571\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 45/200 \t Train Err: 0.6641208492219448 0.0038460963405668736 0.0067629652403411455 0.21014394168742 2.1612670943140984\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 46/200 \t Train Err: 0.6523595433682203 0.0018703954374359455 0.006019242704496719 0.20436032535508275 2.1252111680805683\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 47/200 \t Train Err: 0.617787566035986 0.0030503157668135827 0.0069770159825566225 0.1832384041044861 1.9817177206277847\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 48/200 \t Train Err: 0.600332060828805 0.002064528713162872 0.0051435344576020725 0.17475251341238618 1.9067389331758022\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 49/200 \t Train Err: 0.5904311630874872 0.004617106849764241 0.006938040380191524 0.16196146188303828 1.8893518187105656\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 50/200 \t Train Err: 0.5741921290755272 0.004996264638975845 0.007533758063800633 0.15988326235674322 1.8061449080705643\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 51/200 \t Train Err: 0.532125998288393 0.001918236821438768 0.0039053107029758394 0.1349696076940745 1.6755047999322414\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 52/200 \t Train Err: 0.5333235822618008 0.002287628563863109 0.005320303003827576 0.14349294803105295 1.6620671227574348\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 53/200 \t Train Err: 0.4952954547479749 0.0010008449244196527 0.003929206512111705 0.1226266548037529 1.5398627035319805\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 54/200 \t Train Err: 0.490776726976037 0.0021560709155892255 0.004821252721740166 0.12306429445743561 1.5102213434875011\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 55/200 \t Train Err: 0.4630659334361553 0.002020925041506416 0.0043996189124300145 0.11745399446226656 1.4124069288372993\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 56/200 \t Train Err: 0.4430495109409094 0.0022180716405273415 0.004020084164949367 0.10757899098098278 1.3317870814353228\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 57/200 \t Train Err: 0.45779580902308226 0.007255890723172342 0.010569222271442413 0.1332057132385671 1.3446197882294655\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.07it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 58/200 \t Train Err: 0.40347473975270987 0.0013051820133114234 0.0031506957930105273 0.09731322806328535 1.1896578464657068\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 59/200 \t Train Err: 0.3944752989336848 0.0025091177740250714 0.005466303970024455 0.10591710731387138 1.1414270270615816\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 60/200 \t Train Err: 0.3850894244387746 0.0022618337816311396 0.00499681286237319 0.10177210683468729 1.1139366328716278\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 61/200 \t Train Err: 0.3536613713949919 0.0016294859724439448 0.003189665607351344 0.09225898724980652 1.0001246724277735\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 62/200 \t Train Err: 0.3431710870936513 0.0014996515783423092 0.0034722756390692666 0.09043321071658283 0.9589487668126822\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 63/200 \t Train Err: 0.3311467822641134 0.001135409189373604 0.0031531365275441203 0.0849773638183251 0.9113363474607468\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 64/200 \t Train Err: 0.31347283348441124 0.0010190900329689612 0.003212062452803366 0.08056736667640507 0.8582371436059475\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 65/200 \t Train Err: 0.2970640519633889 0.0010584184110484784 0.002994029131514253 0.07881279999855906 0.8098555449396372\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 66/200 \t Train Err: 0.2887888355180621 0.0012073961215719464 0.0033224597755179275 0.0822362134931609 0.7632680460810661\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 67/200 \t Train Err: 0.27321118395775557 0.0009283916206186404 0.0024455750972265378 0.07351583207491785 0.7209800574928522\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 68/200 \t Train Err: 0.2642599456012249 0.0024096847391774645 0.004758599683555076 0.07438989775255322 0.6782895382493734\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 69/200 \t Train Err: 0.24411699920892715 0.0009143148763541831 0.002384097140748054 0.06588289514183998 0.637260627001524\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 70/200 \t Train Err: 0.2355448892340064 0.0011828851866084733 0.00317692070530029 0.07014255912508816 0.5985564198344946\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 71/200 \t Train Err: 0.22664254251867533 0.0011206458884771564 0.002485872115357779 0.06011384085286409 0.5786449136212468\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 72/200 \t Train Err: 0.21451926324516535 0.0008609092228653026 0.002164756482670782 0.0564098390750587 0.5476357256993651\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 73/200 \t Train Err: 0.2044255300424993 0.0010747715696197702 0.00229402982222382 0.05511317937634885 0.5015372652560472\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 74/200 \t Train Err: 0.200456322170794 0.001536047003355634 0.003252933354815468 0.05711311026243493 0.48181435000151396\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 75/200 \t Train Err: 0.19111737608909607 0.003518748955684714 0.004175829379164497 0.049318774370476604 0.45180629566311836\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 76/200 \t Train Err: 0.1808590106666088 0.0013624421417262056 0.002329483479115879 0.04611049557570368 0.4279420841485262\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 77/200 \t Train Err: 0.16973466146737337 0.0008994456393338623 0.00207517536728119 0.04326868336647749 0.3952533109113574\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 78/200 \t Train Err: 0.1702535841614008 0.0007078972075760248 0.0016872428823262453 0.04189401387702674 0.3984428942203522\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 79/200 \t Train Err: 0.16377683635801077 0.0013382542465478764 0.0027396336699894164 0.04209184244973585 0.3769973455928266\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 80/200 \t Train Err: 0.1497581924777478 0.0016949967903201468 0.0021530323319893796 0.03568895586067811 0.33177076652646065\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 81/200 \t Train Err: 0.14450395992025733 0.001401656336383894 0.002270640025017201 0.03478072857251391 0.317978051956743\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 82/200 \t Train Err: 0.1389398977626115 0.0033198261371580884 0.00435145793017 0.0375910610309802 0.28218549815937877\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 83/200 \t Train Err: 0.12944017979316413 0.0013174645964681986 0.0020839970657107187 0.033180530241224915 0.2718075602315366\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 84/200 \t Train Err: 0.1269651602488011 0.001952557386175613 0.002797932973408024 0.030586290056817234 0.2562156552448869\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 85/200 \t Train Err: 0.1262973020784557 0.0034579528983158525 0.004187718592220335 0.03295240050647408 0.26100850058719516\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 86/200 \t Train Err: 0.11676973546855152 0.002271431191729789 0.0028272587187530007 0.029616059619002044 0.22773186769336462\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 87/200 \t Train Err: 0.11645400826819241 0.003942164817090088 0.004389651330711786 0.02888663241174072 0.22617254313081503\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 88/200 \t Train Err: 0.1069438960403204 0.0007534859851148212 0.0015284864657587605 0.02535622369032353 0.20643022749572992\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 89/200 \t Train Err: 0.1019233949482441 0.0009516884665572434 0.001511421851319028 0.024724961316678673 0.18514555739238858\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 90/200 \t Train Err: 0.09508711867965758 0.0008840842388053716 0.0013085861846775515 0.022952270082896575 0.17402319004759192\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 91/200 \t Train Err: 0.09273395943455398 0.0008308457795465074 0.0014873276431899285 0.020763451553648338 0.1700441548600793\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 92/200 \t Train Err: 0.08730011875741184 0.000720000532510312 0.0011607171036303043 0.020305267593357712 0.15585350175388157\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 93/200 \t Train Err: 0.08319679484702647 0.0007787930949234578 0.0012370077938612667 0.018640907626831904 0.14242116385139525\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 94/200 \t Train Err: 0.08445112314075232 0.002024608746069134 0.0023303976749957656 0.0193185547250323 0.14395680534653366\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 95/200 \t Train Err: 0.0859984909184277 0.001967401332422014 0.002160638517125335 0.02076483884593472 0.14143188181333244\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 96/200 \t Train Err: 0.07500915951095521 0.0011493155893731455 0.0014125802363196271 0.019469743536319584 0.12187899858690798\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 97/200 \t Train Err: 0.07068800239358097 0.0006672579925179889 0.0009655766079958994 0.01619866766850464 0.11232927581295371\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 98/200 \t Train Err: 0.06899663107469678 0.0029092533500261197 0.002759141156275291 0.01706777891376987 0.10129301541019231\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 99/200 \t Train Err: 0.06587723165284842 0.0010087788145938248 0.0015239717367876437 0.015540250373305753 0.10049017099663615\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 100/200 \t Train Err: 0.06758000492118299 0.0019963337617809884 0.0021085088956169784 0.018880482559325173 0.10054084449075162\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 101/200 \t Train Err: 0.06307036883663386 0.0012753937157867767 0.0016400622589571867 0.015593403164530173 0.09352678328286856\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 102/200 \t Train Err: 0.060316542629152536 0.0006818027850385988 0.0010231798241875367 0.013433107393211685 0.09090642654336989\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 103/200 \t Train Err: 0.060421090107411146 0.0027040049144488876 0.0027294684268781566 0.01441186985175591 0.0847808476537466\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 104/200 \t Train Err: 0.05678413005080074 0.001134833364176302 0.001431436577149725 0.012649833428440616 0.0780830224393867\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 105/200 \t Train Err: 0.05805800168309361 0.003231210850572097 0.003441706239755149 0.015121193689992651 0.0752038118080236\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 106/200 \t Train Err: 0.0547659246949479 0.002454680496839501 0.002737534454809065 0.013384125923039392 0.07274198567029089\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 107/200 \t Train Err: 0.04927568801213056 0.0005825197017657047 0.0007837470261620183 0.010716092379880138 0.05965513514820486\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 108/200 \t Train Err: 0.05318018130492419 0.0013841798254361493 0.0015562751477773418 0.01211979822255671 0.07018060437985696\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 109/200 \t Train Err: 0.051697830320335925 0.0010280100987074547 0.001098815353543614 0.010801961965626106 0.06942529141088016\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 110/200 \t Train Err: 0.04692836094181985 0.0008446434776487877 0.0008702427021489711 0.01032250898424536 0.05933116714004427\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 111/200 \t Train Err: 0.044668186688795686 0.0011062668152135302 0.0010394338919468282 0.009862772989436053 0.054550442087929696\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 112/200 \t Train Err: 0.0447915755212307 0.0014217505979559064 0.0016150277879205532 0.010183335049077868 0.05510500964010134\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 113/200 \t Train Err: 0.043250435031950474 0.002363460382412086 0.002828258522640681 0.00971244159154594 0.047139356975094415\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 114/200 \t Train Err: 0.045086685102432966 0.0011699077874709474 0.0013979203313283506 0.010937912025838159 0.0543683817377314\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 115/200 \t Train Err: 0.0411334311356768 0.0013191173275117762 0.0011784266635004315 0.00858650918235071 0.04524634237168357\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 116/200 \t Train Err: 0.039555212075356394 0.0005507277148808498 0.0005802504801977193 0.007789377530571073 0.04690207863677642\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 117/200 \t Train Err: 0.03692283679265529 0.00043711723651540524 0.0005214224675000878 0.007687705321586691 0.03813074165373109\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 118/200 \t Train Err: 0.03628927277168259 0.00044126920215603604 0.0005619980265691993 0.007773650635499507 0.0384644401492551\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 119/200 \t Train Err: 0.03890394070185721 0.001729899499878229 0.001493205483257043 0.00798933092301013 0.041969388112192973\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 120/200 \t Train Err: 0.03712784848175943 0.0007071991701650404 0.0008030551111914974 0.007690385325986426 0.04134120314847678\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 121/200 \t Train Err: 0.03516055888030678 0.0004485433178160747 0.0006193339004312293 0.006722165890096221 0.03440287291596178\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 122/200 \t Train Err: 0.03431048977654427 0.0007996012898274785 0.000579838467274385 0.007459181011654437 0.03256209765095264\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 123/200 \t Train Err: 0.0351686873473227 0.0006591397341253469 0.0006555682361977233 0.006613661207666155 0.037333723666961305\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 124/200 \t Train Err: 0.03355215600458905 0.0002945618743979139 0.0004387611575111805 0.006839323941676412 0.034134260716200515\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 125/200 \t Train Err: 0.029283913841936737 0.00046266792719507066 0.00058449966218177 0.0056224113504868 0.024552044065785594\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 126/200 \t Train Err: 0.03119118546601385 0.0005014674925405416 0.0007099974022821698 0.0060376596375135705 0.02815229452244239\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 127/200 \t Train Err: 0.031841877149417996 0.00027776491560871364 0.00046666834350617137 0.005703783383069094 0.03038091241910479\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 128/200 \t Train Err: 0.030603406310547143 0.0006404905841463915 0.0006846741659956024 0.006221181378350593 0.025205713599461887\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 129/200 \t Train Err: 0.029333731392398477 0.0005602014119858723 0.000642365913336107 0.006284213814069517 0.02611703903221496\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 130/200 \t Train Err: 0.028047623636666685 0.0008307177447477443 0.0007543345300291548 0.006256156790186651 0.02223676520952722\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.07it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 131/200 \t Train Err: 0.02852347370935604 0.0005703339811589103 0.0009201887021390576 0.005433428774267668 0.025521833274979144\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 132/200 \t Train Err: 0.028580970887560397 0.0005810092270621681 0.0005398729952048598 0.005319414980476722 0.027794180728960782\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 133/200 \t Train Err: 0.02704069105675444 0.0003059067348658573 0.0003909187862518593 0.0050654686710913666 0.023506886311224662\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 134/200 \t Train Err: 0.024850417801644653 0.00024160909720194468 0.0003672063955946214 0.004596906874212436 0.01910146742920915\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 135/200 \t Train Err: 0.024681290611624718 0.00037400397729925317 0.000489667942019878 0.004580263695970643 0.019593202690884937\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 136/200 \t Train Err: 0.027638425526674837 0.0004977623525519448 0.0005427452181265835 0.005582943878835067 0.02646890448522754\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 137/200 \t Train Err: 0.024757418257649988 0.0003685475935526483 0.0003517182428822707 0.004618304148607422 0.018053345412681665\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 138/200 \t Train Err: 0.02439499576576054 0.00027227840394061786 0.00036000374461764295 0.004171678388956934 0.020061984119138287\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 139/200 \t Train Err: 0.0229199705645442 0.00046586399253101263 0.0005068485352239804 0.004258882479916792 0.01709363247573492\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 140/200 \t Train Err: 0.024649846891406924 0.0006087151427891513 0.0007250320297771395 0.004237969173118472 0.022251372053233354\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 141/200 \t Train Err: 0.023699990182649344 0.0006855616327356984 0.0008273822963928978 0.004291944787837565 0.01694076002422662\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 142/200 \t Train Err: 0.022072256018873304 0.00023243963084951247 0.0003913031405318179 0.0035956969295511954 0.019112591930934286\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 143/200 \t Train Err: 0.023525280528701842 0.00040764258983472246 0.0003686606121391378 0.00405594674157328 0.02093119484015915\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 144/200 \t Train Err: 0.02343721961369738 0.00033207295859938313 0.0005353521628421731 0.004094722855370492 0.020869585259788437\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 145/200 \t Train Err: 0.02064004127169028 0.00022399188014787796 0.0003062049111122178 0.004059467602928635 0.017480447175330482\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 146/200 \t Train Err: 0.020763279171660542 0.0004162326339383071 0.0003410943327253335 0.0032998187525663525 0.01631780587376852\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 147/200 \t Train Err: 0.020571442728396505 0.00044352215627441183 0.0005010924719499599 0.003667172095447313 0.014751498597888713\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 148/200 \t Train Err: 0.01997521542944014 0.00021835572067629982 0.000277048953648773 0.0034534092810645234 0.015434162895644477\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 149/200 \t Train Err: 0.021312509546987712 0.00030864444181588624 0.0005689966556019499 0.004085102085809922 0.01556764474753436\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 150/200 \t Train Err: 0.019479235576000065 0.0003387887146573121 0.000369657065903084 0.003481321306026075 0.01391503391016613\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 151/200 \t Train Err: 0.023493657063227147 0.0003406951947226844 0.0004765782725826284 0.003387280346942134 0.024297427552482986\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 152/200 \t Train Err: 0.020062169001903385 0.0001796720187030587 0.0002183982696806197 0.003409319913771469 0.013818501599416777\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 153/200 \t Train Err: 0.019131189765175804 0.00029574484346994723 0.0002947069822312187 0.002951359812868759 0.01664116706706409\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 154/200 \t Train Err: 0.017693023837637156 0.00024806520877973526 0.0002983832400786923 0.00312236421086709 0.010928787386546901\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.07it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 155/200 \t Train Err: 0.017173090571304783 0.00020240362800905132 0.0002837313263626129 0.0024838966492097825 0.01155280199873232\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 156/200 \t Train Err: 0.018064823234453797 0.00025287491257586225 0.00042023322453133005 0.0031510025983152445 0.013277582744422034\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 157/200 \t Train Err: 0.01679313532076776 0.00016895983264930692 0.00023369373479908973 0.0025660492974566296 0.013730080009736412\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 158/200 \t Train Err: 0.018779858626658097 0.0006825042137279524 0.00039098577053664485 0.0030517936720571015 0.014663536599073268\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 159/200 \t Train Err: 0.020110780431423336 0.000910040460212258 0.000834133242506141 0.004305297403334407 0.013905958928830842\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 160/200 \t Train Err: 0.019773374748183414 0.0009348806023581346 0.0008922487559175352 0.003975474533945089 0.01617197653695257\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 161/200 \t Train Err: 0.017475509172072634 0.00046213520988658274 0.0005404102516877174 0.003040906784008257 0.014273262689584953\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 162/200 \t Train Err: 0.015029630245408043 0.0001904235211895866 0.00021963075801068044 0.002168249424357782 0.010509091553103644\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 163/200 \t Train Err: 0.018164523935411125 0.0005775698982688482 0.0006741533361491747 0.0036203847994329408 0.011193782368536631\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 164/200 \t Train Err: 0.01632957032416016 0.0003306799113715897 0.0003712935063049372 0.0029763625025225338 0.009990961348194105\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 165/200 \t Train Err: 0.0153682763047982 0.0002632132137705412 0.0003610171986565547 0.0023970418515091296 0.012086256845577736\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 166/200 \t Train Err: 0.013866374094504863 0.00012185312010615235 0.00018107489950125455 0.0018877797901950544 0.008829483279441774\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 167/200 \t Train Err: 0.015403825411340222 0.00034605842233759176 0.00046738405558244267 0.002471095247528865 0.009661761823792858\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 168/200 \t Train Err: 0.015333578106947243 0.0007963078196553397 0.0006389631322463174 0.0029809060470142867 0.009118859635066201\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 169/200 \t Train Err: 0.01377101321122609 0.00028809423406528367 0.0002655940699014536 0.0022669341324217385 0.0077932964362616985\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 170/200 \t Train Err: 0.014377146551851183 0.0006095316629171066 0.000566291571203692 0.002504439868062036 0.007364666845887768\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 171/200 \t Train Err: 0.01476844641729258 0.0002849637266422178 0.00032093194135995873 0.002440014208332286 0.00954770603743782\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 172/200 \t Train Err: 0.014352218277053908 0.0001346213794590767 0.0002298443192785271 0.0027853190676978556 0.011637392487727993\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 173/200 \t Train Err: 0.013293113705003634 0.0002518077910735883 0.00021664196594883833 0.0016753806212363997 0.008185207087933577\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 174/200 \t Train Err: 0.01469786892994307 0.0005061904257672722 0.0006176612511126223 0.0025409646332263947 0.009795411139066346\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 175/200 \t Train Err: 0.01577709667617455 0.0002547664359440205 0.0003405914605991711 0.0020204293869028334 0.013386641423039691\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 176/200 \t Train Err: 0.014100697473622859 0.00036510653808363713 0.0004396585003405562 0.0022091059381637024 0.00978638644005514\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 177/200 \t Train Err: 0.014368639851454645 0.00044816699323746434 0.00045128344186196045 0.002814159254739934 0.008726180123630911\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 178/200 \t Train Err: 0.014014390297234058 0.0006206710049809772 0.00046763980253672344 0.002513490486308001 0.008434324339646082\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 179/200 \t Train Err: 0.011972312582656741 0.00018721630084428398 0.00029149899171443394 0.0016975146063487045 0.007282969920481719\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 180/200 \t Train Err: 0.01289494353113696 0.00020095304734013553 0.000251299350793488 0.0017014556851790985 0.010998782015121833\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 181/200 \t Train Err: 0.013175164320273325 0.000340911025944024 0.00035113496642225073 0.002221787386588403 0.008535892283987323\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 182/200 \t Train Err: 0.012816024391213432 0.0003103266114408143 0.00028728846336889546 0.0020579011925292434 0.00718217800522325\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 183/200 \t Train Err: 0.01449834939558059 0.0005017787769361348 0.0005829150882163958 0.002624640494104824 0.012894641169850729\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 184/200 \t Train Err: 0.01308623020304367 0.0003065749452275668 0.0002674301056231343 0.0018643831190274796 0.009087016163903172\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 185/200 \t Train Err: 0.011409497121348977 0.00029326116043648653 0.0003596148741280558 0.001658103732552263 0.007742758548488382\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 186/200 \t Train Err: 0.010975291283102706 0.00022339119993830536 0.00027696753636519134 0.0014451522856688825 0.0054481543454585335\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 187/200 \t Train Err: 0.010257220594212413 0.00023113110682970728 0.0002813607433154175 0.001320708272032789 0.005819132793249082\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.06it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 188/200 \t Train Err: 0.012054045568220317 0.000388129293298789 0.0004733345151635149 0.001878096192740486 0.00747043985700202\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 189/200 \t Train Err: 0.012783893820596859 0.00031030693571665324 0.00032841233428371197 0.0017014134382407065 0.006328187721919676\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.05it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 190/200 \t Train Err: 0.01047908267355524 0.000252351564199671 0.0003104653961827353 0.0015047969627630664 0.00647446524692441\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 191/200 \t Train Err: 0.01059192547108978 0.00032810493928536744 0.00036611615337278636 0.0015751951596030267 0.005902428454646724\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"00%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 32/32 [00:30<00:00, 1.04it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 192/200 \t Train Err: 0.011238765117013827 0.0005425223790780365 0.0005242744022098123 0.0020095554464205634 0.006199448111232186\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" 75%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎ | 24/32 [00:22<00:07, 1.03it/s]"
]
}
],
"source": [
"while epoch < NEPOCHS:\n",
" model.train()\n",
" with open(f\"data-new/{epoch}.pickle\", \"rb\") as f:\n",
" pickled_stuff = pickle.load(f)\n",
" data = pickled_stuff[\"data\"].to(device)\n",
" label = pickled_stuff[\"labels\"].to(device).to(torch.float32)\n",
" padding = pickled_stuff[\"padding\"].to(device)\n",
" dataset = TensorDataset(data, label, padding)\n",
" loader = DataLoader(dataset, batch_size=BSZ)\n",
" for batch_src, batch_labels, batch_padding_mask in tqdm(loader):\n",
" optimizer.zero_grad()\n",
" output = model(batch_src, batch_padding_mask)\n",
" loss = criterion(output.squeeze(1), batch_labels)\n",
" loss.backward()\n",
" optimizer.step()\n",
" \n",
" train_err.append(loss.item())\n",
" len1.append(criterion(output[batch_labels == 1].squeeze(1), batch_labels[batch_labels == 1]).item())\n",
" len2.append(criterion(output[batch_labels == 2].squeeze(1), batch_labels[batch_labels == 2]).item())\n",
" len3.append(criterion(output[batch_labels == 3].squeeze(1), batch_labels[batch_labels == 3]).item())\n",
" leninf.append(criterion(output[batch_labels == MAX_VTXS].squeeze(1), batch_labels[batch_labels == MAX_VTXS]).item())\n",
" \n",
" with open('loss', 'a') as f:\n",
" f.write(f\"{train_err[-1]} {len1[-1]} {len2[-1]} {len3[-1]} {leninf[-1]}\\n\")\n",
" epoch_err = lambda l: sum(l[-EPOCH_SIZE // BSZ:]) / EPOCH_SIZE * BSZ\n",
" print(f\"Epoch {epoch}/{NEPOCHS} \\t Train Err: {epoch_err(train_err)} {epoch_err(len1)} {epoch_err(len2)} {epoch_err(len3)} {epoch_err(leninf)}\")\n",
"\n",
" epoch += 1\n",
" if epoch % 10 == 0:\n",
" torch.save(model.state_dict(), f\"checkpoints/model_weights_{epoch}.pth\")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"execution_state": "idle",
"metadata": {},
"outputs": [],
"source": [
"def evaluate(data):\n",
" model.eval()\n",
" test_loss = 0\n",
" with torch.no_grad():\n",
" batch_src, batch_labels, batch_padding_mask = map(lambda x: x.to(device), data)\n",
" output = model(batch_src, batch_padding_mask)\n",
" loss = criterion(output.squeeze(1), batch_labels)\n",
" return output.detach(), batch_labels.detach().to(torch.uint8), loss.item()\n",
"\n",
"def mkhist(data):\n",
" y, x, loss = evaluate(data)\n",
" print(loss)\n",
" cnts = torch.bincount(x)\n",
" weights = [1/cnts[i.item()].item() for i in x] # normalize by label count\n",
" fig, ax = plt.subplots()\n",
" h = ax.hist2d(x.cpu().numpy().flatten(), y.cpu().numpy().flatten(), weights=weights, bins=[15,50], norm=mpl.colors.LogNorm())\n",
" ax.set_xlabel(\"Label\")\n",
" ax.set_ylabel(\"Model Output\")\n",
" fig.colorbar(h[3], ax=ax)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/sipb/.venv/lib64/python3.12/site-packages/torch/nn/modules/transformer.py:871: UserWarning: Memory Efficient attention on Navi31 GPU is still experimental. Enable it with TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1. (Triggered internally at ../aten/src/ATen/native/transformers/hip/sdp_utils.cpp:269.)\n",
" return torch._transformer_encoder_layer_fwd(\n",
"/home/sipb/.venv/lib64/python3.12/site-packages/torch/nn/modules/transformer.py:871: UserWarning: Attempting to use hipBLASLt on an unsupported architecture! Overriding blas backend to hipblas (Triggered internally at ../aten/src/ATen/Context.cpp:296.)\n",
" return torch._transformer_encoder_layer_fwd(\n"
]
},
{
"data": {
"text/plain": [
"0.031184175983071327"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"evaluate(mkbatch(BSZ))[2]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"with open('loss') as f:\n",
" losses = torch.tensor([list(map(float, l.split())) for l in f.readlines()])\n",
"plt.plot(torch.log(losses[:, 0]), label='Train', color='blue')\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Log MSE')\n",
"with open(\"plots/train-loss.html\", \"w\") as f:\n",
" mpld3.save_html(plt.gcf(), f)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"id": "LoGEmM5lH7_A"
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mkhist(mkbatch(BSZ))\n",
"plt.show()\n",
"with open(\"plots/train-hist.html\", \"w\") as f:\n",
" mpld3.save_html(plt.gcf(), f)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.suptitle('Log MSE vs Epochs')\n",
"plt.plot(torch.log(torch.tensor(losses[:, 0])), label='Train', color='blue')\n",
"plt.plot(torch.log(torch.tensor(losses[:, 1])), label='Len 1', color='red')\n",
"plt.plot(torch.log(torch.tensor(losses[:, 2])), label='Len 2', color='green')\n",
"plt.plot(torch.log(torch.tensor(losses[:, 3])), label='Len 3', color='yellow')\n",
"plt.plot(torch.log(torch.tensor(losses[:, 4])), label='Len 15', color='magenta')\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Log MSE')\n",
"plt.legend()\n",
"with open(\"plots/train-lens.html\", \"w\") as f:\n",
" mpld3.save_html(plt.gcf(), f)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "LC6Xv3YfC0Rm"
},
"source": [
"# Step 5: Fine Tune"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"N_TUNE_EPOCHS = 100\n",
"TUNE_LR = 1e-5\n",
"\n",
"tune_criterion = nn.MSELoss()\n",
"tune_optimizer = torch.optim.Adam(model.parameters(), lr=TUNE_LR)\n",
"\n",
"tune_train_err = []\n",
"\n",
"# clear loss file\n",
"open('tune_loss', 'w').close()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 0/100 \t Train Err: 0.4553\n",
"Epoch 1/100 \t Train Err: 0.2545\n",
"Epoch 2/100 \t Train Err: 0.2368\n",
"Epoch 3/100 \t Train Err: 0.2138\n",
"Epoch 4/100 \t Train Err: 0.1898\n",
"Epoch 5/100 \t Train Err: 0.1931\n",
"Epoch 6/100 \t Train Err: 0.1948\n",
"Epoch 7/100 \t Train Err: 0.1847\n",
"Epoch 8/100 \t Train Err: 0.1638\n",
"Epoch 9/100 \t Train Err: 0.1490\n",
"Epoch 10/100 \t Train Err: 0.1457\n",
"Epoch 11/100 \t Train Err: 0.1509\n",
"Epoch 12/100 \t Train Err: 0.1537\n",
"Epoch 13/100 \t Train Err: 0.1472\n",
"Epoch 14/100 \t Train Err: 0.1369\n",
"Epoch 15/100 \t Train Err: 0.1304\n",
"Epoch 16/100 \t Train Err: 0.1257\n",
"Epoch 17/100 \t Train Err: 0.1201\n",
"Epoch 18/100 \t Train Err: 0.1160\n",
"Epoch 19/100 \t Train Err: 0.1064\n",
"Epoch 20/100 \t Train Err: 0.1026\n",
"Epoch 21/100 \t Train Err: 0.0964\n",
"Epoch 22/100 \t Train Err: 0.1165\n",
"Epoch 23/100 \t Train Err: 0.0990\n",
"Epoch 24/100 \t Train Err: 0.0691\n",
"Epoch 25/100 \t Train Err: 0.0633\n",
"Epoch 26/100 \t Train Err: 0.0552\n",
"Epoch 27/100 \t Train Err: 0.0505\n",
"Epoch 28/100 \t Train Err: 0.0429\n",
"Epoch 29/100 \t Train Err: 0.0376\n",
"Epoch 30/100 \t Train Err: 0.0309\n",
"Epoch 31/100 \t Train Err: 0.0252\n",
"Epoch 32/100 \t Train Err: 0.0233\n",
"Epoch 33/100 \t Train Err: 0.0219\n",
"Epoch 34/100 \t Train Err: 0.0196\n",
"Epoch 35/100 \t Train Err: 0.0186\n",
"Epoch 36/100 \t Train Err: 0.0181\n",
"Epoch 37/100 \t Train Err: 0.0189\n",
"Epoch 38/100 \t Train Err: 0.0174\n",
"Epoch 39/100 \t Train Err: 0.0141\n",
"Epoch 40/100 \t Train Err: 0.0138\n",
"Epoch 41/100 \t Train Err: 0.0136\n",
"Epoch 42/100 \t Train Err: 0.0124\n",
"Epoch 43/100 \t Train Err: 0.0121\n",
"Epoch 44/100 \t Train Err: 0.0109\n",
"Epoch 45/100 \t Train Err: 0.0107\n",
"Epoch 46/100 \t Train Err: 0.0105\n",
"Epoch 47/100 \t Train Err: 0.0103\n",
"Epoch 48/100 \t Train Err: 0.0088\n",
"Epoch 49/100 \t Train Err: 0.0089\n",
"Epoch 50/100 \t Train Err: 0.0092\n",
"Epoch 51/100 \t Train Err: 0.0078\n",
"Epoch 52/100 \t Train Err: 0.0075\n",
"Epoch 53/100 \t Train Err: 0.0068\n",
"Epoch 54/100 \t Train Err: 0.0066\n",
"Epoch 55/100 \t Train Err: 0.0065\n",
"Epoch 56/100 \t Train Err: 0.0055\n",
"Epoch 57/100 \t Train Err: 0.0056\n",
"Epoch 58/100 \t Train Err: 0.0052\n",
"Epoch 59/100 \t Train Err: 0.0055\n",
"Epoch 60/100 \t Train Err: 0.0048\n",
"Epoch 61/100 \t Train Err: 0.0050\n",
"Epoch 62/100 \t Train Err: 0.0049\n",
"Epoch 63/100 \t Train Err: 0.0051\n",
"Epoch 64/100 \t Train Err: 0.0047\n",
"Epoch 65/100 \t Train Err: 0.0045\n",
"Epoch 66/100 \t Train Err: 0.0041\n",
"Epoch 67/100 \t Train Err: 0.0038\n",
"Epoch 68/100 \t Train Err: 0.0036\n",
"Epoch 69/100 \t Train Err: 0.0035\n",
"Epoch 70/100 \t Train Err: 0.0035\n",
"Epoch 71/100 \t Train Err: 0.0032\n",
"Epoch 72/100 \t Train Err: 0.0032\n",
"Epoch 73/100 \t Train Err: 0.0030\n",
"Epoch 74/100 \t Train Err: 0.0031\n",
"Epoch 75/100 \t Train Err: 0.0026\n",
"Epoch 76/100 \t Train Err: 0.0030\n",
"Epoch 77/100 \t Train Err: 0.0024\n",
"Epoch 78/100 \t Train Err: 0.0026\n",
"Epoch 79/100 \t Train Err: 0.0028\n",
"Epoch 80/100 \t Train Err: 0.0026\n",
"Epoch 81/100 \t Train Err: 0.0023\n",
"Epoch 82/100 \t Train Err: 0.0022\n",
"Epoch 83/100 \t Train Err: 0.0022\n",
"Epoch 84/100 \t Train Err: 0.0021\n",
"Epoch 85/100 \t Train Err: 0.0023\n",
"Epoch 86/100 \t Train Err: 0.0023\n",
"Epoch 87/100 \t Train Err: 0.0020\n",
"Epoch 88/100 \t Train Err: 0.0020\n",
"Epoch 89/100 \t Train Err: 0.0021\n",
"Epoch 90/100 \t Train Err: 0.0020\n",
"Epoch 91/100 \t Train Err: 0.0019\n",
"Epoch 92/100 \t Train Err: 0.0017\n",
"Epoch 93/100 \t Train Err: 0.0019\n",
"Epoch 94/100 \t Train Err: 0.0019\n",
"Epoch 95/100 \t Train Err: 0.0015\n",
"Epoch 96/100 \t Train Err: 0.0016\n",
"Epoch 97/100 \t Train Err: 0.0017\n",
"Epoch 98/100 \t Train Err: 0.0015\n",
"Epoch 99/100 \t Train Err: 0.0015\n"
]
}
],
"source": [
"for epoch in range(N_TUNE_EPOCHS):\n",
" model.train()\n",
" train_loss = 0\n",
" batch_src, batch_labels, batch_padding_mask = map(lambda x: x.to(device), mkbatch(BSZ, large=False, target=\"onpath\"))\n",
" optimizer.zero_grad()\n",
" output = model(batch_src, batch_padding_mask)\n",
" loss = criterion(output.squeeze(1), batch_labels)\n",
" train_loss = loss.item()\n",
" loss.backward()\n",
" optimizer.step()\n",
" \n",
" tune_train_err.append(train_loss)\n",
" with open('tune_loss', 'a') as f:\n",
" f.write(f\"{train_loss}\\n\")\n",
" print(f\"Epoch {epoch}/{N_TUNE_EPOCHS} \\t Train Err: {train_loss:.4f}\")\n",
"\n",
" if epoch % 10 == 9:\n",
" torch.save(model.state_dict(), f\"checkpoints/tune_model_weights_{epoch + 1}.pth\")"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.001733972690999508"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"evaluate(mkbatch(BSZ, large=False, target=\"onpath\"))[2]"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHgCAYAAABZ+0ykAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCC0lEQVR4nO3deXRU9f3/8dckYZJAFpaQQCCsoih7g0BABTTIJlaLgpRKxBVQxPLTKlpB7ZeCuBQFBaXiziJWqVLBYsQFyhoMoCKuLIoJIJCELYHM5/fHZSaMAUxgZm5y83ycc8/M3Ll35j23al79bNdljDECAABwiDC7CwAAAAgkwg0AAHAUwg0AAHAUwg0AAHAUwg0AAHAUwg0AAHAUwg0AAHAUwg0AAHAUwg0AAHAUwg0ABJHL5dIdd9xhdxlAlUK4ASqxl156SS6XSy6XS8uXLy/1vjFGKSkpcrlcuuKKK/zeO3DggCZMmKDWrVurRo0aqlOnjtq3b68xY8Zo586dvuMeeugh33ecbMvJyQnJbz2V09U2YsQIW2sDYI8IuwsAcPaioqI0Z84cXXTRRX77P/74Y/3444+KjIz023/06FFdcskl+uqrr5SRkaHRo0frwIED+uKLLzRnzhxdffXVSk5O9jtnxowZiomJKfXdNWvWDNKvKrtevXpp2LBhpfafe+65ttQDwF6EG8AB+vXrpwULFujpp59WRETJv9Zz5sxRamqq9uzZ43f8woUL9dlnn+n111/XH//4R7/3jhw5oqKiolLfcc011yghISGIv+LMnXvuufrTn/5kdxkAKgi6pQAHGDJkiH755RctXbrUt6+oqEhvvvlmqfAiSd99950kqVu3bqXei4qKUlxcXEDqat26tXr27Flqv8fjUYMGDXTNNdf49s2bN0+pqamKjY1VXFyc2rRpo6eeeiogdUhSjx491Lp1a2VlZalr166Kjo5W06ZNNXPmzFLH7tq1SzfddJOSkpIUFRWldu3a6eWXXz7p73jqqafUpk0bRUVFqW7duurTp4/WrVtX6tiFCxeqdevWioyMVKtWrbRkyRK/9wsKCnTXXXepSZMmioyMVGJionr16qX169cH7BoAVQXhBnCAJk2aKC0tTXPnzvXtW7x4sfLy8nTdddeVOr5x48aSpFdeeUXGmDJ9x969e7Vnzx6/bf/+/ac9Z/Dgwfrkk09KjctZvny5du7c6att6dKlGjJkiGrVqqVHH31UkydPVo8ePbRixYoy1XbkyJFSte3Zs6dUC9S+ffvUr18/paamasqUKWrYsKFGjhyp2bNn+445fPiwevTooVdffVVDhw7VY489pvj4eN1www2lwtZNN92ku+66SykpKXr00Ud13333KSoqSqtWrSr1e0eNGqXrrrtOU6ZM0ZEjRzRw4ED98ssvvmNGjBihGTNmaODAgXr22Wd19913Kzo6Wps3by7TNQBwAgOg0nrxxReNJLN27Vozffp0Exsbaw4dOmSMMebaa681PXv2NMYY07hxY9O/f3/feYcOHTLnnXeekWQaN25sbrjhBvPCCy+Y3NzcUt8xYcIEI+mk23nnnXfa+rZs2WIkmWnTpvntHzVqlImJifHVOmbMGBMXF2eOHTtW7mtwqtokmblz5/qO6969u5FknnjiCd++wsJC0759e5OYmGiKioqMMcZMnTrVSDKvvfaa77iioiKTlpZmYmJiTH5+vjHGmA8//NBIMnfeeWepmjwej199brfbfPvtt759GzZsKHVd4uPjze23317u3w+gNFpuAIcYNGiQDh8+rEWLFqmgoECLFi06aZeUJEVHR2v16tW65557pOOzrm666SbVr19fo0ePVmFhYalz/vWvf2np0qV+24svvnjams4991y1b99e8+fP9+0rLi7Wm2++qQEDBig6Olo6Pij54MGDft1q5fH73/++VG1Lly4t1SUWERGh2267zffa7Xbrtttu065du5SVlSVJeu+991SvXj0NGTLEd1y1atV055136sCBA/r4449918PlcmnChAml6nG5XH6v09PT1bx5c9/rtm3bKi4uTt9//71vX82aNbV69Wq/mWoAzgwDigGHqFu3rtLT0zVnzhwdOnRIxcXFfmNafi0+Pl5TpkzRlClTtG3bNmVmZurxxx/X9OnTFR8fr//7v//zO/6SSy45owHFgwcP1v3336+ffvpJDRo00EcffaRdu3Zp8ODBvmNGjRqlN954Q3379lWDBg10+eWXa9CgQerTp0+ZvqNhw4ZKT0//zeOSk5NVo0YNv33eGVVbt25Vly5dtG3bNrVo0UJhYf7/3+/888+XJG3btk06Pm4pOTlZtWvX/s3vbdSoUal9tWrV0r59+3yvp0yZooyMDKWkpCg1NVX9+vXTsGHD1KxZs9/8fAD+aLkBHOSPf/yjFi9erJkzZ6pv375lnqbduHFj3XjjjVqxYoVq1qyp119/PWA1DR48WMYYLViwQJL0xhtvKD4+3i+4JCYmKjs7W++8846uvPJKLVu2TH379lVGRkbA6rBTeHj4SfefON5p0KBB+v777zVt2jQlJyfrscceU6tWrbR48eIQVgo4A+EGcJCrr75aYWFhWrVq1Sm7pE6nVq1aat68uX7++eeA1dS0aVN16tRJ8+fP17Fjx/TWW2/pqquuKrX2jtvt1oABA/Tss8/qu+++02233aZXXnlF3377bcBq2blzpw4ePOi37+uvv5aOD8rW8aD3zTffyOPx+B331Vdf+d6XpObNm2vnzp3au3dvwOqrX7++Ro0apYULF+qHH35QnTp1NHHixIB9PlBVEG4AB4mJidGMGTP00EMPacCAAac8bsOGDaXWvtHxLpcvv/xS5513XkDrGjx4sFatWqXZs2drz549fl1SkvxmDUlSWFiY2rZtK0knHf9zpo4dO6bnnnvO97qoqEjPPfec6tatq9TUVOn4mkE5OTl+44SOHTumadOmKSYmRt27d5ckDRw4UMYYPfzww6W+p6wz0LyKi4uVl5fnty8xMVHJyckB/f1AVcGYG8BhytKVs3TpUk2YMEFXXnmlunTpopiYGH3//feaPXu2CgsL9dBDD5U658033zzpCsW9evVSUlLSab9v0KBBuvvuu3X33Xerdu3apcbH3Hzzzdq7d68uvfRSNWzYUNu2bdO0adPUvn1731iX0/n666/12muvldqflJSkXr16+V4nJyfr0Ucf1datW3Xuuedq/vz5ys7O1vPPP69q1apJkm699VY999xzuuGGG5SVlaUmTZrozTff1IoVKzR16lTFxsZKknr27Knrr79eTz/9tL755hv16dNHHo9Hn376qXr27Fmu+0kVFBSoYcOGuuaaa9SuXTvFxMTogw8+0Nq1a/XEE0+U+XMAHGf3dC0AZ+7EqeCn8+up4N9//70ZP3686dKli0lMTDQRERGmbt26pn///ubDDz/0O/d0U8ElmWXLlpWp1m7duhlJ5uabby713ptvvmkuv/xyk5iYaNxut2nUqJG57bbbzM8///ybn3u62rp37+47rnv37qZVq1Zm3bp1Ji0tzURFRZnGjRub6dOnl/rM3NxcM3z4cJOQkGDcbrdp06aNefHFF0sdd+zYMfPYY4+Zli1bGrfbberWrWv69u1rsrKy/Oo72RTvxo0bm4yMDGOOT0m/5557TLt27UxsbKypUaOGadeunXn22Wd/8/cDKM1lytt+CgCVUI8ePbRnzx59/vnndpcCIMgYcwMAAByFcAMAAByFcAMAAByFMTcAAMBRaLkBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOQrgBAACOEmF3AaHm8Xi0c+dOxcbGyuVy2V0OAAAoA2OMCgoKlJycrLCw07fNVLlws3PnTqWkpNhdBgAAOAM7duxQw4YNT3tMlQs3sbGx0vGLExcXZ3c5AACgDPLz85WSkuL7O346VS7ceLui4uLiCDcAAFQyZRlSwoBiAADgKIQbAADgKIQbAADgKIQbAADgKIQbAADgKIQbAADgKIQbAADgKIQbAADgKIQbAADgKIQbAADgKIQbAADgKIQbAADgKFXuxpnBUlQk5eZKHo/UuLHd1QAAUHXRchMga9ZIjRpJvXrZXQkAAFUb4SZAoqKsxyNH7K4EAICqjXATIN5wU1hodyUAAFRthJsAoeUGAICKgXATIJGR1iPhBgAAexFuAsTbclNUZM2YAgAA9iDcBIg33IhxNwAA2IpwEyAnhhu6pgAAsA/hJkAiIqSw41eTlhsAAOxDuAkQl4sZUwAAVASEmwBixhQAAPYj3AQQLTcAANiPcBNAhBsAAOxHuAkgwg0AAPYj3AQQ95cCAMB+hJsAouUGAAD7EW4CiNlSAADYj3ATQLTcAABgP8JNABFuAACwH+EmgAg3AADYj3ATQIQbAADsR7gJIKaCAwBgP8JNANFyAwCA/Qg3AcRUcAAA7Ee4CSBabgAAsB/hJoAINwAA2I9wE0CEGwAA7Ee4CSBmSwEAYD/CTQDRcgMAgP0INwHEbCkAAOxHuAkgWm4AALAf4SaACDcAANiPcBNAhBsAAOxHuAkgZksBAGA/wk0A0XIDAID9CDcBxGwpAADsR7gJIFpuAACwH+EmgAg3AADYr0KEm2eeeUZNmjRRVFSUOnfurDVr1pTpvHnz5snlcumqq64Keo1l4Q03xcXSsWN2VwMAQNVke7iZP3++xo4dqwkTJmj9+vVq166devfurV27dp32vK1bt+ruu+/WxRdfHLJaf4s33IjWGwAAbGN7uHnyySd1yy23aPjw4brgggs0c+ZMVa9eXbNnzz7lOcXFxRo6dKgefvhhNWvWLKT1no53QLGYDg4AgG1sDTdFRUXKyspSenp6SUFhYUpPT9fKlStPed4jjzyixMRE3XTTTb/5HYWFhcrPz/fbgiU8XIqIsJ7TcgMAgD1sDTd79uxRcXGxkpKS/PYnJSUpJyfnpOcsX75cL7zwgmbNmlWm75g0aZLi4+N9W0pKSkBqPxUGFQMAYC/bu6XKo6CgQNdff71mzZqlhISEMp0zbtw45eXl+bYdO3YEtUbCDQAA9oqw88sTEhIUHh6u3Nxcv/25ubmqV69eqeO/++47bd26VQMGDPDt83g8kqSIiAht2bJFzZs39zsnMjJSkScOhgkywg0AAPayteXG7XYrNTVVmZmZvn0ej0eZmZlKS0srdXzLli21adMmZWdn+7Yrr7xSPXv2VHZ2dtC7nMqCcAMAgL1sbbmRpLFjxyojI0MdO3ZUp06dNHXqVB08eFDDhw+XJA0bNkwNGjTQpEmTFBUVpdatW/udX7NmTUkqtd8u3DwTAAB72R5uBg8erN27d2v8+PHKyclR+/bttWTJEt8g4+3btyssrPIMDaLlBgAAe7mMMcbuIkIpPz9f8fHxysvLU1xcXMA//6KLpBUrpH/9S/rDHwL+8QAAVEnl+ftdeZpEKglabgAAsBfhJsAINwAA2ItwE2CEGwAA7EW4CTBmSwEAYC/CTYDRcgMAgL0INwHmXQyZcAMAgD0INwFGyw0AAPYi3AQY4QYAAHsRbgKMcAMAgL0INwFGuAEAwF6EmwBjKjgAAPYi3AQYs6UAALAX4SbA6JYCAMBehJsAI9wAAGAvwk2AEW4AALAX4SbACDcAANiLcBNgzJYCAMBehJsAY7YUAAD2ItwEGN1SAADYi3ATYIQbAADsRbgJMMINAAD2ItwE2Inhxhi7qwEAoOoh3ASYN9xI0tGjdlYCAEDVRLgJsBPDDV1TAACEHuEmwNzukueEGwAAQo9wE2AuF2vdAABgJ8JNEDBjCgAA+xBugoBwAwCAfQg3QUC4AQDAPoSbIODmmQAA2IdwEwQMKAYAwD6EmyCgWwoAAPsQboKAcAMAgH0IN0FAuAEAwD6EmyAg3AAAYB/CTRAwWwoAAPsQboKA2VIAANiHcBMEdEsBAGAfwk0QEG4AALAP4SYICDcAANiHcBMEhBsAAOxDuAkCZksBAGAfwk0Q0HIDAIB9CDdBwFRwAADsQ7gJAlpuAACwD+EmCAg3AADYh3ATBIQbAADsQ7gJAsINAAD2IdwEAVPBAQCwD+EmCJgtBQCAfQg3QUC3FAAA9iHcBAHhBgAA+xBugoBwAwCAfQg3QUC4AQDAPoSbIPCGm6NHJY/H7moAAKhaCDdB4J0tJaaDAwAQcoSbIPC23IiuKQAAQo5wEwQREVLY8StLuAEAILQIN0HgcjGoGAAAuxBugoRwAwCAPQg3QUK4AQDAHoSbIPHOmGK2FAAAoUW4CRJabgAAsEeFCDfPPPOMmjRpoqioKHXu3Flr1qw55bFvvfWWOnbsqJo1a6pGjRpq3769Xn311ZDWWxaEGwAA7GF7uJk/f77Gjh2rCRMmaP369WrXrp169+6tXbt2nfT42rVr64EHHtDKlSu1ceNGDR8+XMOHD9f7778f8tpPh3ADAIA9bA83Tz75pG655RYNHz5cF1xwgWbOnKnq1atr9uzZJz2+R48euvrqq3X++eerefPmGjNmjNq2bavly5eHvPbTIdwAAGAPW8NNUVGRsrKylJ6eXlJQWJjS09O1cuXK3zzfGKPMzExt2bJFl1xyyUmPKSwsVH5+vt8WCoQbAADsYWu42bNnj4qLi5WUlOS3PykpSTk5Oac8Ly8vTzExMXK73erfv7+mTZumXr16nfTYSZMmKT4+3relpKQE/HecjDfcMFsKAIDQsr1b6kzExsYqOztba9eu1cSJEzV27Fh99NFHJz123LhxysvL8207duwISY3eqeC03AAAEFoRdn55QkKCwsPDlZub67c/NzdX9erVO+V5YWFhOueccyRJ7du31+bNmzVp0iT16NGj1LGRkZGKPPE23SFCtxQAAPawteXG7XYrNTVVmZmZvn0ej0eZmZlKS0sr8+d4PB4VVrD+H8INAAD2sLXlRpLGjh2rjIwMdezYUZ06ddLUqVN18OBBDR8+XJI0bNgwNWjQQJMmTZKOj6Hp2LGjmjdvrsLCQr333nt69dVXNWPGDJt/iT/CDQAA9rA93AwePFi7d+/W+PHjlZOTo/bt22vJkiW+Qcbbt29XWFhJA9PBgwc1atQo/fjjj4qOjlbLli312muvafDgwTb+itIINwAA2MNljDF2FxFK+fn5io+PV15enuLi4oL2PQ8/LD30kDRypPTss0H7GgAAqoTy/P2ulLOlKgNmSwEAYA/CTZDQLQUAgD0IN0FCuAEAwB6EmyAh3AAAYA/CTZAQbgAAsAfhJkgINwAA2INwEyTe2VIVbOFkAAAcj3ATJLTcAABgD8JNkBBuAACwB+EmSAg3AADYg3ATJIQbAADsQbgJEsINAAD2INwECbOlAACwB+EmSLwtN8XF0rFjdlcDAEDVQbgJEm+4EV1TAACEFOEmSLzdUiLcAAAQUoSbIAkPl6pVs54TbgAACB3CTRAxYwoAgNAj3ASRN9wwYwoAgNAh3ASRd9wNLTcAAIQO4SaI6JYCACD0CDdBRLgBACD0CDdBRLgBACD0CDdBRLgBACD0CDdBRLgBACD0CDdBxM0zAQAIPcJNENWoYT3u2mV3JQAAVB2EmyC65BLr8a237K4EAICqg3ATRNdea91jau1a6dtv7a4GAICqgXATRImJ0mWXWc/nzrW7GgAAqgbCTZD98Y/W49y5kjF2VwMAgPMRboLs6qutWVObN0sbN9pdDQAAzke4CbK4OKl/f+v5nDl2VwMAgPMRbkJgyBDrcd48yeOxuxoAAJyNcBMC/ftLsbHS9u3SypV2VwMAgLMRbkIgOtoaeyO6pgAACLpyhZspU6bo8OHDvtcrVqxQ4Qn3FigoKNCoUaMCW6FDeLumFiyQjh2zuxoAAJzLZUzZJyiHh4fr559/VmJioiQpLi5O2dnZatasmSQpNzdXycnJKi4uDl7FZyk/P1/x8fHKy8tTXFxcyL736FGpQQNp925pyRKpd++QfTUAAJVeef5+l6vl5tc5qBy5qMqrVs1asVgs6AcAQFAx5iaEvF1Tb79tteQAAIDAI9yEUNeuUp06Un6+tGaN3dUAAOBMEeU94Z///KdiYmIkSceOHdNLL72khIQE6fiAYpxaWJh1r6k33pCWLpW6dbO7IgAAnKdcA4qbNGkil8v1m8f98MMPZ1tX0Ng1oNjrn/+UbrnFCjbLl4f86wEAqJTK8/e7XC03W7duPdvaqrz0dOtx1Sqre8qGfAUAgKMx5ibEmjSRmjeXiouljz+2uxoAAJynXOFm5cqVWrRokd++V155RU2bNlViYqJuvfVWv0X9cHK9elmPH3xgdyUAADhPucLNI488oi+++ML3etOmTbrpppuUnp6u++67T++++64mTZoUjDodxds1tXSp3ZUAAOA85Qo32dnZuuyyy3yv582bp86dO2vWrFkaO3asnn76ab3xxhvBqNNRLr1UcrmkzZuln36yuxoAAJylXOFm3759SkpK8r3++OOP1bdvX9/rCy+8UDt27AhshQ5Uq5bUsaP1nK4pAAACq1zhJikpyTfNu6ioSOvXr1eXLl187xcUFKhatWqBr9KBGHcDAEBwlCvc9OvXT/fdd58+/fRTjRs3TtWrV9fFF1/se3/jxo1q3rx5MOp0HO+4mw8+kLhFFwAAgVOucPO3v/1NERER6t69u2bNmqXnn39ebrfb9/7s2bN1+eWXB6NOx+naVYqOlnJypBPGaAMAgLNUrkX8EhIS9MknnygvL08xMTEKDw/3e3/BggWKjY0NdI2OFBkpXXKJ9P77VutN69Z2VwQAgDOUK9zceOONZTpu9uzZZ1pPlZKeboWbpUulu+6yuxoAAJyhXOHmpZdeUuPGjdWhQweV45ZUOAXvoOKPP5aKiqQTevgAAMAZKle4GTlypObOnasffvhBw4cP15/+9CfVrl07eNU5XJs2Ut260u7d0urV0gljswEAwBkq14DiZ555Rj///LP+8pe/6N1331VKSooGDRqk999/n5acMxAWJnnXRGS1YgAAAqPcN86MjIzUkCFDtHTpUn355Zdq1aqVRo0apSZNmujAgQPBqdLBvOFm2TK7KwEAwBnO6q7gYWFhcrlcMsaouLg4cFVVIZdeaj2uWiUdPGh3NQAAVH7lDjeFhYWaO3euevXqpXPPPVebNm3S9OnTtX37dsXExASnSgdr2lRq3Fg6dkxavtzuagAAqPzKFW5GjRql+vXra/Lkybriiiu0Y8cOLViwQP369VNY2Fk1AlVZLpfUs6f1nK4pAADOnsuUYyRwWFiYGjVqpA4dOsjlcp3yuLfeeitQ9QVcfn6+4uPjlZeXp7i4OLvLkSS9+qo0bJh04YXSmjV2VwMAQMVTnr/f5ZoKPmzYsNOGGpwZb8tNVpaUlyfFx9tdEQAAlVe5F/ELhmeeeUaPPfaYcnJy1K5dO02bNk2dOnU66bGzZs3SK6+8os8//1ySlJqaqr///e+nPL4yaNhQatFC+uYb6ZNPpAED7K4IAIDKy/aBMvPnz9fYsWM1YcIErV+/Xu3atVPv3r21a9eukx7/0UcfaciQIVq2bJlWrlyplJQUXX755frpp59CXnsgeWdNffih3ZUAAFC5lWvMTTB07txZF154oaZPny5J8ng8SklJ0ejRo3Xffff95vnFxcWqVauWpk+frmHDhv3m8RVxzI0kzZ8vXXed1K6dlJ1tdzUAAFQs5fn7bWvLTVFRkbKyspSenl5SUFiY0tPTtXLlyjJ9xqFDh3T06NFT3gaisLBQ+fn5fltF1KOH9bhhg7Rnj93VAABQedkabvbs2aPi4mIlJSX57U9KSlJOTk6ZPuPee+9VcnKyX0A60aRJkxQfH+/bUlJSAlJ7oCUlSa1bW88/+sjuagAAqLxsH3NzNiZPnqx58+bp7bffVlRU1EmPGTdunPLy8nzbjh07Ql5nWbHeDQAAZ8/WcJOQkKDw8HDl5ub67c/NzVW9evVOe+7jjz+uyZMn67///a/atm17yuMiIyMVFxfnt1VU5RlU/NNP0rZtQS8JAIBKx9Zw43a7lZqaqszMTN8+j8ejzMxMpaWlnfK8KVOm6G9/+5uWLFmijh07hqja4Ove3Vqx+KuvpJ07/d8rLJQyM6V77pHatLGmj597rrRunV3VAgBQMdneLTV27FjNmjVLL7/8sjZv3qyRI0fq4MGDGj58uHR84cBx48b5jn/00Uf14IMPavbs2WrSpIlycnKUk5PjiDuS16oldehgPfeOu9m3T7r/fikhQUpPlx5/XDq+xI+KiqSRIyXuWQoAQIlyLeIXDIMHD9bu3bs1fvx45eTkqH379lqyZIlvkPH27dv97ls1Y8YMFRUV6ZprrvH7nAkTJuihhx4Kef2Bduml0vr10qJF0tat0pQp1qrFklSvntSnj7W1aSOlpVktN7NmSSNG2F05AAAVg+3r3IRaRV3nxmvxYqlfP/99rVtLEydaKxefePeLadOkO++UataUtmyREhNDXi4AACFRada5QWkXXSRFR1vPmzWTXnvNWtTvyiv9g41kdUl16CDt3y/de68t5QIAUOEQbiqY2Fjp/felefOkzZuloUOl8PCTHxsRIc2YYYWel16Sli8PdbUAAFQ8hJsK6OKLpcGDJbf7t4/t3Fm65Rbr+ciR0tGjQS8PAIAKjXDjAH//u1SnjjWL6vgtugAAqLIINw5Qp44VcCSrmwoAgKqMcOMQQ4ZI1apJ33wjff213dUAAGAfwo1DxMaW3Fn8P/+xuxoAAOxDuHGQ/v2tx0WL7K4EAAD7EG4c5IorrMdPPpHy8+2uBgAAexBuHKR5c+m886Rjx6T//tfuagAAsAfhxmG8rTeMuwEAVFWEG4fxjrt57z3J47G7GgAAQo9w4zAXXSTFxUm7dll3DAcAoKoh3DhMtWpS797Wc2ZNAQCqIsKNAzHuBgBQlRFuHKhvX+tO4evXSzt32l0NAAChRbhxoLp1rbuF6/jAYgAAqhLCjUOxWjEAoKoi3DiUd9zNBx9IR47YXQ0AAKFDuHGodu2kBg2kgwdZrRgAULUQbhzK5ZKuu856/txzdlcDAEDoEG4cbMQI63HxYun77+2uBgCA0CDcONg551gL+hkjzZxpdzUAAIQG4cbhbr/denzhBenwYburAQAg+Ag3Dtevn9SokbR3rzR/vt3VAAAQfIQbhwsPLxl78+yzdlcDAEDwEW6qgJtuktxuae1aayuP/fulKVOkyy+XPv00WBUCABA4hJsqIDFRuvZa63lZW2+2bZP+/GcpJUW6915p6VLrnlWrVgW1VAAAzhrhporwDiyeN0/65ZdTH3fggDR8uNS8uTR1qvW6VSspLc1aELBvXyk7O2RlAwBQboSbKqJLF6l9e+tWDC+8cPJjtm+XunWTXnpJKi6WLrvMWiNn0yar5aZbN6ubqlcvafPmUP8CAADKhnBTRbhcJa0348ZJt94q7dxZ8v7q1VKnTtLGjVJSkvTJJ9Z9qfr0sc6tUUP6z3+k1FRpzx4r+Hz3nW0/BwCAU3IZY4zdRYRSfn6+4uPjlZeXp7i4OLvLCanCQun666UFC6zX0dHWuJpzzpFGjrTeb9tWevdda/r4yfzyi9Sjh/T551LTptKGDVJsbEh/BgCgCirP329abqqQyEjpjTesWU9du1qL+v3979KNN1rBZsAAafnyUwcbSapTx+qiatxY+uEHaeLEUP4CAAB+G+GmCrroIivELFwotWxp7ft//096++2ytcLUqydNn249f/JJacuW4NYLAEB50C1VxRUXS7t3W4GlvK64whqH07u3NfDY5QpGhQAA0C2FcggPP7NgI1lTxd1u6f33pXfeCXRlAACcGcINztg550h33209v+subswJAKgYCDc4K/ffLzVsKG3dat2mAQAAuxFucFZq1JCeeMJ6PnmyFXIAALAT4QZn7dprpZ49rdWPBw2S8vPtrggAUJURbnDWXC5p5kxrDZy1a6X+/a37UAEAYAfCDQLi3HOl//5Xio+31tC56iqrJQcAgFAj3CBgfvc7a72bGjWs+1Jde61UVGR3VQCAqoZwg4BKS5MWLZKioqzHoUNpwQEAhBbhBgHXo4d1K4dq1aQ337Ru9/DDD3ZXBQCoKgg3CIo+faxbM9SpI2VlWV1W775rd1UAgKqAcIOg6dVL+uwzqUsXaf9+6corpfvuk44ds7syAICTEW4QVCkp0scfS2PGWK8ffdSaKn7ggN2VAQCcinCDoHO7rZtsvvGGVL26NWX80kulPXvsrgwA4ESEG4TMtddKH35YstjfRRdJ27bZXRUAwGkINwipzp2tRf5SUqQtW6Ru3aQvvrC7KgCAkxBuEHItW0r/+590wQXSTz9JF18sLVhgd1UAAKcg3MAWDRtKn34qde0q7dtn3XDz2mulXbvsrgwAUNkRbmCb2rWlZcuk8eOliAhrwb9WrQLXirNrl5STE5jPAgBUHoQb2Mrtlh5+WFqzRmrTxppBNWiQNHr02X3ukSPWwoFt2lhr7AAAqg7CDSqEDh2kdeukBx+UwsKk6dOtm3CeqQ8/tMbz7NkjvfVWICsFAFR0hBtUGG639Mgj0l13Wa9vu00qKDizz3rnnZLnc+YEpj4AQOVAuEGF88gjUpMm0o4d0l//Wv7zPR7/cLNsmfTzzwEtEQBQgRFuUOHUqCE995z1fNo0adWq8p2flWWFmZgYKTXVCjtvvBGUUgEAFRDhBhXS5ZdLGRmSMdLNN0tFRWU/99//th779JFuuMF6TtcUAFQdhBtUWE88IdWta61gPHly2c/zdkn9/vfW2jnh4dZsrG+/DVqpAIAKhHCDCqtOHenpp63n//d//uNoTuWHH6RNm6xA06+flJQkpadb782dG9x6AQAVA+EGFdrgwdKVV0pHj1otMQMHSj/+eOrjvQHo4outRQIl6Y9/tB7nzLG6uQAAzmZ7uHnmmWfUpEkTRUVFqXPnzlqzZs0pj/3iiy80cOBANWnSRC6XS1OnTg1prQg9l8tqcbn3Xqs15q23pPPPt1p0iotLH+8db/P735fsu+oqKSpK+uoracOG0NUOALCHreFm/vz5Gjt2rCZMmKD169erXbt26t27t3ad4gZDhw4dUrNmzTR58mTVq1cv5PXCHtWrW2Nu1q+XunSRDhyQxoyRevSQ8vNLjtu3T/rkE+v5lVeW7I+Lk664wnrOwGIAcD5bw82TTz6pW265RcOHD9cFF1ygmTNnqnr16po9e/ZJj7/wwgv12GOP6brrrlNkZGTI64W92raVVqyQZs60Asvy5daMKG/Aee89qzWndWupWTP/c71dU3PnWlPDAQDOZVu4KSoqUlZWltK9oz0lhYWFKT09XStXrgzY9xQWFio/P99vQ+UVFmatXLxsmVSrlrRypdS3r7WSsXe8zYmtNl59+0rx8dZ4neXLQ142ACCEbAs3e/bsUXFxsZKSkvz2JyUlKSeAt3KeNGmS4uPjfVtKSkrAPhv2+d3vpA8+kGrWlP73P6sFx3svqhPH23hFRVmDkSUW9AMAp7N9QHGwjRs3Tnl5eb5tx44ddpeEAPl1wCkokOrXlzp2PPnxffpYj+Vd8RgAULnYFm4SEhIUHh6u3Nxcv/25ubkBHSwcGRmpuLg4vw3OkZoqLV1qBRxJGjDA6ro6mQsvtB43bpQKC0NXIwAgtGwLN263W6mpqcrMzPTt83g8yszMVFpaml1loRLq2FH66CNp5EjpgQdOfVzjxtbCgEePMiUcAJzM1m6psWPHatasWXr55Ze1efNmjRw5UgcPHtTw4cMlScOGDdO4ceN8xxcVFSk7O1vZ2dkqKirSTz/9pOzsbH3LuvpVXrt20rPPSo0anfoYl6uk9WbdupCVBgAIsQg7v3zw4MHavXu3xo8fr5ycHLVv315LlizxDTLevn27wk7oY9i5c6c6dOjge/3444/r8ccfV/fu3fXRRx/Z8htQuXTsKC1ZIq1da3clAIBgcRlTtRakz8/PV3x8vPLy8hh/UwW98441m6pVK+nzz+2uBgBQVuX5++342VLAibwzqTZvtlY6BgA4D+EGVUpysrV5PNJnn9ldDQAgGAg3qHK8g4oZdwMAzkS4QZXDjCkAcDbCDaoc77gbWm4AwJkIN6hyvOHm22+lffvsrgYAEGiEG1Q5depIzZpZz7Oy7K4GABBohBtUSXRNAYBzEW5QJTFjCgCci3CDKokZUwDgXIQbVEm/+511I80dO6TcXLurAQAEEuEGVVJsrNSypfWcrikAcBbCDaosuqYAwJkIN6iymDEFAM5EuEGVdeKMKWPsrgYAECiEG1RZ7dpJERHS7t3Se+/ZXQ0AIFAIN6iyoqOlIUOs51dfLf3rX3ZXBAAIBMINqrR//lMaNEg6etR6fPlluysCAJwtwg2qNLdbmjNHuvFGyeORbrhBmj7d7qoAAGeDcIMqLzxcmjVLGjPGej16tDR1qt1VAQDOFOEGkBQWJv3jH9KDD1qv/9//k5Yts7sqAMCZINwAx7lc0sMPSxkZVhfVdddJO3faXRUAoLwIN8AJXC7p2Weltm2lXbusgHP0qN1VAQDKg3AD/Er16tKbb1r3n/r0U+n+++2uCABQHoQb4CRatJBeesl6/vjj0ttv210RAKCsCDfAKfzhD9LYsdbzG26wWnEAABUf4QY4jcmTpYsvlvLzpZ49pSef5D5UAFDREW6A06hWTVq82LpNQ3GxNUV88GCpoMDuygAAp0K4AX5DjRrS669L06ZZN9pcsEDq1En66iu7KwMAnAzhBigDl0u64w7pk0+k5GQr2PTsKf34o92VAQB+jXADlENamvTZZ1Lr1lJOjnU38cOH7a4KAHAiwg1QTomJ0jvvSHXqSOvWSTffzCBjAKhICDfAGWja1FroLyLCuqv4lCl2VwQA8CLcAGeoRw/pqaes5+PGSf/5j90VAQBEuAHOzsiR0m23Wd1SQ4ZY3VQAAHsRboCz4HJJTz8tXXKJtfZN9+7Sv/9td1UAULURboCz5HZL774r9e4tHTpkzaDydlcBAEKPcAMEQFycFXBuvdXqorrrLunOO61VjQEAoUW4AQKkWjVp5sySmVPTpknXXCMdPWp3ZQBQtRBugAByuaR77rFu0RAZKS1cKN10k+Tx2F0ZAFQdhBsgCK65RvrXv6TwcOnVV6W772ahPwAIFcINECT9+0svvmg9/8c/pMmT7a4IAKoGwg0QRNdfLz35pPX8/vulWbPsrggAnI9wAwTZn/9srWAsSSNGSK+/bndFAOBshBsgBCZOtKaJezxWa84zz9hdEQA4F+EGCAGXS5oxQxo92hpYfMcd0t/+xiBjAAgGwg0QImFh1srFEyZYr8ePt7qsmCYOAIFFuAFCyOWSHnqo5PYMTz1l3a5hyRKpqMju6gDAGQg3gA3uvFN65RVrHZx33pH69pXq1pWGDrXWx9m3z+4KAaDychlTtXr98/PzFR8fr7y8PMXFxdldDqq4tWuttXDeflvKyfF/74ILpIsukrp1k3r0kBo1sqtKALBfef5+E26ACsDjkVavlt56S1q0SPrqq9LHdO8u3XCDtfpxTIwdVQKAfQg3p0G4QWWwe7f0v/9Jy5db2+rVJTOrqle3Ak7PnlLLltZWs6bdFQNAcBFuToNwg8poxw7rHlUvvyx9/XXp9+vVk845R0pIkGrXlurUsR737ZO2bi3ZCgqkTp2sbq4ePaQuXaSoKDt+EQCUD+HmNAg3qMyMkVatkt54Q9q0Sdq8Wdq588w/LzLSugfWI49IrVoFslIACCzCzWkQbuA0+fnWGJ2tW6VffpH27i15jI+XmjQp2dxuacUK6aOPpGXLSgYxu1zWyskPP2wdBwAVDeHmNAg3gMUYaeNGa6Xkf/3L2letmnTzzVKbNlKNGiffYmKk2FiJf30AhBLh5jQIN0Bpa9ZYN/f88MOyn5OUJLVrV7Kdc44VeGJjrQAUEyNFRASzagBVCeHmNAg3wKl98IE0Z46UlycdPGhtBw6UPPe+Li4u2+edc47UsWPJ1qqVFXoiI62uMAAoK8LNaRBugLNjjBVyvvhC2rChZNu+3dpfUCAdPXr6z3C5rCnt0dElW1RUyeOvt6ZNpYsvtmZ3Va8eql8KoCIpz99vGo0BlIvLZbW+dO5sbSdTVGRNQ9+4UVq3rmTbvt163xuQDh4s33dHREipqdb3ut1WiPJuhw9bg6sLCqzHI0esVZ67drW29u2tcwA4Hy03AELGG0IOHSrZjhyx9nkfDx+WCgut10eOWMds3Ch9+qn0449n/t1RUSULHsbFWTPJataUkpOtW1t4t/r1rYHVACoWWm4AVEjVqlnbmfz/CmOkbdukTz6xwo7LVfJ51apZ4SUurmRQc3i49Nln1krPK1da0+Ozs8v2XWFh1rgg71atmtVqFB5uPVavLp17rtUydP751mPt2tZYJO8mlQSo8PDS3+ENerGxjD8CAo2WGwCOZ4z0zTfSd99ZXVZ5eda2f7/VGrR9u7Xt2PHb44XORFycFX7Cwkq6zgoLrffcbqu1qEEDa4uPt97zbkVF1nknBjnJv/Xr0CErcJ24OnV8fMmYJW9Ii4uz3vdutWvTVYfKo9K13DzzzDN67LHHlJOTo3bt2mnatGnq1KnTKY9fsGCBHnzwQW3dulUtWrTQo48+qn79+oW0ZgCVh8tltbSce+7pjysutkLPieGisFA6dsx/y8uzFk788ktrlegvv7TGD4WHW1tYmBWoDh+2Pjc/39pOpqjIapHati3wv7ss3O6S9Ytq1LBCkjcQeR+9rVZhYSW/8devo6Otc73biTPivI+Rkf6DyN1u63p6x00dO2bVkJAg1a1rPUZGWtcoL88ax7V/vxXw6tWzjjndcgPGWJ9bVGRtbrf1vSdrSYOz2B5u5s+fr7Fjx2rmzJnq3Lmzpk6dqt69e2vLli1KTEwsdfz//vc/DRkyRJMmTdIVV1yhOXPm6KqrrtL69evVunVrW34DAGcID7daM8piwIDfPqaoyPpjvG+ftWK0MVY3lHcRxKgo6yapP/1Ush044N8l5nZbd433hoBjx6zPOTFIREVZQWrv3pIVqvfv9w9oR45YAeGXX6xt3z7rc7x/+PftO+vLFxSRkSWtXL8WFmYFnLp1reviHbPlHbdVVHTy87zdmN5Qd+Lmdpd0P54Y4lwuawsLK725XP7X2RuIvf0i3sfoaP8FMd3u0l2Sxlj/e3s3HR9I793Cw0u6SSMiSlrzTvxnJjLSOvfXLYBSye9wufy7cuPirN9vjBXyPR7/blbva4/H//vcbuv1r39HZKQVQO1ie7dU586ddeGFF2r69OmSJI/Ho5SUFI0ePVr33XdfqeMHDx6sgwcPatGiRb59Xbp0Ufv27TVz5szf/D66pQCgpJXqxHWMDhwoGdx94qDuX/+BO9nmHfzt3byB5MQ/8IWFJeHj0CHrD673D7X38cABac8ea/v1ekregeBHj0q7dpX88UfFk5ZmjXcLpErTLVVUVKSsrCyNGzfOty8sLEzp6elauXLlSc9ZuXKlxo4d67evd+/eWrhw4UmPLywsVOEJsT//VG3DAFCFeFupytpSFWoej9X6lJ9f0rJwYhdUcbEVgHJyrNavatX810v6detXtWpWmDpxVt6Joa6gwHr0to6dGNy8rSm/fvSGPWP8u/G8g9C9XC7r2CNHrO87dMh6/HXLkjGlW4W8LSneLtGjR63X3jqPHbM+59ctR78eFH/i2CpjrO3IkZIu0/x86/e7XCfvdvS+DguzvvvEFqGTjVOLjAzGPxVlZ2u42bNnj4qLi5WUlOS3PykpSV999dVJz8nJyTnp8TneOwD+yqRJk/Twww8HsGoAQLCFhZ0+fIWHW7cA+dWfg9OqVs3qDoLzhdldQLCNGzdOeXl5vm3Hjh12lwQAAILI1pabhIQEhYeHKzc3129/bm6u6p1iJFK9evXKdXxkZKQi7W4fAwAAIWNry43b7VZqaqoyMzN9+zwejzIzM5WWlnbSc9LS0vyOl6SlS5ee8ngAAFC12D4VfOzYscrIyFDHjh3VqVMnTZ06VQcPHtTw4cMlScOGDVODBg00adIkSdKYMWPUvXt3PfHEE+rfv7/mzZundevW6fnnn7f5lwAAgIrA9nAzePBg7d69W+PHj1dOTo7at2+vJUuW+AYNb9++XWFhJQ1MXbt21Zw5c/TXv/5V999/v1q0aKGFCxeyxg0AAJAqwjo3ocY6NwAAVD7l+fvt+NlSAACgaiHcAAAARyHcAAAARyHcAAAARyHcAAAARyHcAAAARyHcAAAARyHcAAAAR7F9heJQ865ZmJ+fb3cpAACgjLx/t8uy9nCVCzcFBQWSpJSUFLtLAQAA5VRQUKD4+PjTHlPlbr/g8Xi0c+dOxcbGyuVyBfSz8/PzlZKSoh07dnBrhyDjWocO1zp0uNahw7UOnUBda2OMCgoKlJyc7HfPyZOpci03YWFhatiwYVC/Iy4ujn9ZQoRrHTpc69DhWocO1zp0AnGtf6vFxosBxQAAwFEINwAAwFEINwEUGRmpCRMmKDIy0u5SHI9rHTpc69DhWocO1zp07LjWVW5AMQAAcDZabgAAgKMQbgAAgKMQbgAAgKMQbgAAgKMQbgLkmWeeUZMmTRQVFaXOnTtrzZo1dpdU6U2aNEkXXnihYmNjlZiYqKuuukpbtmzxO+bIkSO6/fbbVadOHcXExGjgwIHKzc21rWanmDx5slwul+666y7fPq514Pz000/605/+pDp16ig6Olpt2rTRunXrfO8bYzR+/HjVr19f0dHRSk9P1zfffGNrzZVRcXGxHnzwQTVt2lTR0dFq3ry5/va3v/ndm4hrfeY++eQTDRgwQMnJyXK5XFq4cKHf+2W5tnv37tXQoUMVFxenmjVr6qabbtKBAwfOvjiDszZv3jzjdrvN7NmzzRdffGFuueUWU7NmTZObm2t3aZVa7969zYsvvmg+//xzk52dbfr162caNWpkDhw44DtmxIgRJiUlxWRmZpp169aZLl26mK5du9pad2W3Zs0a06RJE9O2bVszZswY336udWDs3bvXNG7c2Nxwww1m9erV5vvvvzfvv/+++fbbb33HTJ482cTHx5uFCxeaDRs2mCuvvNI0bdrUHD582NbaK5uJEyeaOnXqmEWLFpkffvjBLFiwwMTExJinnnrKdwzX+sy999575oEHHjBvvfWWkWTefvttv/fLcm379Olj2rVrZ1atWmU+/fRTc84555ghQ4acdW2EmwDo1KmTuf32232vi4uLTXJyspk0aZKtdTnNrl27jCTz8ccfG2OM2b9/v6lWrZpZsGCB75jNmzcbSWblypU2Vlp5FRQUmBYtWpilS5ea7t27+8IN1zpw7r33XnPRRRed8n2Px2Pq1atnHnvsMd++/fv3m8jISDN37twQVekM/fv3NzfeeKPfvj/84Q9m6NChxnCtA+rX4aYs1/bLL780kszatWt9xyxevNi4XC7z008/nVU9dEudpaKiImVlZSk9Pd23LywsTOnp6Vq5cqWttTlNXl6eJKl27dqSpKysLB09etTv2rds2VKNGjXi2p+h22+/Xf379/e7puJaB9Q777yjjh076tprr1ViYqI6dOigWbNm+d7/4YcflJOT43et4+Pj1blzZ651OXXt2lWZmZn6+uuvJUkbNmzQ8uXL1bdvX4lrHVRlubYrV65UzZo11bFjR98x6enpCgsL0+rVq8/q+6vcjTMDbc+ePSouLlZSUpLf/qSkJH311Ve21eU0Ho9Hd911l7p166bWrVtLknJycuR2u1WzZk2/Y5OSkpSTk2NTpZXXvHnztH79eq1du7bUe1zrwPn+++81Y8YMjR07Vvfff7/Wrl2rO++8U263WxkZGb7rebL/pnCty+e+++5Tfn6+WrZsqfDwcBUXF2vixIkaOnSodPyfa3Gtg6Is1zYnJ0eJiYl+70dERKh27dpnff0JN6gUbr/9dn3++edavny53aU40o4dOzRmzBgtXbpUUVFRdpfjaB6PRx07dtTf//53SVKHDh30+eefa+bMmcrIyLC7PEd544039Prrr2vOnDlq1aqVsrOzdddddyk5OZlr7XB0S52lhIQEhYeHl5o1kpubq3r16tlWl5PccccdWrRokZYtW6aGDRv69terV09FRUXav3+/3/Fc+/LLysrSrl279Lvf/U4RERGKiIjQxx9/rKeffloRERFKSkriWgdI/fr1dcEFF/jtO//887V9+3bp+D/XOn5tT8S1Lr977rlH9913n6677jq1adNG119/vf785z9r0qRJEtc6qMpybevVq6ddu3b5vX/s2DHt3bv3rK8/4eYsud1upaamKjMz07fP4/EoMzNTaWlpttZW2RljdMcdd+jtt9/Whx9+qKZNm/q9n5qaqmrVqvld+y1btmj79u1c+3K67LLLtGnTJmVnZ/u2jh07aujQob7nXOvA6NatW6klDb7++ms1btxYktS0aVPVq1fP71rn5+dr9erVXOtyOnTokMLC/P/MhYeHy+PxSFzroCrLtU1LS9P+/fuVlZXlO+bDDz+Ux+NR586dz66AsxqODGOOTwWPjIw0L730kvnyyy/NrbfeamrWrGlycnLsLq1SGzlypImPjzcfffSR+fnnn33boUOHfMeMGDHCNGrUyHz44Ydm3bp1Ji0tzaSlpdlat1OcOFvKcK0DZs2aNSYiIsJMnDjRfPPNN+b111831atXN6+99prvmMmTJ5uaNWuaf//732bjxo3m97//PdOTz0BGRoZp0KCBbyr4W2+9ZRISEsxf/vIX3zFc6zNXUFBgPvvsM/PZZ58ZSebJJ580n332mdm2bZsxZby2ffr0MR06dDCrV682y5cvNy1atGAqeEUybdo006hRI+N2u02nTp3MqlWr7C6p0pN00u3FF1/0HXP48GEzatQoU6tWLVO9enVz9dVXm59//tnWup3i1+GGax047777rmndurWJjIw0LVu2NM8//7zf+x6Pxzz44IMmKSnJREZGmssuu8xs2bLFtnorq/z8fDNmzBjTqFEjExUVZZo1a2YeeOABU1hY6DuGa33mli1bdtL/RmdkZBhTxmv7yy+/mCFDhpiYmBgTFxdnhg8fbgoKCs66Npc5calGAACASo4xNwAAwFEINwAAwFEINwAAwFEINwAAwFEINwAAwFEINwAAwFEINwAAwFEINwAAwFEINwCqJJfLpYULF9pdBoAgINwACLkbbrhBLper1NanTx+7SwPgABF2FwCgaurTp49efPFFv32RkZG21QPAOWi5AWCLyMhI1atXz2+rVauWdLzLaMaMGerbt6+io6PVrFkzvfnmm37nb9q0SZdeeqmio6NVp04d3XrrrTpw4IDfMbNnz1arVq0UGRmp+vXr64477vB7f8+ePbr66qtVvXp1tWjRQu+8847vvX379mno0KGqW7euoqOj1aJFi1JhDEDFRLgBUCE9+OCDGjhwoDZs2KChQ4fquuuu0+bNmyVJBw8eVO/evVWrVi2tXbtWCxYs0AcffOAXXmbMmKHbb79dt956qzZt2qR33nlH55xzjt93PPzwwxo0aJA2btyofv36aejQodq7d6/v+7/88kstXrxYmzdv1owZM5SQkBDiqwDgjJz1fcUBoJwyMjJMeHi4qVGjht82ceJEY4wxksyIESP8zuncubMZOXKkMcaY559/3tSqVcscOHDA9/5//vMfExYWZnJycowxxiQnJ5sHHnjglDVIMn/96199rw8cOGAkmcWLFxtjjBkwYIAZPnx4gH85gFBgzA0AW/Ts2VMzZszw21e7dm3f87S0NL/30tLSlJ2dLUnavHmz2rVrpxo1avje79atmzwej7Zs2SKXy6WdO3fqsssuO20Nbdu29T2vUaOG4uLitGvXLknSyJEjNXDgQK1fv16XX365rrrqKnXt2vUsfzWAUCDcALBFjRo1SnUTBUp0dHSZjqtWrZrfa5fLJY/HI0nq27evtm3bpvfee09Lly7VZZddpttvv12PP/54UGoGEDiMuQFQIa1atarU6/PPP1+SdP7552vDhg06ePCg7/0VK1YoLCxM5513nmJjY9WkSRNlZmaeVQ1169ZVRkaGXnvtNU2dOlXPP//8WX0egNCg5QaALQoLC5WTk+O3LyIiwjdod8GCBerYsaMuuugivf7661qzZo1eeOEFSdLQoUM1YcIEZWRk6KGHHtLu3bs1evRoXX/99UpKSpIkPfTQQxoxYoQSExPVt29fFRQUaMWKFRo9enSZ6hs/frxSU1PVqlUrFRYWatGiRb5wBaBiI9wAsMWSJUtUv359v33nnXeevvrqK+n4TKZ58+Zp1KhRql+/vubOnasLLrhAklS9enW9//77GjNmjC688EJVr15dAwcO1JNPPun7rIyMDB05ckT/+Mc/dPfddyshIUHXXHNNmetzu90aN26ctm7dqujoaF188cWaN29ewH4/gOBxGWvWAABUGC6XS2+//bauuuoqu0sBUAkx5gYAADgK4QYAADgKY24AVDj0lgM4G7TcAAAARyHcAAAARyHcAAAARyHcAAAARyHcAAAARyHcAAAARyHcAAAARyHcAAAAR/n/66M0wFecaLoAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.suptitle('Log MSE vs Epochs')\n",
"plt.plot(torch.log(tune_train_err), label='Train', color='blue')\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Log MSE')\n",
"plt.show()\n",
"with open(\"plots/tune-loss.html\", \"w\") as f:\n",
" mpld3.save_html(plt.gcf(), f)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([[6.0290e+03, 1.8597e+04, 8.4000e+01, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00],\n",
" [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00],\n",
" [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00],\n",
" ...,\n",
" [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00],\n",
" [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00],\n",
" [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n",
" 1.0000e+00]]),\n",
" array([1. , 1.1 , 1.2 , 1.3 , 1.4 , 1.5 , 1.6 , 1.699, 1.8 ,\n",
" 1.9 , 2. , 2.1 , 2.2 , 2.3 , 2.398, 2.5 , 2.6 , 2.7 ,\n",
" 2.8 , 2.898, 3. , 3.1 , 3.2 , 3.299, 3.398, 3.5 , 3.6 ,\n",
" 3.7 , 3.799, 3.898, 4. , 4.1 , 4.2 , 4.297, 4.4 , 4.5 ,\n",
" 4.6 , 4.7 , 4.797, 4.9 , 5. , 5.098, 5.2 , 5.3 , 5.4 ,\n",
" 5.5 , 5.598, 5.7 , 5.797, 5.9 , 6. ], dtype=float16),\n",
" array([0.9014, 0.998 , 1.094 , 1.19 , 1.287 , 1.384 , 1.48 , 1.576 ,\n",
" 1.673 , 1.77 , 1.865 , 1.962 , 2.059 , 2.156 , 2.25 , 2.348 ,\n",
" 2.445 , 2.541 , 2.637 , 2.734 , 2.83 , 2.926 , 3.023 , 3.121 ,\n",
" 3.215 , 3.312 , 3.41 , 3.504 , 3.602 , 3.7 , 3.793 , 3.89 ,\n",
" 3.988 , 4.082 , 4.18 , 4.277 , 4.375 , 4.47 , 4.566 , 4.664 ,\n",
" 4.758 , 4.855 , 4.953 , 5.05 , 5.145 , 5.242 , 5.34 , 5.434 ,\n",
" 5.53 , 5.63 , 5.723 ], dtype=float16),\n",
" <matplotlib.collections.QuadMesh at 0x7f201dae35c0>)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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3/9+nHfeeVW9zoRdrryjoyM6Ojom6nCcxgsvvHDK840bN8bcuXOjr68vrr766sLmqlednZ2nPH/ooYeit7c39uzZE0uWLClsrno2NDQUq1evjqeeeiq+973vFT1O3Wpqaorzzz+/6DHq3iOPPBJtbW3x9NNPj/zsggsuqPp1fGejzg0MDET8xQ3yKM6JEydi8+bNcfz48Vi5cmXR49Strq6uuOmmm+L6668vepS69vrrr8f8+fPjwgsvjNWrV8dbb71V9Eh16Re/+EVcccUVccstt8TcuXPj0ksvjaeeeqrq15nwG7ExeQwPD8e6deti1apVsXTp0qLHqVsHDhyIlStXxp///Oc455xzYuvWrXHJJZcUPVZd2rx5c7z88suxd+/eokepaytWrIiNGzfGokWL4siRI7F+/fq46qqr4uDBg9Hc3Fz0eHXlD3/4Q/T29sa9994b3/3ud2Pv3r1xzz33xPTp02PNmjWjfh2xUce6urri4MGDPgst2KJFi2L//v0xMDAQP/vZz2LNmjWxa9cuwTHB+vv7Y+3atbFjx444++yzix6nrv3lR+7Lli2LFStWRHt7e/z0pz+NO++8s9DZ6s3w8HBcccUV8fDDD0dExKWXXhoHDx6MH/3oR1XFho9R6tRdd90Vzz//fLz44ouxYMGCosepa9OnT4+LLrooLr/88ujp6Ynly5fHo48+WvRYdaevry/ee++9uOyyy6KpqSmamppi165d8dhjj0VTU1OcOHGi6BHr1rnnnhsXX3xxHDp0qOhR6s68efM+8T8+n//856v+WMvORp2pVCpx9913x9atW2Pnzp1j+qIPuYaHh6NcLhc9Rt257rrr4sCBA6f87I477ojFixfH/fffH42NjYXNVu+GhobijTfeiG984xtFj1J3Vq1a9YnLI/z+97+P9vb2ql5nwmJjaGjolCp98803Y//+/TFr1qxYuHDhRI1R97q6umLTpk3x3HPPRXNzc7z77rsREdHa2hozZswoery6093dHR0dHbFw4cI4duxYbNq0KXbu3Bnbt28verS609zc/InvLs2cOTNmz57tO00T7L777ovOzs5ob2+Pw4cPxwMPPBCNjY1x2223FT1a3fnOd74TV155ZTz88MPxta99LV566aV48skn48knn6zuhSoT5MUXX6xExCcea9asmagR+M87/P7Vx9NPP130aHXpm9/8ZqW9vb0yffr0ypw5cyrXXXdd5Ve/+lXRY3HSl7/85cratWuLHqPu3HrrrZV58+ZVpk+fXvnc5z5XufXWWyuHDh0qeqy69ctf/rKydOnSSqlUqixevLjy5JNPVv0abjEPAKTyBVEAIJXYAABSiQ0AIJXYAABSiQ0AIJXYAABSiQ0AIJXYAABSiQ0AIJXYAABSiQ0AIJXYAABS/T/VxjQRzeYx5wAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mkhist(mkbatch(BSZ, large=False, target=\"onpath\"))\n",
"with open(\"plots/tune-hist.html\", \"w\") as f:\n",
" mpld3.save_html(plt.gcf(), f)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "JtTLXn4zC1z_"
},
"source": [
"# Step 6: Test generalization"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"mkhist(mkbatch(BSZ, large=True, target=\"onpath\", largetarget=False))\n",
"with open(\"plots/test-onpath-smalltarget.html\", \"w\") as f:\n",
" mpld3.save_html(plt.gcf(), f)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.20130713284015656\n"
]
},
{
"data": {
"text/plain": [
"(array([[1.7789e+04, 6.5000e+02, 4.8000e+02, ..., 0.0000e+00, 1.0000e+00,\n",
" 1.0000e+00],\n",
" [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00],\n",
" [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00],\n",
" ...,\n",
" [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00],\n",
" [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00],\n",
" [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n",
" 0.0000e+00]]),\n",
" array([ 1. , 1.18 , 1.36 , 1.54 , 1.721, 1.9 , 2.08 , 2.262,\n",
" 2.441, 2.621, 2.8 , 2.98 , 3.16 , 3.34 , 3.521, 3.701,\n",
" 3.88 , 4.062, 4.242, 4.42 , 4.6 , 4.78 , 4.96 , 5.14 ,\n",
" 5.32 , 5.5 , 5.68 , 5.863, 6.043, 6.223, 6.402, 6.582,\n",
" 6.76 , 6.94 , 7.12 , 7.3 , 7.48 , 7.66 , 7.844, 8.02 ,\n",
" 8.2 , 8.38 , 8.56 , 8.74 , 8.92 , 9.1 , 9.28 , 9.46 ,\n",
" 9.64 , 9.82 , 10. ], dtype=float16),\n",
" array([ 0.879, 1.156, 1.434, 1.71 , 1.987, 2.266, 2.541, 2.818,\n",
" 3.096, 3.373, 3.65 , 3.928, 4.203, 4.48 , 4.758, 5.035,\n",
" 5.312, 5.59 , 5.867, 6.145, 6.42 , 6.7 , 6.977, 7.254,\n",
" 7.527, 7.805, 8.08 , 8.36 , 8.64 , 8.92 , 9.19 , 9.47 ,\n",
" 9.75 , 10.016, 10.3 , 10.58 , 10.86 , 11.125, 11.41 , 11.69 ,\n",
" 11.97 , 12.234, 12.516, 12.8 , 13.08 , 13.34 , 13.625, 13.91 ,\n",
" 14.17 , 14.45 , 14.734], dtype=float16),\n",
" <matplotlib.collections.QuadMesh at 0x7f201daaff50>)"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAfp0lEQVR4nO3de3BU9f3/8dcmIUuMyUr4Si6SYEAKym2gWH6AbaFE/eaHFKZTVCZiCnU67UQh0lpINSqDENHWKpUJYjuAF/DSacDyG6Qp5VJ+VQjBONALF6WYcp35DeyS8GUN2fP7o2OmEYTEPZvz3s3zMXP+2LOf7Hkdg+yLz57PWZ/jOI4AAAAMSfI6AAAAwOdRUAAAgDkUFAAAYA4FBQAAmENBAQAA5lBQAACAORQUAABgDgUFAACYk+J1gM+LRCI6fvy4MjIy5PP5vI4DAAA6wHEcnTt3Tnl5eUpKin7+w1xBOX78uPLz872OAQAAvoTGxkb17ds36tcxV1AyMjIkSbfpfytFPa44dkPwlS5KBQAAriQUCik/P7/tfTxa5grKZx/rpKiHUnxXLiiZmZldlAoAAHSEW5dncJEsAAAwh4ICAADMoaAAAABzKCgAAMAccxfJAug6tydN79C42sjbMc8CAP+JGRQAAGAOBQUAAJhDQQEAAOZQUAAAgDkUFAAAYA4FBQAAmENBAQAA5vgcx3E68wM7duzQs88+q/r6ep04cUI1NTWaNm3aZcf+8Ic/1EsvvaRf/vKXKi8v79Drh0IhBQIBBYNBvgwQAIA44fb7d6dnUJqbmzVixAgtX778iuNqamr0/vvvKy8vL5p8AACgG+r0nWSLi4tVXFx8xTHHjh3TQw89pM2bN2vy5MnR5AMAAN2Q67e6j0Qimjlzph555BENGTLkquPD4bDC4XDb41Ao5HYkAAAQZ1y/SHbp0qVKSUnRnDlzOjS+qqpKgUCgbcvPz3c7EgAAiDOuFpT6+nq98MILWr16tXw+X4d+pqKiQsFgsG1rbGx0MxIAAIhDrhaUP//5zzp9+rQKCgqUkpKilJQUHT16VD/+8Y914403XvZn/H6/MjMz220AAKB7c/UalJkzZ6qoqKjdvjvvvFMzZ87UrFmz3DwUAABIYJ0uKE1NTTp8+HDb4yNHjqihoUFZWVkqKChQ7969243v0aOHcnJyNGjQIHcSAwCAhNfpgrJnzx5NnDix7fG8efMkSaWlpVq9erW76QAAQLfU6YIyYcIEdebms//85z87ewgAANDN8V08AADAHAoKAAAwh4ICAADMoaAAAABzKCgAAMAcCgoAADCHggIAAMyhoAAAAHMoKAAAwBwKCgAAMIeCAgAAzKGgAAAAcygoAADAHAoKAAAwh4ICAADMoaAAAABzKCgAAMAcCgoAADCHggIAAMyhoAAAAHMoKAAAwBwKCgAAMIeCAgAAzKGgAAAAcygoAADAnBSvA3yRqYH7leLrccUxtZG3uywPAADoOsygAAAAcygoAADAHAoKAAAwh4ICAADMoaAAAABzKCgAAMAcCgoAADDH7H1QNgRfUWZmptcxAACAB5hBAQAA5lBQAACAORQUAABgDgUFAACYQ0EBAADmUFAAAIA5FBQAAGAOBQUAAJjT6YKyY8cOTZkyRXl5efL5fFq/fn3bcy0tLZo/f76GDRum9PR05eXl6f7779fx48fdzg0AABJYpwtKc3OzRowYoeXLl1/y3Pnz57V3715VVlZq7969+t3vfqcDBw7o29/+tlt5AQBAN+BzHMf50j/s86mmpkbTpk37wjF1dXX62te+pqNHj6qgoOCqrxkKhRQIBBQMBrnVPQAAccLt9++YX4MSDAbl8/l03XXXxfpQAAAgQcT0ywIvXLig+fPna8aMGV/YpsLhsMLhcNvjUCgUy0gAACAOxGwGpaWlRXfffbccx1F1dfUXjquqqlIgEGjb8vPzYxUJAADEiZgUlM/KydGjR1VbW3vFz6IqKioUDAbbtsbGxlhEAgAAccT1j3g+KyeHDh3S1q1b1bt37yuO9/v98vv9bscAAABxrNMFpampSYcPH257fOTIETU0NCgrK0u5ubn67ne/q71792rjxo1qbW3VyZMnJUlZWVlKTU11Nz0AAEhInV5mvG3bNk2cOPGS/aWlpXryySdVWFh42Z/bunWrJkyYcNXXZ5kxAADxx+33707PoEyYMEFX6jRR3FYFAABA4rt4AACARRQUAABgTkxv1BaNqYH7leLrccUxtZG3uywPAADoOsygAAAAcygoAADAHAoKAAAwh4ICAADMoaAAAABzKCgAAMAcs8uMNwRf4Vb3AAB0U8ygAAAAcygoAADAHAoKAAAwh4ICAADMoaAAAABzKCgAAMAcCgoAADCHggIAAMyhoAAAAHMo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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mkhist(mkbatch(BSZ, large=True, target=\"onpath\", largetarget=True))\n",
"with open(\"plots/test-onpath-largetarget.html\", \"w\") as f:\n",
" mpld3.save_html(plt.gcf(), f)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"mkhist(mkbatch(BSZ, large=False, target=\"any\", largetarget=False))\n",
"with open(\"plots/test-small-any.html\", \"w\") as f:\n",
" mpld3.save_html(plt.gcf(), f)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"mkhist(mkbatch(BSZ, large=True, target=\"any\", largetarget=False))\n",
"with open(\"plots/test-large-any-smalltarget.html\", \"w\") as f:\n",
" mpld3.save_html(plt.gcf(), f)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"mkhist(mkbatch(BSZ, large=True, target=\"any\", largetarget=True))\n",
"with open(\"plots/test-large-any-largetarget.html\", \"w\") as f:\n",
" mpld3.save_html(plt.gcf(), f)"
]
}
],
"metadata": {
"colab": {
"gpuType": "T4",
"provenance": []
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}