diff options
-rw-r--r-- | loss | 8000 | ||||
-rw-r--r-- | model.pth | bin | 0 -> 422298 bytes | |||
-rw-r--r-- | transformer_shortest_paths.ipynb | 2656 |
3 files changed, 8773 insertions, 1883 deletions
@@ -0,0 +1,8000 @@ +90.5 +75.0 +64.0 +58.0 +54.25 +51.5 +49.75 +48.75 +47.5 +47.0 +46.5 +46.25 +45.75 +45.75 +45.75 +45.25 +45.25 +45.0 +44.5 +44.5 +44.5 +44.0 +44.0 +44.0 +43.75 +43.75 +43.5 +43.25 +43.0 +43.25 +43.0 +42.75 +42.75 +42.5 +41.75 +42.25 +42.5 +42.0 +42.0 +42.0 +41.75 +41.5 +41.5 +41.75 +41.25 +41.25 +41.5 +41.0 +40.75 +41.25 +40.75 +40.75 +41.0 +41.0 +40.75 +40.5 +40.5 +40.75 +41.0 +40.75 +40.5 +40.25 +40.5 +40.5 +40.75 +40.5 +40.25 +40.0 +40.0 +40.25 +40.25 +40.25 +40.25 +40.0 +40.0 +40.0 +40.0 +40.0 +40.0 +40.0 +40.0 +40.0 +40.0 +40.0 +40.0 +40.0 +40.0 +39.75 +39.75 +39.75 +39.75 +39.5 +39.25 +39.0 +38.75 +38.25 +37.25 +36.25 +34.75 +33.5 +32.75 +32.5 +32.25 +32.25 +32.25 +32.0 +31.625 +31.375 +31.125 +30.875 +30.625 +30.375 +30.375 +30.25 +30.25 +30.125 +30.0 +29.875 +29.875 +29.75 +29.625 +29.5 +29.5 +29.25 +29.25 +29.25 +29.125 +29.125 +29.125 +29.0 +29.0 +29.0 +29.0 +28.875 +28.875 +28.75 +28.75 +28.875 +28.875 +28.75 +28.75 +28.75 +28.625 +28.75 +28.875 +28.75 +28.625 +28.625 +28.75 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.75 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.5 +28.625 +28.625 +28.5 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.5 +28.625 +28.625 +28.5 +28.625 +28.625 +28.625 +28.5 +28.5 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.5 +28.625 +28.625 +28.625 +28.625 +28.625 +28.625 +28.75 +28.625 +28.5 +28.625 +28.5 +28.625 +28.375 +28.5 +28.5 +28.5 +28.5 +28.375 +28.5 +28.375 +28.5 +28.5 +28.5 +28.5 +28.5 +28.375 +28.5 +28.375 +28.375 +28.5 +28.375 +28.375 +28.5 +28.375 +28.375 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.375 +28.5 +28.5 +28.5 +28.375 +28.375 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.375 +28.5 +28.375 +28.375 +28.5 +28.5 +28.5 +28.5 +28.5 +28.5 +28.625 +28.5 +28.375 +28.25 +28.25 +27.875 +28.5 +27.75 +27.875 +27.625 +27.375 +27.0 +27.0 +26.25 +25.875 +25.5 +25.0 +24.5 +23.75 +23.25 +22.625 +22.625 +22.0 +22.0 +21.5 +21.375 +20.875 +20.375 +20.125 +19.75 +19.5 +19.125 +18.75 +18.375 +18.0 +17.75 +17.625 +17.25 +16.875 +16.75 +16.375 +16.125 +16.0 +15.6875 +15.25 +15.25 +15.0625 +14.5625 +14.5625 +14.25 +14.0 +13.8125 +13.5 +13.5 +13.0625 +12.875 +12.6875 +12.5625 +12.25 +12.125 +12.0 +11.8125 +11.6875 +11.4375 +11.25 +11.125 +10.9375 +10.875 +10.5625 +10.5 +10.25 +9.9375 +9.8125 +9.875 +10.0625 +12.4375 +10.625 +9.625 +10.625 +9.625 +9.9375 +9.75 +9.25 +9.5625 +8.9375 +9.3125 +9.125 +8.875 +9.0625 +8.625 +8.625 +8.75 +8.5 +8.375 +8.5 +8.3125 +8.3125 +8.25 +8.1875 +8.0625 +8.0625 +8.0625 +8.0 +7.96875 +7.84375 +7.71875 +7.78125 +7.75 +7.6875 +7.5625 +7.59375 +7.4375 +7.46875 +7.375 +7.34375 +7.3125 +7.21875 +7.09375 +7.15625 +7.09375 +7.09375 +6.96875 +6.875 +6.96875 +6.84375 +6.75 +6.6875 +6.6875 +6.6875 +6.59375 +6.625 +6.46875 +6.5 +6.40625 +6.375 +6.34375 +6.28125 +6.21875 +6.3125 +6.09375 +6.1875 +6.0625 +6.0 +6.0 +5.90625 +5.875 +5.84375 +5.84375 +5.75 +5.6875 +5.71875 +5.625 +5.625 +5.59375 +5.5 +5.5 +5.5 +5.46875 +5.3125 +5.40625 +5.3125 +5.34375 +5.25 +5.21875 +5.15625 +5.1875 +5.21875 +5.125 +5.15625 +5.15625 +5.03125 +5.0625 +5.0 +5.0 +5.03125 +4.96875 +4.9375 +4.875 +4.875 +4.90625 +4.78125 +4.75 +4.75 +4.6875 +4.75 +4.65625 +4.625 +4.65625 +4.625 +4.5625 +4.5625 +4.5 +4.625 +4.4375 +4.46875 +4.4375 +4.375 +4.375 +4.40625 +4.40625 +4.3125 +4.28125 +4.3125 +4.28125 +4.21875 +4.25 +4.21875 +4.1875 +4.15625 +4.125 +4.09375 +4.09375 +4.125 +4.125 +4.03125 +4.0 +3.921875 +3.984375 +3.96875 +3.890625 +3.828125 +3.90625 +3.875 +3.90625 +3.8125 +3.875 +3.796875 +3.796875 +3.796875 +3.734375 +3.6875 +3.765625 +3.71875 +3.625 +3.6875 +3.640625 +3.671875 +3.609375 +3.59375 +3.59375 +3.640625 +3.625 +3.578125 +3.59375 +3.5 +3.46875 +3.546875 +3.5625 +3.484375 +3.46875 +3.515625 +3.421875 +3.453125 +3.453125 +3.46875 +3.4375 +3.34375 +3.34375 +3.40625 +3.3125 +3.265625 +3.3125 +3.328125 +3.265625 +3.28125 +3.296875 +3.234375 +3.296875 +3.296875 +3.265625 +3.234375 +3.1875 +3.25 +3.21875 +3.203125 +3.25 +3.171875 +3.1875 +3.140625 +3.15625 +3.046875 +3.078125 +3.09375 +3.078125 +3.09375 +3.0625 +3.0 +3.0625 +3.078125 +3.046875 +3.015625 +3.015625 +3.0 +3.015625 +2.96875 +2.953125 +3.015625 +2.890625 +2.953125 +2.890625 +2.96875 +2.96875 +2.96875 +3.15625 +3.34375 +3.703125 +4.53125 +3.03125 +4.53125 +4.0625 +4.03125 +3.359375 +3.6875 +3.125 +3.390625 +3.3125 +3.046875 +3.21875 +2.984375 +3.03125 +3.015625 +2.953125 +2.96875 +2.921875 +2.875 +2.9375 +2.890625 +2.859375 +2.875 +2.875 +2.84375 +2.796875 +2.859375 +2.78125 +2.796875 +2.734375 +2.765625 +2.75 +2.6875 +2.8125 +2.8125 +2.765625 +2.765625 +2.71875 +2.71875 +2.6875 +2.6875 +2.75 +2.640625 +2.703125 +2.6875 +2.734375 +2.71875 +2.71875 +2.65625 +2.65625 +2.625 +2.75 +2.6875 +2.65625 +2.640625 +2.703125 +2.6875 +2.609375 +2.609375 +2.625 +2.671875 +2.65625 +2.609375 +2.640625 +2.625 +2.609375 +2.671875 +2.578125 +2.625 +2.578125 +2.640625 +2.578125 +2.578125 +2.59375 +2.625 +2.53125 +2.5625 +2.5625 +2.546875 +2.59375 +2.578125 +2.59375 +2.59375 +2.53125 +2.5625 +2.484375 +2.609375 +2.578125 +2.546875 +2.546875 +2.578125 +2.546875 +2.53125 +2.5625 +2.578125 +2.546875 +2.53125 +2.5 +2.546875 +2.5625 +2.484375 +2.53125 +2.5 +2.515625 +2.46875 +2.53125 +2.46875 +2.53125 +2.4375 +2.5 +2.5 +2.5 +2.5 +2.46875 +2.515625 +2.515625 +2.453125 +2.5 +2.421875 +2.484375 +2.515625 +2.421875 +2.46875 +2.453125 +2.453125 +2.46875 +2.421875 +2.4375 +2.40625 +2.421875 +2.4375 +2.40625 +2.4375 +2.46875 +2.5 +2.421875 +2.390625 +2.421875 +2.40625 +2.421875 +2.375 +2.390625 +2.40625 +2.40625 +2.359375 +2.421875 +2.4375 +2.34375 +2.359375 +2.375 +2.390625 +2.328125 +2.421875 +2.375 +2.375 +2.34375 +2.3125 +2.375 +2.359375 +2.34375 +2.359375 +2.28125 +2.34375 +2.28125 +2.34375 +2.359375 +2.34375 +2.3125 +2.3125 +2.328125 +2.359375 +2.28125 +2.296875 +2.25 +2.28125 +2.25 +2.28125 +2.265625 +2.28125 +2.28125 +2.25 +2.296875 +2.265625 +2.265625 +2.265625 +2.25 +2.265625 +2.21875 +2.1875 +2.21875 +2.28125 +2.28125 +2.265625 +2.1875 +2.234375 +2.171875 +2.25 +2.21875 +2.203125 +2.21875 +2.1875 +2.21875 +2.1875 +2.203125 +2.15625 +2.140625 +2.1875 +2.109375 +2.1875 +2.171875 +2.15625 +2.203125 +2.1875 +2.171875 +2.1875 +2.125 +2.1875 +2.171875 +2.171875 +2.15625 +2.125 +2.15625 +2.046875 +2.125 +2.125 +2.15625 +2.15625 +2.171875 +2.09375 +2.109375 +2.140625 +2.140625 +2.109375 +2.09375 +2.125 +2.171875 +2.140625 +2.109375 +2.078125 +2.0625 +2.125 +2.0625 +2.0625 +2.078125 +2.015625 +2.0625 +2.09375 +2.0 +2.0625 +2.046875 +2.078125 +2.015625 +2.046875 +2.0625 +2.078125 +2.0 +2.078125 +2.015625 +2.046875 +2.015625 +2.03125 +2.015625 +2.03125 +2.015625 +2.0625 +2.078125 +1.984375 +1.984375 +2.03125 +2.03125 +2.03125 +2.015625 +1.984375 +2.03125 +1.9921875 +2.0 +2.0 +2.0 +2.046875 +1.984375 +2.03125 +2.03125 +1.9375 +2.03125 +2.0 +1.9609375 +1.9609375 +1.9609375 +1.953125 +1.9296875 +1.953125 +1.96875 +1.96875 +1.9296875 +1.9140625 +1.984375 +1.921875 +1.9609375 +2.015625 +1.9375 +1.96875 +1.9375 +1.921875 +1.921875 +1.9296875 +1.9140625 +1.9453125 +1.921875 +1.8828125 +1.8828125 +1.9453125 +1.9453125 +1.890625 +1.9375 +1.9140625 +1.953125 +1.890625 +1.9453125 +1.921875 +1.921875 +1.90625 +1.8984375 +1.90625 +1.8515625 +1.9296875 +1.921875 +1.859375 +1.8984375 +1.8671875 +1.8984375 +1.921875 +1.8984375 +1.890625 +1.9375 +1.875 +1.890625 +1.890625 +1.890625 +1.828125 +1.90625 +1.8515625 +1.8984375 +1.8671875 +1.8515625 +1.8984375 +1.8984375 +1.84375 +1.84375 +1.859375 +1.8671875 +1.859375 +1.8359375 +1.8515625 +1.8125 +1.859375 +1.828125 +1.8984375 +1.8359375 +1.875 +1.8828125 +1.828125 +1.875 +1.8515625 +1.84375 +1.828125 +1.8203125 +1.8203125 +1.84375 +1.859375 +1.859375 +1.859375 +1.8046875 +1.828125 +1.84375 +1.7890625 +1.8046875 +1.8203125 +1.828125 +1.7890625 +1.796875 +1.8515625 +1.84375 +1.8203125 +1.828125 +1.796875 +1.8515625 +1.78125 +1.84375 +1.8203125 +1.78125 +1.8125 +1.8046875 +1.8203125 +1.8359375 +1.7734375 +1.7578125 +1.7265625 +1.765625 +1.84375 +1.8046875 +1.765625 +1.765625 +1.796875 +1.734375 +1.8125 +1.8046875 +1.796875 +1.78125 +1.7421875 +1.7734375 +1.78125 +1.7421875 +1.765625 +1.7734375 +1.75 +1.765625 +1.71875 +1.7890625 +1.7578125 +1.6875 +1.734375 +1.765625 +1.734375 +1.71875 +1.7890625 +1.7109375 +1.734375 +1.6875 +1.71875 +1.765625 +1.78125 +1.7109375 +1.703125 +1.7578125 +1.7265625 +1.734375 +1.7421875 +1.7109375 +1.6953125 +1.6796875 +1.6953125 +1.71875 +1.703125 +1.7265625 +1.6953125 +1.6875 +1.7265625 +1.7265625 +1.7265625 +1.7421875 +1.703125 +1.703125 +1.765625 +1.7421875 +1.6796875 +1.6796875 +1.6640625 +1.6875 +1.6875 +1.7265625 +1.6953125 +1.6484375 +1.6796875 +1.703125 +1.703125 +1.6484375 +1.703125 +1.6796875 +1.671875 +1.734375 +1.7109375 +1.6484375 +1.6796875 +1.6875 +1.6875 +1.8203125 +2.234375 +2.1875 +2.09375 +1.890625 +2.78125 +2.640625 +2.5 +2.515625 +2.3125 +2.109375 +2.359375 +2.171875 +2.21875 +2.109375 +1.921875 +2.015625 +1.9921875 +1.875 +1.8984375 +1.953125 +1.859375 +1.8125 +1.8359375 +1.765625 +1.7578125 +1.7890625 +1.7734375 +1.7578125 +1.8046875 +1.7578125 +1.71875 +1.7109375 +1.7265625 +1.703125 +1.6953125 +1.6640625 +1.703125 +1.6484375 +1.6875 +1.6953125 +1.6953125 +1.6640625 +1.6328125 +1.671875 +1.6484375 +1.6875 +1.6328125 +1.640625 +1.6640625 +1.671875 +1.65625 +1.6328125 +1.578125 +1.640625 +1.65625 +1.609375 +1.6171875 +1.5703125 +1.6484375 +1.65625 +1.625 +1.5859375 +1.625 +1.5859375 +1.640625 +1.5625 +1.625 +1.6171875 +1.59375 +1.6015625 +1.5625 +1.6015625 +1.578125 +1.59375 +1.53125 +1.6015625 +1.578125 +1.5703125 +1.5703125 +1.6015625 +1.6015625 +1.5625 +1.5859375 +1.6015625 +1.5703125 +1.546875 +1.5625 +1.5390625 +1.59375 +1.625 +1.546875 +1.6015625 +1.5234375 +1.546875 +1.5390625 +1.53125 +1.5625 +1.5078125 +1.546875 +1.546875 +1.5625 +1.5546875 +1.5390625 +1.546875 +1.5234375 +1.5859375 +1.546875 +1.53125 +1.5859375 +1.515625 +1.5625 +1.5625 +1.578125 +1.5625 +1.6171875 +1.4921875 +1.546875 +1.5234375 +1.5234375 +1.5546875 +1.5625 +1.53125 +1.515625 +1.546875 +1.5234375 +1.59375 +1.515625 +1.5703125 +1.515625 +1.5078125 +1.5625 +1.546875 +1.5390625 +1.515625 +1.515625 +1.53125 +1.5625 +1.546875 +1.53125 +1.5 +1.5 +1.5234375 +1.546875 +1.515625 +1.4765625 +1.5234375 +1.515625 +1.5234375 +1.5625 +1.515625 +1.5625 +1.4921875 +1.5390625 +1.4921875 +1.515625 +1.5078125 +1.53125 +1.5 +1.546875 +1.4921875 +1.515625 +1.546875 +1.546875 +1.5234375 +1.5 +1.5 +1.4609375 +1.453125 +1.4921875 +1.5 +1.5078125 +1.484375 +1.5390625 +1.5078125 +1.5234375 +1.5078125 +1.53125 +1.515625 +1.4765625 +1.53125 +1.46875 +1.5078125 +1.5 +1.515625 +1.46875 +1.5078125 +1.484375 +1.4609375 +1.46875 +1.5234375 +1.53125 +1.5078125 +1.4765625 +1.4921875 +1.4765625 +1.515625 +1.515625 +1.5 +1.484375 +1.4609375 +1.484375 +1.515625 +1.484375 +1.484375 +1.46875 +1.4921875 +1.484375 +1.453125 +1.4921875 +1.4921875 +1.453125 +1.4921875 +1.4921875 +1.46875 +1.4375 +1.453125 +1.453125 +1.484375 +1.4453125 +1.4609375 +1.46875 +1.4609375 +1.4765625 +1.453125 +1.4765625 +1.4375 +1.4921875 +1.46875 +1.4609375 +1.421875 +1.46875 +1.453125 +1.4296875 +1.4453125 +1.4296875 +1.4609375 +1.453125 +1.4609375 +1.4296875 +1.4765625 +1.421875 +1.390625 +1.46875 +1.4609375 +1.4375 +1.421875 +1.4765625 +1.421875 +1.453125 +1.4375 +1.4765625 +1.453125 +1.3828125 +1.46875 +1.453125 +1.453125 +1.4296875 +1.46875 +1.421875 +1.421875 +1.4375 +1.4375 +1.40625 +1.4609375 +1.4609375 +1.4375 +1.4140625 +1.4296875 +1.40625 +1.4296875 +1.4609375 +1.4375 +1.453125 +1.421875 +1.421875 +1.4140625 +1.4296875 +1.4140625 +1.421875 +1.421875 +1.4453125 +1.40625 +1.421875 +1.390625 +1.40625 +1.40625 +1.390625 +1.3984375 +1.4140625 +1.4375 +1.359375 +1.40625 +1.4296875 +1.453125 +1.3984375 +1.4140625 +1.3984375 +1.3828125 +1.4375 +1.421875 +1.421875 +1.40625 +1.390625 +1.3984375 +1.40625 +1.40625 +1.4453125 +1.4140625 +1.375 +1.3984375 +1.3515625 +1.375 +1.3984375 +1.390625 +1.421875 +1.3828125 +1.3984375 +1.4140625 +1.4140625 +1.390625 +1.390625 +1.3828125 +1.3984375 +1.3984375 +1.375 +1.375 +1.359375 +1.359375 +1.3984375 +1.4140625 +1.375 +1.359375 +1.3359375 +1.3828125 +1.375 +1.375 +1.3359375 +1.3828125 +1.3671875 +1.3671875 +1.390625 +1.375 +1.3828125 +1.34375 +1.3828125 +1.3984375 +1.3828125 +1.390625 +1.3828125 +1.359375 +1.359375 +1.359375 +1.3515625 +1.3671875 +1.3515625 +1.34375 +1.3671875 +1.3515625 +1.359375 +1.3828125 +1.359375 +1.359375 +1.3671875 +1.34375 +1.359375 +1.3046875 +1.375 +1.34375 +1.328125 +1.328125 +1.328125 +1.3671875 +1.359375 +1.3515625 +1.34375 +1.328125 +1.3125 +1.3828125 +1.3359375 +1.3125 +1.3359375 +1.3515625 +1.3671875 +1.328125 +1.34375 +1.3203125 +1.34375 +1.359375 +1.328125 +1.3125 +1.34375 +1.34375 +1.34375 +1.359375 +1.3515625 +1.375 +1.3515625 +1.3515625 +1.328125 +1.3671875 +1.375 +1.328125 +1.3828125 +1.296875 +1.359375 +1.3125 +1.3515625 +1.3046875 +1.359375 +1.328125 +1.3359375 +1.34375 +1.4296875 +1.3125 +1.34375 +1.375 +1.328125 +1.3515625 +1.296875 +1.3125 +1.2890625 +1.3125 +1.3125 +1.2890625 +1.328125 +1.34375 +1.3125 +1.3359375 +1.3046875 +1.3046875 +1.296875 +1.296875 +1.3515625 +1.28125 +1.2890625 +1.2890625 +1.296875 +1.2890625 +1.34375 +1.3203125 +1.2890625 +1.3046875 +1.3203125 +1.3203125 +1.265625 +1.3046875 +1.3125 +1.3046875 +1.328125 +1.2890625 +1.2734375 +1.2890625 +1.28125 +1.296875 +1.296875 +1.3125 +1.296875 +1.3203125 +1.2890625 +1.296875 +1.3046875 +1.28125 +1.3046875 +1.296875 +1.3125 +1.3203125 +1.3046875 +1.28125 +1.2890625 +1.296875 +1.3046875 +1.3125 +1.265625 +1.3125 +1.328125 +1.3125 +1.2421875 +1.2734375 +1.2890625 +1.296875 +1.2890625 +1.265625 +1.25 +1.296875 +1.234375 +1.265625 +1.2890625 +1.2578125 +1.28125 +1.3046875 +1.2578125 +1.2578125 +1.2890625 +1.234375 +1.2421875 +1.28125 +1.2890625 +1.2734375 +1.25 +1.296875 +1.2734375 +1.265625 +1.28125 +1.265625 +1.2734375 +1.2890625 +1.21875 +1.2421875 +1.3046875 +1.265625 +1.3359375 +1.2890625 +1.2578125 +1.265625 +1.25 +1.28125 +1.2109375 +1.265625 +1.2421875 +1.2265625 +1.21875 +1.2734375 +1.2890625 +1.2578125 +1.2265625 +1.2265625 +1.2265625 +1.2578125 +1.21875 +1.25 +1.234375 +1.21875 +1.2734375 +1.2265625 +1.25 +1.25 +1.234375 +1.1875 +1.2421875 +1.2265625 +1.265625 +1.3515625 +1.25 +1.28125 +1.3046875 +1.2265625 +1.2421875 +1.25 +1.265625 +1.34375 +1.5234375 +1.3046875 +1.40625 +1.4453125 +1.3125 +1.3046875 +1.4296875 +1.359375 +1.375 +1.2578125 +1.3046875 +1.2890625 +1.28125 +1.2890625 +1.296875 +1.234375 +1.2578125 +1.25 +1.2734375 +1.21875 +1.234375 +1.234375 +1.25 +1.265625 +1.2265625 +1.2421875 +1.1796875 +1.203125 +1.203125 +1.1953125 +1.1953125 +1.21875 +1.2109375 +1.21875 +1.21875 +1.1875 +1.1953125 +1.203125 +1.25 +1.1953125 +1.1484375 +1.2265625 +1.21875 +1.1796875 +1.21875 +1.2109375 +1.2265625 +1.1953125 +1.2265625 +1.1640625 +1.1875 +1.2109375 +1.1796875 +1.171875 +1.1875 +1.1640625 +1.1640625 +1.1640625 +1.1640625 +1.15625 +1.1640625 +1.2109375 +1.171875 +1.1796875 +1.1796875 +1.1796875 +1.21875 +1.15625 +1.1796875 +1.1796875 +1.1640625 +1.1953125 +1.171875 +1.15625 +1.203125 +1.171875 +1.1796875 +1.1796875 +1.171875 +1.1796875 +1.1796875 +1.1640625 +1.1640625 +1.1640625 +1.15625 +1.15625 +1.1484375 +1.1796875 +1.1640625 +1.1328125 +1.1640625 +1.171875 +1.15625 +1.1640625 +1.1796875 +1.1640625 +1.125 +1.109375 +1.171875 +1.15625 +1.1328125 +1.1328125 +1.1328125 +1.171875 +1.140625 +1.1484375 +1.1484375 +1.15625 +1.171875 +1.1171875 +1.1796875 +1.1484375 +1.1796875 +1.1875 +1.1171875 +1.1640625 +1.140625 +1.1484375 +1.125 +1.1484375 +1.1484375 +1.15625 +1.140625 +1.15625 +1.125 +1.140625 +1.15625 +1.1328125 +1.1015625 +1.1328125 +1.15625 +1.1484375 +1.1484375 +1.15625 +1.1328125 +1.140625 +1.140625 +1.109375 +1.125 +1.140625 +1.1328125 +1.1015625 +1.1484375 +1.109375 +1.1484375 +1.1171875 +1.15625 +1.1171875 +1.1171875 +1.1171875 +1.1171875 +1.109375 +1.171875 +1.1484375 +1.1328125 +1.125 +1.1171875 +1.109375 +1.1171875 +1.09375 +1.125 +1.140625 +1.09375 +1.15625 +1.109375 +1.1171875 +1.125 +1.1015625 +1.1171875 +1.1328125 +1.1015625 +1.1328125 +1.125 +1.125 +1.1484375 +1.09375 +1.15625 +1.1015625 +1.1171875 +1.140625 +1.1171875 +1.125 +1.109375 +1.09375 +1.1328125 +1.125 +1.1171875 +1.1875 +1.28125 +1.125 +1.1640625 +1.2734375 +1.265625 +1.40625 +1.515625 +1.234375 +1.375 +1.34375 +1.1796875 +1.234375 +1.1875 +1.1953125 +1.1328125 +1.140625 +1.1484375 +1.1484375 +1.1171875 +1.125 +1.125 +1.125 +1.0859375 +1.125 +1.1640625 +1.1171875 +1.1640625 +1.09375 +1.125 +1.1171875 +1.09375 +1.0859375 +1.09375 +1.125 +1.09375 +1.0546875 +1.1015625 +1.078125 +1.078125 +1.1015625 +1.078125 +1.0546875 +1.0859375 +1.0625 +1.0703125 +1.0703125 +1.0625 +1.0546875 +1.078125 +1.0390625 +1.0703125 +1.078125 +1.0625 +1.078125 +1.0546875 +1.078125 +1.078125 +1.078125 +1.0859375 +1.078125 +1.078125 +1.0625 +1.0625 +1.0546875 +1.0625 +1.0625 +1.046875 +1.0625 +1.0703125 +1.0703125 +1.0703125 +1.0703125 +1.109375 +1.0859375 +1.0625 +1.0390625 +1.0703125 +1.046875 +1.0390625 +1.09375 +1.09375 +1.0703125 +1.046875 +1.09375 +1.0703125 +1.0546875 +1.0625 +1.03125 +1.0625 +1.03125 +1.0546875 +1.09375 +1.046875 +1.0390625 +1.0625 +1.046875 +1.0390625 +1.078125 +1.0390625 +1.03125 +1.046875 +1.0546875 +1.0390625 +1.0546875 +1.0390625 +1.0390625 +1.0546875 +1.0546875 +1.0625 +1.0234375 +1.0 +1.0703125 +1.0546875 +1.0546875 +1.0625 +1.0546875 +1.0625 +1.0625 +1.0234375 +1.0390625 +1.046875 +1.015625 +1.0703125 +1.046875 +1.0390625 +1.046875 +1.0703125 +1.0546875 +1.0390625 +1.046875 +1.0234375 +0.99609375 +1.0234375 +1.046875 +1.0390625 +1.046875 +1.0390625 +1.0234375 +1.015625 +1.0703125 +0.984375 +1.0546875 +1.015625 +1.0390625 +1.0 +1.046875 +1.0546875 +1.0078125 +1.0390625 +1.0625 +1.046875 +1.078125 +1.0390625 +1.03125 +1.015625 +1.0546875 +1.03125 +1.03125 +1.0390625 +1.0078125 +1.0078125 +1.0546875 +1.046875 +1.046875 +1.0078125 +1.015625 +1.0546875 +1.015625 +1.0234375 +1.03125 +1.0625 +1.015625 +1.0078125 +1.0234375 +1.046875 +0.984375 +1.0 +1.0078125 +1.0234375 +1.0078125 +1.015625 +1.0546875 +1.0390625 +1.015625 +1.046875 +1.0078125 +1.0234375 +1.0 +0.98828125 +1.015625 +1.0078125 +0.99609375 +1.015625 +1.03125 +1.0390625 +1.015625 +1.0234375 +1.0390625 +1.0390625 +1.03125 +1.03125 +1.0234375 +1.0078125 +1.015625 +1.015625 +1.0078125 +0.98828125 +1.03125 +1.0390625 +0.96875 +1.046875 +1.0 +1.046875 +1.015625 +0.99609375 +1.03125 +1.0078125 +1.015625 +0.99609375 +1.015625 +1.0 +1.0078125 +1.015625 +1.0 +1.0 +0.984375 +1.0234375 +1.046875 +1.1796875 +1.0390625 +1.0703125 +1.015625 +1.03125 +1.046875 +1.0546875 +1.046875 +1.0859375 +0.9921875 +1.015625 +1.015625 +1.0390625 +1.078125 +1.03125 +1.0625 +1.046875 +1.0625 +1.046875 +1.0234375 +1.0390625 +1.0390625 +1.03125 +1.0390625 +1.0078125 +0.98046875 +0.984375 +0.9765625 +1.0078125 +0.9921875 +0.98828125 +1.0078125 +0.9921875 +0.99609375 +0.984375 +0.99609375 +1.015625 +0.984375 +1.0078125 +0.98828125 +1.0078125 +0.99609375 +0.984375 +0.9921875 +0.953125 +1.0078125 +0.9765625 +0.96875 +0.96484375 +0.9765625 +1.0 +0.9921875 +0.9921875 +0.98046875 +1.0078125 +0.9453125 +0.94921875 +1.0078125 +0.96875 +0.98828125 +0.96484375 +0.95703125 +1.0078125 +0.9765625 +0.98828125 +0.9765625 +1.015625 +0.984375 +0.9921875 +0.9609375 +0.98046875 +0.99609375 +0.97265625 +0.99609375 +0.9765625 +0.99609375 +0.98046875 +1.0078125 +0.96875 +0.96875 +0.9765625 +0.9765625 +0.98046875 +1.0 +0.96875 +0.96875 +0.99609375 +0.953125 +0.96875 +0.96484375 +0.96484375 +1.0 +0.99609375 +1.0078125 +0.95703125 +0.95703125 +0.95703125 +0.984375 +0.98046875 +0.96875 +0.921875 +0.97265625 +0.97265625 +0.94921875 +1.0390625 +0.98828125 +0.95703125 +0.99609375 +0.98046875 +0.96875 +0.984375 +0.97265625 +0.9921875 +0.9765625 +0.9921875 +0.9921875 +0.984375 +0.9765625 +0.98828125 +0.984375 +0.9921875 +0.98046875 +0.9609375 +0.94921875 +0.96875 +0.95703125 +0.97265625 +0.95703125 +0.95703125 +0.97265625 +1.0234375 +0.953125 +0.9609375 +0.9140625 +0.91015625 +0.9765625 +0.98828125 +0.94140625 +1.0 +0.9453125 +1.0 +1.0546875 +0.984375 +1.0546875 +1.0234375 +0.98828125 +1.03125 +1.0390625 +0.9921875 +0.95703125 +0.93359375 +1.0078125 +1.015625 +0.9609375 +0.95703125 +0.96484375 +0.98046875 +0.98046875 +0.9375 +0.9453125 +0.953125 +0.96484375 +0.9609375 +0.96875 +0.9140625 +0.91796875 +0.9296875 +0.9453125 +0.9609375 +0.90625 +0.95703125 +0.94921875 +0.9140625 +0.9375 +0.9609375 +0.9296875 +0.95703125 +0.9453125 +0.96875 +0.91015625 +0.921875 +0.921875 +0.97265625 +0.94921875 +0.9296875 +0.91796875 +0.92578125 +0.90625 +0.921875 +0.89453125 +0.9375 +0.91796875 +0.953125 +0.94140625 +0.9453125 +0.9453125 +0.9140625 +0.9609375 +0.9296875 +0.92578125 +0.953125 +0.9140625 +0.94921875 +0.91796875 +0.91015625 +0.90234375 +0.921875 +0.9296875 +0.91015625 +0.9609375 +0.92578125 +0.90625 +0.92578125 +0.9296875 +0.90625 +0.9296875 +0.9375 +0.9453125 +0.94140625 +0.9453125 +0.9140625 +0.91796875 +0.8984375 +0.9296875 +0.92578125 +0.9453125 +0.93359375 +0.921875 +0.9375 +0.90234375 +0.91015625 +0.91796875 +0.94140625 +0.921875 +0.93359375 +0.90625 +0.92578125 +0.93359375 +0.91796875 +0.9375 +0.94140625 +0.92578125 +0.91796875 +0.9140625 +0.8828125 +0.89453125 +0.91015625 +0.90234375 +0.91015625 +0.92578125 +0.87109375 +0.90234375 +0.91015625 +0.90625 +0.88671875 +0.94921875 +0.9140625 +0.91015625 +0.97265625 +0.9140625 +0.91015625 +0.94140625 +0.921875 +0.9296875 +0.890625 +0.91796875 +0.93359375 +0.89453125 +0.90234375 +0.9140625 +0.921875 +0.90625 +0.88671875 +0.92578125 +0.9140625 +0.9375 +0.90234375 +0.89453125 +0.9296875 +0.9375 +0.921875 +0.9375 +0.8984375 +0.90234375 +0.890625 +0.8984375 +0.90234375 +0.91015625 +0.8828125 +0.9296875 +0.91796875 +0.90234375 +0.9140625 +0.8828125 +0.9296875 +0.93359375 +0.8828125 +0.9140625 +0.91015625 +0.92578125 +0.9375 +0.9375 +0.921875 +0.9140625 +0.921875 +0.89453125 +0.9140625 +0.85546875 +0.91015625 +0.91015625 +0.90625 +0.921875 +0.8984375 +0.921875 +0.89453125 +0.9375 +0.890625 +0.90234375 +0.890625 +0.87890625 +0.890625 +0.8984375 +0.91015625 +0.91015625 +0.90234375 +0.90234375 +0.890625 +0.90625 +0.890625 +0.9140625 +0.90234375 +0.8671875 +0.91015625 +0.87890625 +0.8984375 +0.88671875 +0.87109375 +0.91015625 +0.8984375 +0.91796875 +0.92578125 +0.89453125 +0.89453125 +0.90625 +0.88671875 +0.91796875 +0.9140625 +0.890625 +1.109375 +1.9765625 +1.4453125 +1.0859375 +1.3515625 +1.484375 +1.453125 +1.1875 +1.4765625 +1.2109375 +1.34375 +1.1640625 +1.296875 +1.15625 +1.3125 +1.2421875 +1.296875 +1.125 +1.1875 +1.203125 +1.0859375 +1.1875 +1.125 +1.0390625 +1.09375 +1.046875 +1.109375 +0.99609375 +1.046875 +1.0546875 +1.0078125 +0.99609375 +0.9921875 +0.9375 +0.953125 +0.9609375 +0.96875 +0.9453125 +0.94921875 +0.96484375 +0.9375 +0.96875 +0.92578125 +0.91015625 +0.9296875 +0.91015625 +0.94140625 +0.90625 +0.953125 +0.921875 +0.890625 +0.89453125 +0.89453125 +0.9296875 +0.8828125 +0.86328125 +0.90625 +0.921875 +0.8828125 +0.90234375 +0.87890625 +0.87109375 +0.89453125 +0.875 +0.9140625 +0.8828125 +0.8671875 +0.8984375 +0.88671875 +0.8984375 +0.88671875 +0.8828125 +0.8515625 +0.875 +0.86328125 +0.86328125 +0.859375 +0.8671875 +0.875 +0.875 +0.86328125 +0.84375 +0.859375 +0.87109375 +0.86328125 +0.87109375 +0.890625 +0.87890625 +0.87109375 +0.875 +0.91015625 +0.86328125 +0.87890625 +0.84375 +0.875 +0.890625 +0.87890625 +0.875 +0.87109375 +0.87890625 +0.8828125 +0.86328125 +0.87109375 +0.859375 +0.83203125 +0.83984375 +0.86328125 +0.87109375 +0.84375 +0.8828125 +0.8828125 +0.86328125 +0.8671875 +0.84375 +0.86328125 +0.86328125 +0.85546875 +0.86328125 +0.8359375 +0.875 +0.86328125 +0.8828125 +0.85546875 +0.86328125 +0.8671875 +0.85546875 +0.8125 +0.875 +0.84765625 +0.859375 +0.8828125 +0.85546875 +0.8515625 +0.875 +0.8671875 +0.86328125 +0.8828125 +0.84765625 +0.83203125 +0.83984375 +0.86328125 +0.859375 +0.88671875 +0.859375 +0.83984375 +0.84375 +0.84375 +0.84375 +0.84765625 +0.87890625 +0.8515625 +0.8515625 +0.8125 +0.8515625 +0.8671875 +0.859375 +0.8515625 +0.84765625 +0.85546875 +0.8671875 +0.828125 +0.87109375 +0.875 +0.875 +0.8203125 +0.84375 +0.84375 +0.84765625 +0.84375 +0.84375 +0.84375 +0.8359375 +0.87109375 +0.859375 +0.86328125 +0.859375 +0.8984375 +0.84765625 +0.8515625 +0.8203125 +0.875 +0.86328125 +0.83984375 +0.83984375 +0.859375 +0.8515625 +0.8203125 +0.84375 +0.86328125 +0.875 +0.8515625 +0.83984375 +0.82421875 +0.82421875 +0.8203125 +0.859375 +0.83984375 +0.8671875 +0.8515625 +0.83984375 +0.84375 +0.83203125 +0.8671875 +0.8515625 +0.86328125 +0.84765625 +0.84375 +0.8515625 +0.859375 +0.84765625 +0.83203125 +0.8125 +0.84375 +0.84375 +0.84765625 +0.8515625 +0.828125 +0.86328125 +0.875 +0.875 +0.87890625 +0.84765625 +0.8515625 +0.8828125 +0.8515625 +0.8203125 +0.8359375 +0.8359375 +0.83203125 +0.83203125 +0.8203125 +0.81640625 +0.84765625 +0.80859375 +0.8359375 +0.8125 +0.82421875 +0.8671875 +0.83203125 +0.80078125 +0.81640625 +0.8046875 +0.8203125 +0.828125 +0.85546875 +0.83984375 +0.82421875 +0.81640625 +0.8359375 +0.8515625 +0.8515625 +0.859375 +0.859375 +0.83203125 +0.84375 +0.8359375 +0.828125 +0.81640625 +0.83203125 +0.84765625 +0.80078125 +0.8515625 +0.79296875 +0.85546875 +0.828125 +0.8359375 +0.80859375 +0.8046875 +0.84375 +0.82421875 +0.8046875 +0.8203125 +0.80859375 +0.85546875 +0.8046875 +0.80859375 +0.83203125 +0.81640625 +0.8515625 +0.80859375 +0.828125 +0.83203125 +0.8046875 +0.83203125 +0.81640625 +0.83203125 +0.8359375 +0.796875 +0.79296875 +0.82421875 +0.84375 +0.83203125 +0.8203125 +0.82421875 +0.81640625 +0.796875 +0.8046875 +0.8203125 +0.81640625 +0.8046875 +0.8359375 +0.8359375 +0.8125 +0.8203125 +0.83203125 +0.82421875 +0.828125 +0.8203125 +0.828125 +0.8125 +0.796875 +0.8203125 +0.8046875 +0.80859375 +0.80859375 +0.79296875 +0.84375 +0.84375 +0.8203125 +0.84375 +0.83203125 +0.8203125 +0.83203125 +0.8125 +0.80078125 +0.82421875 +0.8125 +0.78125 +0.81640625 +0.80078125 +0.81640625 +0.80859375 +0.7734375 +0.8125 +0.80078125 +0.78515625 +0.8203125 +0.84375 +0.83984375 +0.83984375 +0.84375 +0.83203125 +0.8203125 +0.8125 +0.828125 +0.78515625 +0.8125 +0.82421875 +0.796875 +0.80078125 +0.83203125 +0.8125 +0.79296875 +0.78125 +0.81640625 +0.8203125 +0.8125 +0.796875 +0.78515625 +0.8125 +0.80859375 +0.82421875 +0.796875 +0.8203125 +0.79296875 +0.7734375 +0.81640625 +0.78125 +0.8125 +0.82421875 +0.8359375 +0.80859375 +0.81640625 +0.81640625 +0.8203125 +0.81640625 +0.80859375 +0.796875 +0.8046875 +0.8046875 +0.80078125 +0.796875 +0.8125 +0.80078125 +0.7734375 +0.79296875 +0.796875 +0.81640625 +0.79296875 +0.78125 +0.8203125 +0.80078125 +0.80078125 +0.82421875 +0.78515625 +0.8046875 +0.79296875 +0.81640625 +0.81640625 +0.80859375 +0.8125 +0.8125 +0.8046875 +0.80859375 +0.8359375 +0.84375 +0.8046875 +0.7890625 +0.8359375 +0.81640625 +0.8203125 +0.8125 +0.80078125 +0.80078125 +0.8125 +0.78125 +0.79296875 +0.7890625 +0.80078125 +0.78125 +0.7890625 +0.79296875 +0.796875 +0.8046875 +0.80859375 +0.7890625 +0.80078125 +0.8203125 +0.7890625 +0.79296875 +0.77734375 +0.79296875 +0.78515625 +0.77734375 +0.82421875 +0.80859375 +0.76953125 +0.79296875 +0.80859375 +0.796875 +0.8125 +0.80078125 +0.8203125 +0.828125 +0.8046875 +0.81640625 +0.796875 +0.77734375 +0.8203125 +0.8046875 +0.796875 +0.7890625 +0.78515625 +0.79296875 +0.765625 +0.82421875 +0.83984375 +0.77734375 +0.76953125 +0.79296875 +0.796875 +0.79296875 +0.79296875 +0.77734375 +0.79296875 +0.79296875 +0.7890625 +0.80859375 +0.796875 +0.80078125 +0.78125 +0.78515625 +0.80859375 +0.78515625 +0.80078125 +0.7890625 +0.80859375 +0.796875 +0.78125 +0.77734375 +0.78125 +0.80859375 +0.79296875 +0.8125 +0.8203125 +0.796875 +0.76953125 +0.80078125 +0.7890625 +0.796875 +0.796875 +0.78515625 +0.78515625 +0.79296875 +0.78125 +0.78515625 +0.80078125 +0.7890625 +0.7890625 +0.80078125 +0.78515625 +0.76171875 +0.78125 +0.79296875 +0.8125 +0.78515625 +0.7890625 +0.83203125 +0.75 +0.77734375 +0.78515625 +0.7734375 +0.78515625 +0.7890625 +0.796875 +0.7734375 +0.7734375 +0.78515625 +0.7734375 +0.7890625 +0.796875 +0.7890625 +0.79296875 +0.79296875 +0.79296875 +0.8046875 +0.7890625 +0.77734375 +0.796875 +0.7578125 +0.8046875 +0.78515625 +0.7890625 +0.79296875 +0.7734375 +0.7890625 +0.7734375 +0.7734375 +0.80859375 +0.80078125 +0.7734375 +0.78515625 +0.796875 +0.78515625 +0.78515625 +0.7734375 +0.7890625 +0.78125 +0.76953125 +0.79296875 +0.8046875 +0.7890625 +0.75 +0.765625 +0.80078125 +0.7890625 +0.8125 +0.78125 +0.7890625 +0.78125 +0.78515625 +0.78125 +0.7578125 +0.77734375 +0.8203125 +0.7578125 +0.77734375 +0.76171875 +0.765625 +0.79296875 +0.79296875 +0.77734375 +0.80859375 +0.77734375 +0.75390625 +0.75390625 +0.796875 +0.765625 +0.796875 +0.79296875 +0.83984375 +0.84375 +0.75390625 +0.93359375 +1.265625 +0.92578125 +0.85546875 +0.96484375 +0.890625 +0.8125 +0.859375 +0.8984375 +0.86328125 +0.82421875 +0.83984375 +0.8359375 +0.81640625 +0.80078125 +0.796875 +0.8203125 +0.81640625 +0.78515625 +0.78125 +0.796875 +0.81640625 +0.79296875 +0.8046875 +0.77734375 +0.78515625 +0.796875 +0.78125 +0.77734375 +0.8046875 +0.765625 +0.80078125 +0.7890625 +0.76171875 +0.7890625 +0.78125 +0.78125 +0.7421875 +0.79296875 +0.78125 +0.77734375 +0.79296875 +0.76953125 +0.7578125 +0.765625 +0.78125 +0.77734375 +0.7578125 +0.765625 +0.76171875 +0.75 +0.8203125 +0.765625 +0.76171875 +0.7734375 +0.8046875 +0.78125 +0.74609375 +0.7421875 +0.74609375 +0.734375 +0.796875 +0.76953125 +0.73046875 +0.78125 +0.75 +0.76953125 +0.76953125 +0.7578125 +0.796875 +0.7578125 +0.8046875 +0.7578125 +0.76171875 +0.77734375 +0.73046875 +0.765625 +0.77734375 +0.74609375 +0.76953125 +0.7734375 +0.765625 +0.76953125 +0.78515625 +0.7578125 +0.7421875 +0.765625 +0.7578125 +0.73828125 +0.74609375 +0.74609375 +0.77734375 +0.77734375 +0.75390625 +0.78125 +0.76171875 +0.7578125 +0.7734375 +0.78515625 +0.77734375 +0.75390625 +0.75390625 +0.7734375 +0.76953125 +0.76171875 +0.7578125 +0.7734375 +0.75390625 +0.76953125 +0.74609375 +0.7578125 +0.765625 +0.765625 +0.7734375 +0.7734375 +0.73828125 +0.734375 +0.7265625 +0.75 +0.7890625 +0.73828125 +0.76171875 +0.7734375 +0.765625 +0.75 +0.765625 +0.73046875 +0.765625 +0.7421875 +0.7421875 +0.78125 +0.76171875 +0.76171875 +0.74609375 +0.734375 +0.7578125 +0.76171875 +0.7578125 +0.7421875 +0.7734375 +0.75390625 +0.7578125 +0.765625 +0.75390625 +0.76953125 +0.73046875 +0.75390625 +0.7265625 +0.77734375 +0.7734375 +0.74609375 +0.75 +0.76953125 +0.75 +0.73828125 +0.78125 +0.73828125 +0.7421875 +0.7734375 +0.75390625 +0.75 +0.75390625 +0.7578125 +0.765625 +0.74609375 +0.7421875 +0.76953125 +0.75390625 +0.7421875 +0.765625 +0.78125 +0.74609375 +0.7265625 +0.7421875 +0.7578125 +0.7421875 +0.75 +0.765625 +0.734375 +0.79296875 +0.75390625 +0.76171875 +0.76171875 +0.765625 +0.75390625 +0.74609375 +0.796875 +0.77734375 +0.84375 +0.7734375 +0.78125 +0.7734375 +0.7578125 +0.77734375 +0.75 +0.71484375 +0.83203125 +0.7734375 +0.80859375 +0.80859375 +0.76171875 +0.859375 +0.75 +0.7734375 +0.76953125 +0.7734375 +0.7265625 +0.78125 +0.7421875 +0.7734375 +0.7265625 +0.83203125 +0.73046875 +0.796875 +0.734375 +0.73828125 +0.765625 +0.7734375 +0.74609375 +0.7890625 +0.75390625 +0.88671875 +0.87890625 +0.8125 +0.88671875 +0.77734375 +0.76171875 +0.73046875 +0.76171875 +0.74609375 +0.75390625 +0.73828125 +0.73828125 +0.7578125 +0.74609375 +0.77734375 +0.70703125 +0.7734375 +0.734375 +0.73046875 +0.734375 +0.7421875 +0.7578125 +0.74609375 +0.75390625 +0.7265625 +0.75 +0.734375 +0.7265625 +0.71875 +0.73828125 +0.71875 +0.765625 +0.72265625 +0.7578125 +0.7421875 +0.734375 +0.73046875 +0.765625 +0.7421875 +0.7734375 +0.734375 +0.74609375 +0.7109375 +0.734375 +0.73046875 +0.7421875 +0.70703125 +0.73828125 +0.73046875 +0.71484375 +0.7578125 +0.7265625 +0.74609375 +0.74609375 +0.734375 +0.72265625 +0.76171875 +0.73828125 +0.73828125 +0.7265625 +0.75 +0.73046875 +0.78125 +0.75 +0.71484375 +0.7421875 +0.74609375 +0.73828125 +0.734375 +0.74609375 +0.74609375 +0.7265625 +0.71484375 +0.72265625 +0.734375 +0.734375 +0.7109375 +0.74609375 +0.73828125 +0.74609375 +0.74609375 +0.75 +0.734375 +0.73046875 +0.7265625 +0.73828125 +0.73046875 +0.734375 +0.76171875 +0.7265625 +0.74609375 +0.734375 +0.71875 +0.7109375 +0.71484375 +0.72265625 +0.71484375 +0.7265625 +0.72265625 +0.734375 +0.72265625 +0.7265625 +0.75 +0.734375 +0.7421875 +0.7421875 +0.734375 +0.72265625 +0.7265625 +0.734375 +0.7578125 +0.71484375 +0.7265625 +0.75 +0.70703125 +0.75390625 +0.7421875 +0.75 +0.72265625 +0.7421875 +0.75 +0.75 +0.73046875 +0.7421875 +0.72265625 +0.72265625 +0.72265625 +0.72265625 +0.73046875 +0.73828125 +0.72265625 +0.7109375 +0.71875 +0.72265625 +0.72265625 +0.71875 +0.7109375 +0.73828125 +0.734375 +0.71875 +0.69921875 +0.7265625 +0.6875 +0.75390625 +0.734375 +0.734375 +0.71484375 +0.7265625 +0.72265625 +0.73828125 +0.71484375 +0.69921875 +0.73046875 +0.71875 +0.73828125 +0.72265625 +0.73046875 +0.71484375 +0.73046875 +0.71875 +0.70703125 +0.734375 +0.71875 +0.69140625 +0.73828125 +0.703125 +0.734375 +0.71875 +0.69921875 +0.70703125 +0.7265625 +0.69140625 +0.74609375 +0.67578125 +0.703125 +0.72265625 +0.71875 +0.70703125 +0.7109375 +0.734375 +0.7265625 +0.7109375 +0.7421875 +0.75390625 +0.7109375 +0.75390625 +0.70703125 +0.70703125 +0.7109375 +0.71484375 +0.7421875 +0.7109375 +0.71875 +0.6953125 +0.7265625 +0.7109375 +0.71875 +0.70703125 +0.72265625 +0.72265625 +0.76953125 +0.75 +0.78515625 +0.73046875 +0.859375 +1.0 +0.87109375 +0.828125 +0.74609375 +0.83984375 +0.7265625 +0.7734375 +0.7421875 +0.7734375 +0.73046875 +0.77734375 +0.7578125 +0.84375 +0.7421875 +0.79296875 +0.71875 +0.85546875 +0.73828125 +0.765625 +0.76953125 +1.0859375 +0.97265625 +0.8359375 +1.328125 +0.8046875 +0.97265625 +0.76171875 +0.93359375 +0.78515625 +0.84375 +0.8515625 +0.73828125 +0.82421875 +0.76953125 +0.81640625 +0.796875 +0.7734375 +0.796875 +0.76171875 +0.78515625 +0.7734375 +0.765625 +0.765625 +0.734375 +0.75390625 +0.73828125 +0.7265625 +0.74609375 +0.75390625 +0.7421875 +0.73046875 +0.75 +0.734375 +0.7421875 +0.7265625 +0.73046875 +0.73828125 +0.71484375 +0.70703125 +0.72265625 +0.69140625 +0.7109375 +0.72265625 +0.7265625 +0.7265625 +0.69140625 +0.703125 +0.6953125 +0.71875 +0.6953125 +0.73046875 +0.71875 +0.69921875 +0.703125 +0.7265625 +0.70703125 +0.67578125 +0.7109375 +0.7109375 +0.6875 +0.6953125 +0.6953125 +0.72265625 +0.7265625 +0.71484375 +0.6875 +0.6796875 +0.73046875 +0.69921875 +0.69921875 +0.69140625 +0.68359375 +0.72265625 +0.70703125 +0.68359375 +0.70703125 +0.69921875 +0.69140625 +0.671875 +0.6875 +0.7109375 +0.69921875 +0.7109375 +0.72265625 +0.72265625 +0.6953125 +0.68359375 +0.6796875 +0.68359375 +0.72265625 +0.68359375 +0.69140625 +0.70703125 +0.6796875 +0.71875 +0.67578125 +0.65625 +0.69140625 +0.6875 +0.703125 +0.70703125 +0.6796875 +0.67578125 +0.703125 +0.703125 +0.703125 +0.70703125 +0.7265625 +0.67578125 +0.703125 +0.703125 +0.69140625 +0.703125 +0.6875 +0.70703125 +0.73828125 +0.69140625 +0.703125 +0.70703125 +0.68359375 +0.671875 +0.69921875 +0.69140625 +0.74609375 +0.69140625 +0.68359375 +0.6796875 +0.6875 +0.73828125 +0.703125 +0.69140625 +0.69140625 +0.7109375 +0.67578125 +0.68359375 +0.70703125 +0.6953125 +0.6875 +0.72265625 +0.6875 +0.72265625 +0.71875 +0.6796875 +0.6796875 +0.69140625 +0.66015625 +0.69921875 +0.70703125 +0.6875 +0.6875 +0.69921875 +0.69921875 +0.69921875 +0.7109375 +0.71484375 +0.69921875 +0.6796875 +0.7109375 +0.71875 +0.703125 +0.6640625 +0.6875 +0.6953125 +0.6875 +0.68359375 +0.703125 +0.69921875 +0.70703125 +0.7109375 +0.71875 +0.6640625 +0.67578125 +0.67578125 +0.67578125 +0.703125 +0.70703125 +0.71484375 +0.6796875 +0.6796875 +0.703125 +0.65625 +0.68359375 +0.67578125 +0.71484375 +0.7109375 +0.71875 +0.69921875 +0.68359375 +0.6875 +0.6953125 +0.6640625 +0.7109375 +0.71875 +0.6953125 +0.68359375 +0.703125 +0.66796875 +0.68359375 +0.69921875 +0.703125 +0.67578125 +0.6953125 +0.6875 +0.69921875 +0.6796875 +0.6796875 +0.71875 +0.6875 +0.68359375 +0.68359375 +0.7109375 +0.671875 +0.69921875 +0.6796875 +0.69921875 +0.7109375 +0.69921875 +0.703125 +0.69140625 +0.6875 +0.6953125 +0.65625 +0.6953125 +0.6640625 +0.671875 +0.7109375 +0.69140625 +0.69140625 +0.67578125 +0.6953125 +0.66015625 +0.6796875 +0.6953125 +0.6875 +0.6875 +0.71484375 +0.70703125 +0.6953125 +0.67578125 +0.6953125 +0.69140625 +0.67578125 +0.6875 +0.66015625 +0.69921875 +0.68359375 +0.67578125 +0.6953125 +0.671875 +0.6796875 +0.70703125 +0.6875 +0.6953125 +0.6875 +0.68359375 +0.6953125 +0.68359375 +0.69921875 +0.68359375 +0.6796875 +0.66796875 +0.66796875 +0.71484375 +0.66015625 +0.6640625 +0.68359375 +0.6953125 +0.671875 +0.671875 +0.68359375 +0.65625 +0.6875 +0.6328125 +0.69140625 +0.6640625 +0.71484375 +0.67578125 +0.671875 +0.68359375 +0.68359375 +0.71875 +0.66796875 +0.6328125 +0.6796875 +0.6796875 +0.6640625 +0.68359375 +0.66796875 +0.64453125 +0.65234375 +0.65234375 +0.6953125 +0.65234375 +0.6875 +0.69140625 +0.671875 +0.671875 +0.66796875 +0.68359375 +0.69921875 +0.67578125 +0.6875 +0.6953125 +0.70703125 +0.67578125 +0.68359375 +0.6796875 +0.6796875 +0.671875 +0.68359375 +0.6640625 +0.6875 +0.67578125 +0.6640625 +0.671875 +0.69140625 +0.64453125 +0.66796875 +0.68359375 +0.67578125 +0.68359375 +0.68359375 +0.6640625 +0.66796875 +0.703125 +0.66796875 +0.671875 +0.6640625 +0.6796875 +0.66796875 +0.70703125 +0.6796875 +0.66796875 +0.671875 +0.67578125 +0.6953125 +0.6796875 +0.69140625 +0.65625 +0.70703125 +0.6796875 +0.66796875 +0.68359375 +0.69140625 +0.66015625 +0.66796875 +0.6875 +0.69140625 +0.6640625 +0.6484375 +0.66015625 +0.69140625 +0.65234375 +0.68359375 +0.68359375 +0.6640625 +0.68359375 +0.68359375 +0.67578125 +0.7109375 +0.6875 +0.69921875 +0.68359375 +0.66796875 +0.6875 +0.6640625 +0.66796875 +0.6875 +0.671875 +0.66796875 +0.6484375 +0.6796875 +0.6875 +0.6640625 +0.640625 +0.66796875 +0.66015625 +0.66796875 +0.671875 +0.640625 +0.65234375 +0.6640625 +0.66796875 +0.6796875 +0.68359375 +0.65625 +0.68359375 +0.6484375 +0.67578125 +0.6796875 +0.68359375 +0.69140625 +0.66015625 +0.65625 +0.66015625 +0.6796875 +0.671875 +0.71875 +0.66796875 +0.6484375 +0.6640625 +0.68359375 +0.68359375 +0.671875 +0.6796875 +0.6796875 +0.65625 +0.671875 +0.6796875 +0.6328125 +0.66796875 +0.66796875 +0.6796875 +0.640625 +0.66015625 +0.65234375 +0.6328125 +0.64453125 +0.66015625 +0.6875 +0.66015625 +0.65625 +0.6796875 +0.64453125 +0.64453125 +0.6640625 +0.671875 +0.67578125 +0.671875 +0.66015625 +0.6640625 +0.671875 +0.66015625 +0.6640625 +0.65625 +0.68359375 +0.6796875 +0.6640625 +0.66015625 +0.6796875 +0.64453125 +0.65234375 +0.671875 +0.6796875 +0.65234375 +0.6796875 +0.65234375 +0.62890625 +0.6875 +0.671875 +0.66796875 +0.64453125 +0.6484375 +0.6484375 +0.6640625 +0.671875 +0.66015625 +0.67578125 +0.66015625 +0.6484375 +0.65234375 +0.67578125 +0.65234375 +0.6484375 +0.6640625 +0.6640625 +0.6484375 +0.66015625 +0.66015625 +0.65234375 +0.66796875 +0.671875 +0.65234375 +0.6328125 +0.6796875 +0.64453125 +0.67578125 +0.640625 +0.66796875 +0.6640625 +0.66015625 +0.63671875 +0.66796875 +0.66796875 +0.6640625 +0.65234375 +0.64453125 +0.64453125 +0.703125 +0.671875 +0.66015625 +0.6796875 +0.6640625 +0.66796875 +0.65234375 +0.6640625 +0.65234375 +0.6796875 +0.671875 +0.64453125 +0.671875 +0.66796875 +0.6640625 +0.65234375 +0.671875 +0.640625 +0.68359375 +0.65234375 +0.66796875 +0.65625 +0.65625 +0.67578125 +0.66796875 +0.6328125 +0.65234375 +0.66015625 +0.6875 +0.66796875 +0.67578125 +0.66796875 +0.65625 +0.6640625 +0.64453125 +0.65625 +0.64453125 +0.65234375 +0.6640625 +0.65234375 +0.6484375 +0.67578125 +0.65625 +0.66015625 +0.671875 +0.66015625 +0.66015625 +0.67578125 +0.64453125 +0.6484375 +0.66796875 +0.64453125 +0.65625 +0.671875 +0.6640625 +0.671875 +0.640625 +0.63671875 +0.65625 +0.6640625 +0.65625 +0.6640625 +0.66796875 +0.625 +0.65234375 +0.64453125 +0.65234375 +0.64453125 +0.65625 +0.67578125 +0.625 +0.65234375 +0.64453125 +0.63671875 +0.6484375 +0.63671875 +0.671875 +0.66015625 +0.6484375 +0.64453125 +0.640625 +0.6640625 +0.6328125 +0.65625 +0.65234375 +0.65625 +0.65234375 +0.63671875 +0.65625 +0.62890625 +0.640625 +0.65625 +0.6328125 +0.65625 +0.64453125 +0.62890625 +0.6484375 +0.6484375 +0.671875 +0.65234375 +0.6640625 +0.65234375 +0.62109375 +0.6484375 +0.63671875 +0.67578125 +0.65625 +0.65234375 +0.6328125 +0.65234375 +0.66015625 +0.6484375 +0.63671875 +0.66796875 +0.6328125 +0.62109375 +0.640625 +0.609375 +0.60546875 +0.67578125 +0.64453125 +0.6484375 +0.64453125 +0.6640625 +0.640625 +0.671875 +0.62890625 +0.65234375 +0.6640625 +0.6328125 +0.65234375 +0.640625 +0.65234375 +0.65625 +0.671875 +0.65625 +0.61328125 +0.640625 +0.65234375 +0.62109375 +0.66015625 +0.625 +0.6328125 +0.6484375 +0.62890625 +0.640625 +0.6484375 +0.6171875 +0.6484375 +0.65234375 +0.6328125 +0.66015625 +0.6171875 +0.6171875 +0.640625 +0.65234375 +0.66015625 +0.671875 +0.65234375 +0.67578125 +0.67578125 +0.640625 +0.63671875 +0.6484375 +0.6328125 +0.6484375 +0.6484375 +0.63671875 +0.65625 +0.66015625 +0.62890625 +0.62890625 +0.64453125 +0.67578125 +0.625 +0.6484375 +0.63671875 +0.64453125 +0.61328125 +0.64453125 +0.63671875 +0.62890625 +0.64453125 +0.6484375 +0.64453125 +0.63671875 +0.60546875 +0.625 +0.63671875 +0.65234375 +0.6171875 +0.625 +0.640625 +0.6484375 +0.65625 +0.6484375 +0.60546875 +0.6484375 +0.640625 +0.63671875 +0.6484375 +0.625 +0.625 +0.640625 +0.64453125 +0.64453125 +0.609375 +0.6328125 +0.64453125 +0.62890625 +0.63671875 +0.6484375 +0.6328125 +0.63671875 +0.62109375 +0.65234375 +0.640625 +0.64453125 +0.61328125 +0.6171875 +0.6328125 +0.6171875 +0.62890625 +0.64453125 +0.6484375 +0.66796875 +0.63671875 +0.61328125 +0.609375 +0.64453125 +0.64453125 +0.64453125 +0.62890625 +0.6328125 +0.625 +0.6640625 +0.640625 +0.64453125 +0.63671875 +0.62890625 +0.625 +0.62890625 +0.6328125 +0.609375 +0.62890625 +0.64453125 +0.62890625 +0.65625 +0.6328125 +0.66015625 +0.63671875 +0.64453125 +0.63671875 +0.64453125 +0.625 +0.62109375 +0.62890625 +0.6171875 +0.609375 +0.63671875 +0.6171875 +0.71875 +0.6484375 +0.640625 +0.69140625 +0.625 +0.64453125 +0.61328125 +0.6484375 +0.64453125 +0.625 +0.61328125 +0.67578125 +0.64453125 +0.65234375 +0.640625 +0.62890625 +0.65625 +0.6640625 +0.64453125 +0.6796875 +0.62890625 +0.65625 +0.62890625 +0.625 +0.6328125 +0.6328125 +0.62890625 +0.64453125 +0.6484375 +0.64453125 +0.640625 +0.60546875 +0.62890625 +0.6328125 +0.6484375 +0.62109375 +0.62109375 +0.66015625 +0.625 +0.609375 +0.62890625 +0.62890625 +0.640625 +0.671875 +0.609375 +0.625 +0.65625 +0.66015625 +0.72265625 +0.6171875 +0.6875 +0.6171875 +0.6328125 +0.64453125 +0.66796875 +0.6171875 +0.75390625 +0.609375 +0.671875 +0.625 +0.64453125 +0.62890625 +0.67578125 +0.6640625 +0.67578125 +0.66796875 +0.875 +0.76171875 +0.6953125 +1.2421875 +1.296875 +0.87890625 +1.5625 +0.82421875 +1.1796875 +0.9921875 +1.34375 +0.82421875 +0.9765625 +1.0234375 +0.84765625 +0.9609375 +0.83984375 +0.85546875 +0.90625 +0.828125 +0.78125 +0.7734375 +0.734375 +0.7578125 +0.72265625 +0.75 +0.71484375 +0.6953125 +0.71484375 +0.7265625 +0.69140625 +0.703125 +0.68359375 +0.6796875 +0.67578125 +0.66796875 +0.66796875 +0.65625 +0.671875 +0.66015625 +0.66015625 +0.65625 +0.6484375 +0.65234375 +0.65625 +0.65625 +0.64453125 +0.6484375 +0.62890625 +0.62109375 +0.6328125 +0.59765625 +0.609375 +0.61328125 +0.625 +0.625 +0.6171875 +0.625 +0.609375 +0.609375 +0.62109375 +0.609375 +0.59765625 +0.6015625 +0.5859375 +0.609375 +0.59375 +0.578125 +0.6171875 +0.59765625 +0.625 +0.59375 +0.59375 +0.57421875 +0.61328125 +0.62109375 +0.58203125 +0.609375 +0.6171875 +0.5859375 +0.59765625 +0.5859375 +0.6015625 +0.58203125 +0.59765625 +0.58203125 +0.62109375 +0.5703125 +0.59375 +0.59765625 +0.59375 +0.56640625 +0.5859375 +0.5625 +0.58984375 +0.58203125 +0.5859375 +0.59375 +0.5703125 +0.5625 +0.6171875 +0.59765625 +0.5703125 +0.5625 +0.6015625 +0.56640625 +0.609375 +0.58203125 +0.57421875 +0.578125 +0.61328125 +0.61328125 +0.61328125 +0.578125 +0.5859375 +0.58203125 +0.5703125 +0.55859375 +0.58984375 +0.59765625 +0.578125 +0.578125 +0.5546875 +0.57421875 +0.59765625 +0.5625 +0.609375 +0.58203125 +0.5859375 +0.59765625 +0.58203125 +0.59375 +0.57421875 +0.59765625 +0.58203125 +0.5859375 +0.6015625 +0.578125 +0.59375 +0.5703125 +0.60546875 +0.5625 +0.578125 +0.578125 +0.578125 +0.58203125 +0.609375 +0.5625 +0.58984375 +0.55859375 +0.5859375 +0.5625 +0.57421875 +0.56640625 +0.5703125 +0.59375 +0.56640625 +0.578125 +0.5703125 +0.58203125 +0.57421875 +0.5859375 +0.56640625 +0.58984375 +0.57421875 +0.58203125 +0.61328125 +0.56640625 +0.56640625 +0.57421875 +0.5546875 +0.578125 +0.578125 +0.578125 +0.5859375 +0.56640625 +0.55078125 +0.5625 +0.56640625 +0.5703125 +0.58984375 +0.5703125 +0.5703125 +0.578125 +0.5703125 +0.56640625 +0.5703125 +0.5546875 +0.55078125 +0.58203125 +0.57421875 +0.5546875 +0.57421875 +0.578125 +0.5703125 +0.58984375 +0.5625 +0.55078125 +0.5546875 +0.5859375 +0.5703125 +0.57421875 +0.55078125 +0.53515625 +0.5703125 +0.59375 +0.58984375 +0.5546875 +0.58984375 +0.58203125 +0.57421875 +0.57421875 +0.57421875 +0.5859375 +0.56640625 +0.5625 +0.55859375 +0.5625 +0.55078125 +0.56640625 +0.56640625 +0.56640625 +0.57421875 +0.578125 +0.55078125 +0.56640625 +0.5859375 +0.57421875 +0.56640625 +0.5703125 +0.5625 +0.55859375 +0.58203125 +0.57421875 +0.55078125 +0.578125 +0.5546875 +0.578125 +0.546875 +0.546875 +0.5390625 +0.5625 +0.578125 +0.56640625 +0.58203125 +0.578125 +0.58203125 +0.55859375 +0.56640625 +0.5546875 +0.546875 +0.578125 +0.5625 +0.54296875 +0.54296875 +0.55078125 +0.5625 +0.5703125 +0.56640625 +0.5546875 +0.5546875 +0.5703125 +0.57421875 +0.546875 +0.57421875 +0.58203125 +0.5703125 +0.5625 +0.56640625 +0.578125 +0.57421875 +0.5546875 +0.52734375 +0.5546875 +0.55078125 +0.55859375 +0.5625 +0.546875 +0.578125 +0.55859375 +0.58984375 +0.56640625 +0.5546875 +0.58984375 +0.5546875 +0.55859375 +0.55078125 +0.55078125 +0.5546875 +0.578125 +0.5546875 +0.5703125 +0.56640625 +0.58203125 +0.56640625 +0.578125 +0.5625 +0.5625 +0.5703125 +0.5625 +0.57421875 +0.5703125 +0.5625 +0.5625 +0.5546875 +0.54296875 +0.55078125 +0.5625 +0.578125 +0.55859375 +0.55859375 +0.5859375 +0.5703125 +0.5390625 +0.5546875 +0.55078125 +0.5625 +0.5703125 +0.578125 +0.5546875 +0.55078125 +0.57421875 +0.55859375 +0.5703125 +0.53125 +0.56640625 +0.55859375 +0.578125 +0.5703125 +0.55078125 +0.5546875 +0.55078125 +0.55078125 +0.578125 +0.5703125 +0.5859375 +0.56640625 +0.5625 +0.56640625 +0.5625 +0.5390625 +0.55859375 +0.58203125 +0.56640625 +0.53515625 +0.5703125 +0.5546875 +0.5625 +0.578125 +0.546875 +0.5625 +0.5625 +0.57421875 +0.56640625 +0.57421875 +0.55859375 +0.55859375 +0.57421875 +0.5546875 +0.5546875 +0.5390625 +0.55078125 +0.53515625 +0.5703125 +0.56640625 +0.55078125 +0.53515625 +0.56640625 +0.5234375 +0.5625 +0.55859375 +0.546875 +0.55078125 +0.57421875 +0.5625 +0.55078125 +0.55078125 +0.53515625 +0.53515625 +0.55078125 +0.5625 +0.53515625 +0.5390625 +0.55078125 +0.55859375 +0.55859375 +0.55859375 +0.5546875 +0.5625 +0.55859375 +0.5625 +0.5546875 +0.52734375 +0.54296875 +0.55859375 +0.5546875 +0.54296875 +0.56640625 +0.53515625 +0.5625 +0.52734375 +0.546875 +0.56640625 +0.54296875 +0.54296875 +0.5625 +0.546875 +0.55859375 +0.5703125 +0.53515625 +0.578125 +0.52734375 +0.55859375 +0.546875 +0.55078125 +0.546875 +0.5546875 +0.546875 +0.54296875 +0.5390625 +0.51953125 +0.546875 +0.546875 +0.55859375 +0.55859375 +0.55859375 +0.5546875 +0.54296875 +0.53515625 +0.5703125 +0.5390625 +0.53515625 +0.578125 +0.53125 +0.5546875 +0.56640625 +0.55859375 +0.5546875 +0.5390625 +0.546875 +0.54296875 +0.5546875 +0.53515625 +0.52734375 +0.5390625 +0.55078125 +0.54296875 +0.53515625 +0.55078125 +0.53515625 +0.5546875 +0.55859375 +0.56640625 +0.5546875 +0.546875 +0.5546875 +0.55859375 +0.5390625 +0.5625 +0.53515625 +0.546875 +0.54296875 +0.5625 +0.56640625 +0.53515625 +0.55078125 +0.5390625 +0.53515625 +0.5546875 +0.546875 +0.52734375 +0.5625 +0.5625 +0.5703125 +0.56640625 +0.56640625 +0.5390625 +0.55078125 +0.55078125 +0.53515625 +0.546875 +0.53515625 +0.52734375 +0.52734375 +0.53515625 +0.5625 +0.5625 +0.54296875 +0.53515625 +0.5390625 +0.55078125 +0.5390625 +0.55859375 +0.53515625 +0.5390625 +0.55859375 +0.54296875 +0.5546875 +0.55078125 +0.546875 +0.54296875 +0.54296875 +0.55078125 +0.546875 +0.5390625 +0.51171875 +0.5546875 +0.52734375 +0.52734375 +0.56640625 +0.51953125 +0.5234375 +0.58984375 +0.52734375 +0.5546875 +0.5390625 +0.546875 +0.54296875 +0.56640625 +0.53125 +0.5390625 +0.52734375 +0.5390625 +0.515625 +0.51171875 +0.5625 +0.5390625 +0.55078125 +0.53515625 +0.53125 +0.54296875 +0.54296875 +0.546875 +0.56640625 +0.5390625 +0.5546875 +0.546875 +0.55859375 +0.53125 +0.53515625 +0.54296875 +0.546875 +0.53515625 +0.55078125 +0.51953125 +0.546875 +0.52734375 +0.55078125 +0.51953125 +0.53515625 +0.5234375 +0.5 +0.54296875 +0.53515625 +0.5546875 +0.5390625 +0.53515625 +0.55078125 +0.56640625 +0.52734375 +0.53125 +0.52734375 +0.53515625 +0.5390625 +0.546875 +0.53515625 +0.5390625 +0.5546875 +0.54296875 +0.5625 +0.546875 +0.52734375 +0.5390625 +0.52734375 +0.54296875 +0.546875 +0.5234375 +0.55078125 +0.546875 +0.53125 +0.546875 +0.5390625 +0.53125 +0.53125 +0.52734375 +0.5390625 +0.5234375 +0.54296875 +0.546875 +0.5390625 +0.54296875 +0.53515625 +0.53515625 +0.54296875 +0.55078125 +0.5390625 +0.5390625 +0.54296875 +0.54296875 +0.53125 +0.546875 +0.54296875 +0.5390625 +0.51171875 +0.53515625 +0.54296875 +0.55078125 +0.51953125 +0.54296875 +0.5390625 +0.51953125 +0.53515625 +0.5234375 +0.54296875 +0.54296875 +0.51953125 +0.5546875 +0.52734375 +0.52734375 +0.515625 +0.53125 +0.53515625 +0.52734375 +0.52734375 +0.54296875 +0.5234375 +0.5234375 +0.53125 +0.5390625 +0.546875 +0.546875 +0.53125 +0.5078125 +0.5234375 +0.52734375 +0.53125 +0.53515625 +0.546875 +0.51953125 +0.53125 +0.5234375 +0.515625 +0.53515625 +0.5625 +0.578125 +0.5546875 +0.51953125 +0.515625 +0.546875 +0.54296875 +0.5390625 +0.54296875 +0.5234375 +0.5390625 +0.5390625 +0.54296875 +0.51953125 +0.5390625 +0.53515625 +0.5625 +0.51953125 +0.54296875 +0.546875 +0.51953125 +0.53515625 +0.53515625 +0.52734375 +0.52734375 +0.55078125 +0.52734375 +0.53515625 +0.5234375 +0.52734375 +0.54296875 +0.5234375 +0.52734375 +0.52734375 +0.53515625 +0.51171875 +0.5234375 +0.52734375 +0.5234375 +0.53125 +0.515625 +0.54296875 +0.52734375 +0.498046875 +0.53125 +0.52734375 +0.5234375 +0.51953125 +0.53125 +0.52734375 +0.51171875 +0.51171875 +0.52734375 +0.51953125 +0.51171875 +0.51953125 +0.53125 +0.515625 +0.515625 +0.53125 +0.51953125 +0.5 +0.51171875 +0.5078125 +0.515625 +0.50390625 +0.53125 +0.51953125 +0.515625 +0.53125 +0.515625 +0.51953125 +0.52734375 +0.50390625 +0.54296875 +0.51171875 +0.515625 +0.486328125 +0.5078125 +0.51171875 +0.515625 +0.490234375 +0.49609375 +0.5390625 +0.5078125 +0.51171875 +0.53125 +0.50390625 +0.5078125 +0.5078125 +0.51171875 +0.515625 +0.5234375 +0.50390625 +0.50390625 +0.515625 +0.52734375 +0.53125 +0.52734375 +0.5078125 +0.51171875 +0.49609375 +0.515625 +0.53515625 +0.50390625 +0.49609375 +0.48828125 +0.515625 +0.5234375 +0.50390625 +0.49609375 +0.52734375 +0.51171875 +0.515625 +0.51171875 +0.49609375 +0.53125 +0.5078125 +0.50390625 +0.51953125 +0.53515625 +0.494140625 +0.53125 +0.5078125 +0.5078125 +0.54296875 +0.5 +0.51953125 +0.4921875 +0.51171875 +0.51953125 +0.494140625 +0.5078125 +0.498046875 +0.515625 +0.494140625 +0.498046875 +0.5078125 +0.53515625 +0.5078125 +0.51171875 +0.484375 +0.498046875 +0.50390625 +0.50390625 +0.51953125 +0.51171875 +0.52734375 +0.51171875 +0.49609375 +0.52734375 +0.546875 +0.515625 +0.51953125 +0.5 +0.5078125 +0.50390625 +0.50390625 +0.5 +0.490234375 +0.5078125 +0.515625 +0.5078125 +0.53125 +0.515625 +0.51953125 +0.5078125 +0.52734375 +0.484375 +0.515625 +0.5078125 +0.5078125 +0.51171875 +0.515625 +0.52734375 +0.515625 +0.5078125 +0.5078125 +0.5078125 +0.49609375 +0.498046875 +0.5 +0.5078125 +0.498046875 +0.515625 +0.49609375 +0.4921875 +0.515625 +0.5 +0.5078125 +0.5078125 +0.52734375 +0.478515625 +0.515625 +0.48828125 +0.5078125 +0.51171875 +0.50390625 +0.50390625 +0.51171875 +0.51171875 +0.50390625 +0.50390625 +0.4921875 +0.48828125 +0.49609375 +0.515625 +0.54296875 +0.498046875 +0.515625 +0.484375 +0.482421875 +0.486328125 +0.486328125 +0.5078125 +0.4921875 +0.494140625 +0.51171875 +0.48828125 +0.50390625 +0.50390625 +0.4921875 +0.498046875 +0.50390625 +0.51171875 +0.486328125 +0.5234375 +0.50390625 +0.51953125 +0.490234375 +0.5 +0.47265625 +0.470703125 +0.50390625 +0.50390625 +0.49609375 +0.5 +0.490234375 +0.49609375 +0.5 +0.50390625 +0.498046875 +0.5078125 +0.49609375 +0.498046875 +0.51171875 +0.490234375 +0.4921875 +0.50390625 +0.47265625 +0.5078125 +0.51171875 +0.5078125 +0.498046875 +0.5078125 +0.494140625 +0.53125 +0.49609375 +0.494140625 +0.49609375 +0.494140625 +0.51171875 +0.50390625 +0.51171875 +0.478515625 +0.50390625 +0.478515625 +0.482421875 +0.490234375 +0.48828125 +0.515625 +0.48046875 +0.486328125 +0.48828125 +0.4921875 +0.474609375 +0.5 +0.48828125 +0.5078125 +0.490234375 +0.482421875 +0.50390625 +0.48046875 +0.498046875 +0.48046875 +0.490234375 +0.5 +0.49609375 +0.484375 +0.482421875 +0.478515625 +0.5078125 +0.51171875 +0.490234375 +0.50390625 +0.478515625 +0.4921875 +0.4921875 +0.47265625 +0.482421875 +0.51171875 +0.50390625 +0.5234375 +0.482421875 +0.478515625 +0.478515625 +0.49609375 +0.474609375 +0.515625 +0.490234375 +0.4765625 +0.50390625 +0.5078125 +0.48828125 +0.474609375 +0.484375 +0.515625 +0.484375 +0.5 +0.48828125 +0.498046875 +0.474609375 +0.48828125 +0.50390625 +0.5078125 +0.51171875 +0.4921875 +0.49609375 +0.484375 +0.498046875 +0.5 +0.515625 +0.47265625 +0.50390625 +0.49609375 +0.49609375 +0.478515625 +0.5078125 +0.4921875 +0.50390625 +0.490234375 +0.482421875 +0.462890625 +0.52734375 +0.494140625 +0.49609375 +0.48828125 +0.484375 +0.49609375 +0.478515625 +0.53125 +0.478515625 +0.51171875 +0.478515625 +0.466796875 +0.4921875 +0.50390625 +0.48828125 +0.51953125 +0.470703125 +0.49609375 +0.466796875 +0.48828125 +0.478515625 +0.482421875 +0.482421875 +0.474609375 +0.466796875 +0.482421875 +0.490234375 +0.482421875 +0.486328125 +0.47265625 +0.4765625 +0.4765625 +0.470703125 +0.5 +0.482421875 +0.5 +0.4921875 +0.484375 +0.494140625 +0.486328125 +0.4921875 +0.494140625 +0.482421875 +0.494140625 +0.4921875 +0.490234375 +0.51171875 +0.466796875 +0.466796875 +0.470703125 +0.48046875 +0.482421875 +0.49609375 +0.48046875 +0.494140625 +0.484375 +0.48828125 +0.478515625 +0.5 +0.484375 +0.4921875 +0.4609375 +0.478515625 +0.50390625 +0.484375 +0.484375 +0.494140625 +0.4609375 +0.478515625 +0.486328125 +0.466796875 +0.49609375 +0.490234375 +0.474609375 +0.490234375 +0.48046875 +0.490234375 +0.5 +0.4921875 +0.4921875 +0.466796875 +0.48828125 +0.470703125 +0.494140625 +0.4765625 +0.478515625 +0.478515625 +0.470703125 +0.484375 +0.48046875 +0.478515625 +0.494140625 +0.5 +0.494140625 +0.490234375 +0.478515625 +0.498046875 +0.494140625 +0.4765625 +0.486328125 +0.46875 +0.474609375 +0.4921875 +0.482421875 +0.45703125 +0.48046875 +0.48828125 +0.482421875 +0.49609375 +0.482421875 +0.498046875 +0.49609375 +0.49609375 +0.478515625 +0.470703125 +0.482421875 +0.474609375 +0.490234375 +0.478515625 +0.47265625 +0.4921875 +0.462890625 +0.46484375 +0.486328125 +0.470703125 +0.47265625 +0.470703125 +0.48046875 +0.48046875 +0.48828125 +0.462890625 +0.48828125 +0.49609375 +0.466796875 +0.498046875 +0.46875 +0.49609375 +0.453125 +0.46875 +0.45703125 +0.478515625 +0.45703125 +0.4765625 +0.4609375 +0.4609375 +0.48828125 +0.490234375 +0.466796875 +0.486328125 +0.47265625 +0.486328125 +0.478515625 +0.490234375 +0.49609375 +0.474609375 +0.4921875 +0.5 +0.458984375 +0.46875 +0.47265625 +0.46875 +0.458984375 +0.4921875 +0.466796875 +0.4765625 +0.458984375 +0.48046875 +0.474609375 +0.453125 +0.4765625 +0.466796875 +0.4765625 +0.462890625 +0.447265625 +0.486328125 +0.4609375 +0.45703125 +0.4921875 +0.458984375 +0.458984375 +0.484375 +0.466796875 +0.494140625 +0.4921875 +0.46875 +0.474609375 +0.466796875 +0.4609375 +0.4609375 +0.48828125 +0.470703125 +0.490234375 +0.482421875 +0.470703125 +0.4765625 +0.4609375 +0.470703125 +0.48828125 +0.484375 +0.486328125 +0.482421875 +0.498046875 +0.470703125 +0.5078125 +0.486328125 +0.578125 +0.49609375 +0.51953125 +0.470703125 +0.494140625 +0.470703125 +0.515625 +0.482421875 +0.515625 +0.498046875 +0.62890625 +0.48828125 +0.5234375 +0.482421875 +0.54296875 +0.494140625 +0.65234375 +0.498046875 +0.80859375 +0.451171875 +0.62890625 +0.5390625 +0.6484375 +0.55859375 +0.76953125 +0.671875 +0.72265625 +0.703125 +0.64453125 +0.70703125 +0.51953125 +0.6328125 +0.6171875 +0.5234375 +0.5703125 +0.5546875 +0.51953125 +0.5546875 +0.53125 +0.51171875 +0.49609375 +0.486328125 +0.5078125 +0.4765625 +0.494140625 +0.5078125 +0.484375 +0.484375 +0.48046875 +0.51171875 +0.462890625 +0.5 +0.486328125 +0.48828125 +0.466796875 +0.47265625 +0.478515625 +0.48046875 +0.5 +0.474609375 +0.4765625 +0.470703125 +0.478515625 +0.474609375 +0.466796875 +0.482421875 +0.4921875 +0.474609375 +0.4765625 +0.46484375 +0.474609375 +0.451171875 +0.435546875 +0.46875 +0.46484375 +0.4609375 +0.4609375 +0.443359375 +0.4453125 +0.455078125 +0.478515625 +0.46875 +0.4609375 +0.466796875 +0.46875 +0.462890625 +0.47265625 +0.46484375 +0.474609375 +0.453125 +0.44140625 +0.46875 +0.470703125 +0.45703125 +0.45703125 +0.462890625 +0.466796875 +0.474609375 +0.4609375 +0.470703125 +0.44921875 +0.470703125 +0.451171875 +0.45703125 +0.458984375 +0.466796875 +0.46484375 +0.45703125 +0.4765625 +0.443359375 +0.462890625 +0.462890625 +0.44921875 +0.462890625 +0.4375 +0.46875 +0.45703125 +0.46484375 +0.44921875 +0.46484375 +0.447265625 +0.47265625 +0.4453125 +0.44921875 +0.46875 +0.4609375 +0.462890625 +0.458984375 +0.443359375 +0.453125 +0.4921875 +0.439453125 +0.447265625 +0.462890625 +0.455078125 +0.443359375 +0.46484375 +0.46875 +0.455078125 +0.44140625 +0.44921875 +0.451171875 +0.478515625 +0.447265625 +0.458984375 +0.46484375 +0.458984375 +0.43359375 +0.447265625 +0.47265625 +0.470703125 +0.44140625 +0.447265625 +0.45703125 +0.44921875 +0.4765625 +0.458984375 +0.447265625 +0.48046875 +0.46484375 +0.48046875 +0.4609375 +0.46484375 +0.46484375 +0.462890625 +0.482421875 +0.455078125 +0.474609375 +0.482421875 +0.462890625 +0.44140625 +0.451171875 +0.4375 +0.458984375 +0.45703125 +0.486328125 +0.4609375 +0.48046875 +0.44140625 +0.4453125 +0.458984375 +0.447265625 +0.447265625 +0.44921875 +0.455078125 +0.453125 +0.451171875 +0.462890625 +0.45703125 +0.46875 +0.44921875 +0.47265625 +0.462890625 +0.447265625 +0.455078125 +0.466796875 +0.458984375 +0.466796875 +0.4609375 +0.455078125 +0.466796875 +0.47265625 +0.4609375 +0.462890625 +0.439453125 +0.453125 +0.4375 +0.439453125 +0.462890625 +0.4453125 +0.458984375 +0.447265625 +0.478515625 +0.462890625 +0.44921875 +0.43359375 +0.4609375 +0.46484375 +0.462890625 +0.44140625 +0.45703125 +0.4375 +0.447265625 +0.447265625 +0.44921875 +0.458984375 +0.447265625 +0.447265625 +0.455078125 +0.458984375 +0.427734375 +0.427734375 +0.44921875 +0.462890625 +0.4453125 +0.443359375 +0.44140625 +0.46484375 +0.466796875 +0.455078125 +0.451171875 +0.44921875 +0.431640625 +0.458984375 +0.470703125 +0.4453125 +0.443359375 +0.4375 +0.44921875 +0.44140625 +0.4609375 +0.455078125 +0.44140625 +0.44921875 +0.439453125 +0.4453125 +0.453125 +0.44921875 +0.455078125 +0.439453125 +0.435546875 +0.455078125 +0.43359375 +0.4296875 +0.431640625 +0.462890625 +0.451171875 +0.466796875 +0.45703125 +0.431640625 +0.4375 +0.470703125 +0.44140625 +0.458984375 +0.455078125 +0.447265625 +0.453125 +0.4375 +0.427734375 +0.45703125 +0.439453125 +0.435546875 +0.462890625 +0.44921875 +0.443359375 +0.435546875 +0.439453125 +0.4609375 +0.439453125 +0.46484375 +0.435546875 +0.435546875 +0.453125 +0.462890625 +0.453125 +0.458984375 +0.43359375 +0.44921875 +0.439453125 +0.439453125 +0.4375 +0.435546875 +0.4453125 +0.447265625 +0.451171875 +0.4375 +0.4453125 +0.4453125 +0.431640625 +0.466796875 +0.453125 +0.48046875 +0.439453125 +0.435546875 +0.439453125 +0.439453125 +0.44921875 +0.44921875 +0.44921875 +0.443359375 +0.44140625 +0.43359375 +0.427734375 +0.435546875 +0.435546875 +0.431640625 +0.462890625 +0.439453125 +0.451171875 +0.427734375 +0.44140625 +0.458984375 +0.439453125 +0.458984375 +0.431640625 +0.43359375 +0.44140625 +0.439453125 +0.44140625 +0.43359375 +0.423828125 +0.443359375 +0.42578125 +0.44140625 +0.453125 +0.455078125 +0.4453125 +0.458984375 +0.443359375 +0.439453125 +0.4296875 +0.423828125 +0.451171875 +0.4453125 +0.44921875 +0.46875 +0.44140625 +0.447265625 +0.42578125 +0.447265625 +0.45703125 +0.43359375 +0.44921875 +0.43359375 +0.44140625 +0.44140625 +0.466796875 +0.443359375 +0.4375 +0.435546875 +0.4375 +0.439453125 +0.470703125 +0.4375 +0.4609375 +0.443359375 +0.453125 +0.4375 +0.423828125 +0.451171875 +0.4609375 +0.4296875 +0.451171875 +0.416015625 +0.443359375 +0.4296875 +0.423828125 +0.451171875 +0.455078125 +0.435546875 +0.427734375 +0.462890625 +0.4296875 +0.44921875 +0.439453125 +0.439453125 +0.4296875 +0.435546875 +0.42578125 +0.451171875 +0.435546875 +0.427734375 +0.427734375 +0.435546875 +0.41796875 +0.451171875 +0.44140625 +0.443359375 +0.447265625 +0.4375 +0.4453125 +0.451171875 +0.44921875 +0.439453125 +0.4375 +0.4296875 +0.419921875 +0.4296875 +0.4296875 +0.427734375 +0.443359375 +0.4296875 +0.4296875 +0.443359375 +0.41796875 +0.443359375 +0.451171875 +0.4453125 +0.443359375 +0.4375 +0.4375 +0.45703125 +0.462890625 +0.443359375 +0.43359375 +0.435546875 +0.4453125 +0.462890625 +0.44140625 +0.447265625 +0.435546875 +0.427734375 +0.435546875 +0.45703125 +0.443359375 +0.4453125 +0.435546875 +0.447265625 +0.4296875 +0.4296875 +0.443359375 +0.44921875 +0.41796875 +0.427734375 +0.43359375 +0.4296875 +0.451171875 +0.4296875 +0.412109375 +0.451171875 +0.419921875 +0.4296875 +0.458984375 +0.443359375 +0.455078125 +0.43359375 +0.44921875 +0.431640625 +0.443359375 +0.435546875 +0.439453125 +0.462890625 +0.41796875 +0.4375 +0.42578125 +0.45703125 +0.427734375 +0.43359375 +0.435546875 +0.443359375 +0.451171875 +0.43359375 +0.43359375 +0.439453125 +0.4296875 +0.451171875 +0.4609375 +0.451171875 +0.41796875 +0.4140625 +0.43359375 +0.4453125 +0.431640625 +0.447265625 +0.4140625 +0.44921875 +0.443359375 +0.4453125 +0.423828125 +0.42578125 +0.431640625 +0.455078125 +0.443359375 +0.443359375 +0.427734375 +0.416015625 +0.421875 +0.42578125 +0.419921875 +0.431640625 +0.431640625 +0.453125 +0.44140625 +0.4140625 +0.41796875 +0.47265625 +0.44140625 +0.4375 +0.447265625 +0.451171875 +0.4375 +0.4375 +0.41796875 +0.431640625 +0.435546875 +0.427734375 +0.4375 +0.4296875 +0.431640625 +0.431640625 +0.42578125 +0.439453125 +0.44140625 +0.427734375 +0.439453125 +0.4140625 +0.4453125 +0.439453125 +0.431640625 +0.4453125 +0.416015625 +0.43359375 +0.423828125 +0.453125 +0.43359375 +0.447265625 +0.44140625 +0.443359375 +0.416015625 +0.423828125 +0.421875 +0.416015625 +0.44921875 +0.443359375 +0.41796875 +0.435546875 +0.443359375 +0.44140625 +0.42578125 +0.4296875 +0.421875 +0.439453125 +0.43359375 +0.435546875 +0.43359375 +0.421875 +0.44140625 +0.427734375 +0.41796875 +0.419921875 +0.447265625 +0.4375 +0.42578125 +0.439453125 +0.427734375 +0.4296875 +0.421875 +0.435546875 +0.43359375 +0.4296875 +0.421875 +0.45703125 +0.447265625 +0.431640625 +0.439453125 +0.416015625 +0.439453125 +0.431640625 +0.447265625 +0.427734375 +0.43359375 +0.427734375 +0.4375 +0.427734375 +0.423828125 +0.453125 +0.43359375 +0.431640625 +0.431640625 +0.4140625 +0.427734375 +0.44140625 +0.43359375 +0.431640625 +0.41796875 +0.43359375 +0.421875 +0.439453125 +0.435546875 +0.431640625 +0.412109375 +0.4453125 +0.416015625 +0.43359375 +0.4296875 +0.427734375 +0.4375 +0.431640625 +0.4296875 +0.4453125 +0.42578125 +0.453125 +0.419921875 +0.427734375 +0.4296875 +0.4296875 +0.427734375 +0.4375 +0.388671875 +0.408203125 +0.435546875 +0.447265625 +0.42578125 +0.431640625 +0.427734375 +0.431640625 +0.44921875 +0.439453125 +0.423828125 +0.419921875 +0.421875 +0.43359375 +0.439453125 +0.419921875 +0.435546875 +0.453125 +0.443359375 +0.427734375 +0.451171875 +0.421875 +0.43359375 +0.4296875 +0.42578125 +0.416015625 +0.416015625 +0.431640625 +0.4140625 +0.439453125 +0.423828125 +0.43359375 +0.427734375 +0.435546875 +0.423828125 +0.416015625 +0.42578125 +0.43359375 +0.4296875 +0.419921875 +0.427734375 +0.451171875 +0.421875 +0.431640625 +0.42578125 +0.416015625 +0.427734375 +0.4296875 +0.427734375 +0.423828125 +0.435546875 +0.427734375 +0.416015625 +0.431640625 +0.419921875 +0.4140625 +0.41015625 +0.423828125 +0.4453125 +0.4140625 +0.44140625 +0.451171875 +0.4375 +0.435546875 +0.4140625 +0.4140625 +0.423828125 +0.43359375 +0.427734375 +0.439453125 +0.4453125 +0.4296875 +0.416015625 +0.423828125 +0.40625 +0.427734375 +0.41796875 +0.3984375 +0.4375 +0.455078125 +0.412109375 +0.419921875 +0.421875 +0.40234375 +0.431640625 +0.423828125 +0.416015625 +0.423828125 +0.4375 +0.423828125 +0.44921875 +0.427734375 +0.421875 +0.408203125 +0.421875 +0.42578125 +0.412109375 +0.419921875 +0.41015625 +0.443359375 +0.4140625 +0.4375 +0.4375 +0.423828125 +0.404296875 +0.42578125 +0.423828125 +0.439453125 +0.41796875 +0.431640625 +0.4140625 +0.412109375 +0.431640625 +0.43359375 +0.42578125 +0.4375 +0.41796875 +0.41796875 +0.4453125 +0.4296875 +0.408203125 +0.416015625 +0.40625 +0.4375 +0.42578125 +0.431640625 +0.4375 +0.408203125 +0.41796875 +0.419921875 +0.4296875 +0.412109375 +0.40625 +0.42578125 +0.412109375 +0.4296875 +0.419921875 +0.42578125 +0.44140625 +0.400390625 +0.4140625 +0.431640625 +0.4140625 +0.412109375 +0.427734375 +0.419921875 +0.41015625 +0.43359375 +0.416015625 +0.427734375 +0.412109375 +0.423828125 +0.3984375 +0.4140625 +0.423828125 +0.423828125 +0.4375 +0.40625 +0.423828125 +0.4453125 +0.421875 +0.4140625 +0.40625 +0.427734375 +0.423828125 +0.41796875 +0.427734375 +0.416015625 +0.404296875 +0.41796875 +0.419921875 +0.4140625 +0.42578125 +0.412109375 +0.40234375 +0.416015625 +0.412109375 +0.41015625 +0.4140625 +0.408203125 +0.408203125 +0.435546875 +0.423828125 +0.443359375 +0.416015625 +0.41796875 +0.40625 +0.435546875 +0.408203125 +0.40234375 +0.427734375 +0.421875 +0.431640625 +0.423828125 +0.427734375 +0.421875 +0.423828125 +0.400390625 +0.40234375 +0.423828125 +0.4296875 +0.416015625 +0.435546875 +0.39453125 +0.427734375 +0.44140625 +0.435546875 +0.4296875 +0.43359375 +0.43359375 +0.4140625 +0.412109375 +0.41015625 +0.44140625 +0.400390625 +0.41796875 +0.4140625 +0.3984375 +0.423828125 +0.3984375 +0.408203125 +0.416015625 +0.41796875 +0.41015625 +0.41015625 +0.4296875 +0.40625 +0.43359375 +0.41796875 +0.443359375 +0.40625 +0.421875 +0.43359375 +0.3984375 +0.4140625 +0.42578125 +0.40625 +0.42578125 +0.43359375 +0.447265625 +0.412109375 +0.41796875 +0.416015625 +0.41796875 +0.431640625 +0.3984375 +0.427734375 +0.421875 +0.404296875 +0.419921875 +0.416015625 +0.42578125 +0.41015625 +0.4453125 +0.39453125 +0.388671875 +0.4140625 +0.412109375 +0.419921875 +0.423828125 +0.416015625 +0.42578125 +0.41796875 +0.412109375 +0.41015625 +0.4296875 +0.3984375 +0.3984375 +0.435546875 +0.4140625 +0.4296875 +0.41796875 +0.42578125 +0.41015625 +0.419921875 +0.396484375 +0.416015625 +0.427734375 +0.408203125 +0.412109375 +0.427734375 +0.419921875 +0.431640625 +0.384765625 +0.42578125 +0.41015625 +0.41796875 +0.419921875 +0.41015625 +0.423828125 +0.42578125 +0.4140625 +0.421875 +0.416015625 +0.427734375 +0.412109375 +0.408203125 +0.435546875 +0.427734375 +0.40625 +0.42578125 +0.435546875 +0.435546875 +0.396484375 +0.43359375 +0.40234375 +0.41015625 +0.404296875 +0.42578125 +0.421875 +0.408203125 +0.4140625 +0.41015625 +0.423828125 +0.42578125 +0.416015625 +0.40625 +0.421875 +0.421875 +0.40234375 +0.404296875 +0.41015625 +0.423828125 +0.416015625 +0.41796875 +0.41796875 +0.416015625 +0.3984375 +0.421875 +0.41796875 +0.416015625 +0.40234375 +0.42578125 +0.40625 +0.421875 +0.392578125 +0.419921875 +0.408203125 +0.41015625 +0.421875 +0.4140625 +0.400390625 +0.400390625 +0.40625 +0.404296875 +0.408203125 +0.390625 +0.427734375 +0.40234375 +0.388671875 +0.41796875 +0.40625 +0.40234375 +0.4140625 +0.42578125 +0.388671875 +0.419921875 +0.384765625 +0.421875 +0.404296875 +0.42578125 +0.404296875 +0.4140625 +0.42578125 +0.416015625 +0.3984375 +0.392578125 +0.404296875 +0.400390625 +0.408203125 +0.396484375 +0.416015625 +0.423828125 +0.412109375 +0.41796875 +0.439453125 +0.40234375 +0.40234375 +0.408203125 +0.3984375 +0.40625 +0.419921875 +0.40625 +0.40234375 +0.400390625 +0.41796875 +0.4140625 +0.392578125 +0.404296875 +0.408203125 +0.39453125 +0.416015625 +0.3984375 +0.4140625 +0.40625 +0.421875 +0.412109375 +0.396484375 +0.396484375 +0.416015625 +0.419921875 +0.421875 +0.419921875 +0.423828125 +0.396484375 +0.4375 +0.412109375 +0.431640625 +0.40625 +0.421875 +0.41015625 +0.419921875 +0.43359375 +0.40234375 +0.404296875 +0.408203125 +0.40625 +0.41796875 +0.400390625 +0.41796875 +0.39453125 +0.41015625 +0.3984375 +0.427734375 +0.423828125 +0.38671875 +0.408203125 +0.416015625 +0.39453125 +0.412109375 +0.40234375 +0.416015625 +0.41796875 +0.40234375 +0.4140625 +0.40625 +0.400390625 +0.416015625 +0.392578125 +0.404296875 +0.396484375 +0.39453125 +0.404296875 +0.408203125 +0.3984375 +0.412109375 +0.4296875 +0.40625 +0.412109375 +0.42578125 +0.412109375 +0.3984375 +0.388671875 +0.400390625 +0.40625 +0.419921875 +0.39453125 +0.41796875 +0.408203125 +0.40234375 +0.408203125 +0.404296875 +0.408203125 +0.427734375 +0.4140625 +0.392578125 +0.400390625 +0.40234375 +0.42578125 +0.41015625 +0.404296875 +0.412109375 +0.4140625 +0.416015625 +0.375 +0.4140625 +0.404296875 +0.404296875 +0.404296875 +0.404296875 +0.41796875 +0.404296875 +0.412109375 +0.392578125 +0.419921875 +0.384765625 +0.41015625 +0.396484375 +0.40625 +0.392578125 +0.404296875 +0.392578125 +0.40625 +0.396484375 +0.400390625 +0.39453125 +0.38671875 +0.41015625 +0.41796875 +0.419921875 +0.41796875 +0.4140625 +0.384765625 +0.3984375 +0.37109375 +0.388671875 +0.408203125 +0.41796875 +0.400390625 +0.408203125 +0.4140625 +0.400390625 +0.416015625 +0.416015625 +0.3984375 +0.412109375 +0.416015625 +0.416015625 +0.390625 +0.419921875 +0.388671875 +0.3828125 +0.40234375 +0.392578125 +0.3984375 +0.39453125 +0.40625 +0.416015625 +0.408203125 +0.396484375 +0.41015625 +0.39453125 +0.408203125 +0.384765625 +0.392578125 +0.400390625 +0.4140625 +0.38671875 +0.400390625 +0.400390625 +0.400390625 +0.396484375 +0.412109375 +0.388671875 +0.408203125 +0.423828125 +0.412109375 +0.3828125 +0.416015625 +0.41015625 +0.40625 +0.41015625 +0.3828125 +0.392578125 +0.412109375 +0.37890625 +0.390625 +0.408203125 +0.41796875 +0.400390625 +0.4140625 +0.408203125 +0.404296875 +0.3984375 +0.392578125 +0.40234375 +0.41796875 +0.404296875 +0.40625 +0.404296875 +0.4140625 +0.40234375 +0.404296875 +0.400390625 +0.3828125 +0.4140625 +0.400390625 +0.3984375 +0.3984375 +0.408203125 +0.3984375 +0.390625 +0.3984375 +0.390625 +0.3984375 +0.396484375 +0.40625 +0.4140625 +0.40234375 +0.384765625 +0.37890625 +0.388671875 +0.390625 +0.39453125 +0.392578125 +0.400390625 +0.39453125 +0.404296875 +0.40234375 +0.384765625 +0.396484375 +0.419921875 +0.40234375 +0.384765625 +0.416015625 +0.412109375 +0.408203125 +0.40625 +0.40625 +0.40625 +0.40625 +0.388671875 +0.404296875 +0.4140625 +0.3984375 +0.38671875 +0.400390625 +0.392578125 +0.3984375 +0.39453125 +0.396484375 +0.400390625 +0.404296875 +0.40234375 +0.404296875 +0.40234375 +0.41015625 +0.40234375 +0.400390625 +0.396484375 +0.421875 +0.396484375 +0.3984375 +0.4140625 +0.404296875 +0.400390625 +0.400390625 +0.39453125 +0.408203125 +0.396484375 +0.388671875 +0.404296875 +0.376953125 +0.396484375 +0.3984375 +0.37109375 +0.39453125 +0.3984375 +0.40625 +0.40234375 +0.392578125 +0.375 +0.40234375 +0.400390625 +0.37890625 +0.416015625 +0.390625 +0.400390625 +0.408203125 +0.38671875 +0.380859375 +0.40234375 +0.396484375 +0.40234375 +0.396484375 +0.392578125 +0.390625 +0.384765625 +0.38671875 +0.38671875 +0.39453125 +0.416015625 +0.38671875 +0.384765625 +0.3984375 +0.412109375 +0.400390625 +0.41015625 +0.396484375 +0.38671875 +0.41796875 +0.39453125 +0.396484375 +0.390625 +0.396484375 +0.40234375 +0.380859375 +0.40234375 +0.41015625 +0.396484375 +0.400390625 +0.3828125 +0.392578125 +0.400390625 +0.3984375 +0.40234375 +0.41015625 +0.400390625 +0.39453125 +0.40234375 +0.376953125 +0.390625 +0.400390625 +0.380859375 +0.384765625 +0.400390625 +0.400390625 +0.404296875 +0.388671875 +0.392578125 +0.404296875 +0.4140625 +0.375 +0.404296875 +0.400390625 +0.390625 +0.384765625 +0.384765625 +0.388671875 +0.408203125 +0.408203125 +0.39453125 +0.390625 +0.390625 +0.412109375 +0.392578125 +0.39453125 +0.416015625 +0.396484375 +0.40234375 +0.396484375 +0.3828125 +0.3984375 +0.40625 +0.38671875 +0.40234375 +0.40625 +0.39453125 +0.390625 +0.400390625 +0.388671875 +0.380859375 +0.404296875 +0.416015625 +0.408203125 +0.40234375 +0.400390625 +0.396484375 +0.400390625 +0.37890625 +0.396484375 +0.376953125 +0.416015625 +0.388671875 +0.3828125 +0.384765625 +0.38671875 +0.396484375 +0.396484375 +0.392578125 +0.3984375 +0.400390625 +0.392578125 +0.3828125 +0.421875 +0.408203125 +0.39453125 +0.40234375 +0.392578125 +0.388671875 +0.400390625 +0.38671875 +0.416015625 +0.412109375 +0.400390625 +0.390625 +0.390625 +0.404296875 +0.3828125 +0.37109375 +0.39453125 +0.4140625 +0.40625 +0.365234375 +0.39453125 +0.40234375 +0.392578125 +0.400390625 +0.392578125 +0.396484375 +0.412109375 +0.392578125 +0.373046875 +0.388671875 +0.384765625 +0.390625 +0.37890625 +0.380859375 +0.396484375 +0.41015625 +0.380859375 +0.396484375 +0.390625 +0.39453125 +0.392578125 +0.396484375 +0.412109375 +0.396484375 +0.3984375 +0.390625 +0.39453125 +0.388671875 +0.39453125 +0.380859375 +0.37890625 +0.396484375 +0.396484375 +0.40234375 +0.388671875 +0.37890625 +0.38671875 +0.39453125 +0.376953125 +0.39453125 +0.40625 +0.36328125 +0.408203125 +0.37890625 +0.375 +0.388671875 +0.396484375 +0.400390625 +0.3828125 +0.388671875 +0.375 +0.390625 +0.380859375 +0.392578125 +0.37890625 +0.376953125 +0.400390625 +0.384765625 +0.390625 +0.3671875 +0.40625 +0.373046875 +0.37890625 +0.39453125 +0.408203125 +0.390625 +0.376953125 +0.390625 +0.3828125 +0.373046875 +0.384765625 +0.369140625 +0.400390625 +0.392578125 +0.392578125 +0.40234375 +0.38671875 +0.390625 +0.392578125 +0.373046875 +0.40234375 +0.3984375 +0.396484375 +0.3984375 +0.3828125 +0.384765625 +0.373046875 +0.388671875 +0.384765625 +0.388671875 +0.41015625 +0.396484375 +0.38671875 +0.380859375 +0.380859375 +0.380859375 +0.390625 +0.37890625 +0.38671875 +0.376953125 +0.376953125 +0.384765625 +0.373046875 +0.396484375 +0.39453125 +0.388671875 +0.396484375 +0.376953125 +0.380859375 +0.396484375 +0.390625 +0.400390625 +0.400390625 +0.39453125 +0.40625 +0.376953125 +0.390625 +0.400390625 +0.38671875 +0.388671875 +0.390625 +0.396484375 +0.400390625 +0.3828125 +0.3984375 +0.37890625 +0.390625 +0.396484375 +0.37890625 +0.37890625 +0.41015625 +0.359375 +0.392578125 +0.39453125 +0.38671875 +0.40234375 +0.3828125 +0.376953125 +0.3828125 +0.396484375 +0.369140625 +0.375 +0.369140625 +0.390625 +0.40625 +0.37890625 +0.384765625 +0.39453125 +0.384765625 +0.36328125 +0.38671875 +0.38671875 +0.365234375 +0.392578125 +0.412109375 +0.3828125 +0.3984375 +0.384765625 +0.404296875 +0.38671875 +0.40625 +0.37109375 +0.37890625 +0.3671875 +0.396484375 +0.376953125 +0.37109375 +0.3828125 +0.39453125 +0.384765625 +0.37109375 +0.3828125 +0.380859375 +0.392578125 +0.37890625 +0.3671875 +0.384765625 +0.38671875 +0.400390625 +0.400390625 +0.3984375 +0.396484375 +0.375 +0.384765625 +0.38671875 +0.396484375 +0.37109375 +0.38671875 +0.380859375 +0.3671875 +0.39453125 +0.365234375 +0.390625 +0.39453125 +0.390625 +0.376953125 +0.39453125 +0.388671875 +0.40234375 +0.3984375 +0.376953125 +0.37890625 +0.38671875 +0.388671875 +0.37109375 +0.373046875 +0.38671875 +0.365234375 +0.40234375 +0.375 +0.375 +0.3984375 +0.3828125 +0.3984375 +0.390625 +0.384765625 +0.375 +0.388671875 +0.369140625 +0.388671875 +0.373046875 +0.380859375 +0.380859375 +0.376953125 +0.373046875 +0.37890625 +0.373046875 +0.38671875 +0.400390625 +0.38671875 +0.3828125 +0.3671875 +0.376953125 +0.375 +0.380859375 +0.3828125 +0.384765625 +0.380859375 +0.380859375 +0.376953125 +0.392578125 +0.3671875 +0.384765625 +0.384765625 +0.37890625 +0.390625 +0.373046875 +0.373046875 +0.369140625 +0.376953125 +0.365234375 +0.38671875 +0.39453125 +0.3828125 +0.3828125 +0.39453125 +0.380859375 +0.380859375 +0.390625 +0.404296875 +0.38671875 +0.376953125 +0.37109375 +0.375 +0.39453125 +0.40234375 +0.380859375 +0.376953125 +0.37109375 +0.388671875 +0.361328125 +0.384765625 +0.365234375 +0.373046875 +0.384765625 +0.37890625 +0.3671875 +0.384765625 +0.369140625 +0.392578125 +0.376953125 +0.3828125 +0.38671875 +0.392578125 +0.365234375 +0.369140625 +0.353515625 +0.388671875 +0.39453125 +0.37890625 +0.37890625 +0.36328125 +0.376953125 +0.390625 +0.392578125 +0.38671875 +0.375 +0.37890625 +0.404296875 +0.39453125 +0.376953125 +0.375 +0.3828125 +0.373046875 +0.373046875 +0.38671875 +0.369140625 +0.40625 +0.38671875 +0.4296875 +0.384765625 +0.400390625 +0.392578125 +0.388671875 +0.390625 +0.396484375 +0.380859375 +0.37109375 +0.37109375 +0.37890625 +0.39453125 +0.365234375 +0.38671875 +0.3828125 +0.392578125 +0.3671875 +0.41015625 +0.384765625 +0.375 +0.380859375 +0.375 +0.373046875 +0.37109375 +0.3828125 +0.392578125 +0.40625 +0.376953125 +0.3828125 +0.3828125 +0.373046875 +0.369140625 +0.37890625 +0.3671875 +0.408203125 +0.38671875 +0.375 +0.376953125 +0.375 +0.388671875 +0.37890625 +0.36328125 +0.384765625 +0.380859375 +0.36328125 +0.37890625 +0.373046875 +0.36328125 +0.3671875 +0.369140625 +0.37109375 +0.38671875 +0.37109375 +0.37890625 +0.380859375 +0.3828125 +0.37890625 +0.380859375 +0.375 +0.37109375 +0.37890625 +0.380859375 +0.353515625 +0.369140625 +0.375 +0.380859375 +0.369140625 +0.36328125 +0.384765625 +0.37890625 +0.392578125 +0.39453125 +0.390625 +0.37890625 +0.361328125 +0.375 +0.375 +0.3671875 +0.376953125 +0.37890625 +0.39453125 +0.37109375 +0.3828125 +0.365234375 +0.380859375 +0.390625 +0.369140625 +0.365234375 +0.37109375 +0.365234375 +0.392578125 +0.3671875 +0.3828125 +0.369140625 +0.390625 +0.380859375 +0.37109375 +0.3828125 +0.376953125 +0.3671875 +0.388671875 +0.37890625 +0.392578125 +0.37890625 +0.37890625 +0.37109375 +0.37890625 +0.400390625 +0.349609375 +0.375 +0.396484375 +0.439453125 +0.376953125 +0.38671875 +0.396484375 +0.40234375 +0.388671875 +0.423828125 +0.37890625 +0.458984375 +0.39453125 +0.4140625 +0.375 +0.4140625 +0.392578125 +0.39453125 +0.361328125 +0.369140625 +0.369140625 +0.38671875 +0.373046875 +0.390625 +0.35546875 +0.390625 +0.365234375 +0.400390625 +0.37890625 +0.375 +0.380859375 +0.380859375 +0.373046875 +0.37109375 +0.3671875 +0.3515625 +0.38671875 +0.376953125 +0.40234375 +0.361328125 +0.369140625 +0.388671875 +0.380859375 +0.384765625 +0.365234375 +0.380859375 +0.38671875 +0.361328125 +0.3828125 +0.34765625 +0.38671875 +0.373046875 +0.3828125 +0.365234375 +0.380859375 +0.3671875 +0.380859375 +0.369140625 +0.373046875 +0.388671875 +0.37890625 +0.396484375 +0.375 +0.384765625 +0.39453125 +0.3984375 +0.375 +0.380859375 +0.3671875 +0.384765625 +0.37109375 +0.376953125 +0.376953125 +0.369140625 +0.369140625 +0.388671875 +0.376953125 +0.380859375 +0.365234375 +0.369140625 +0.3984375 +0.3671875 +0.375 +0.390625 +0.35546875 +0.376953125 +0.35546875 +0.373046875 +0.35546875 +0.3515625 +0.369140625 +0.365234375 +0.365234375 +0.3671875 +0.369140625 +0.37109375 +0.365234375 +0.373046875 +0.375 +0.373046875 +0.37890625 +0.373046875 +0.37109375 +0.38671875 +0.37109375 +0.375 +0.365234375 +0.373046875 +0.369140625 +0.376953125 +0.37109375 +0.36328125 +0.365234375 +0.376953125 +0.359375 +0.3671875 +0.3828125 +0.369140625 +0.3671875 +0.39453125 +0.361328125 +0.412109375 +0.37890625 +0.4609375 +0.37890625 +0.390625 +0.3828125 +0.38671875 +0.37890625 +0.359375 +0.388671875 +0.37109375 +0.38671875 +0.390625 +0.3671875 +0.384765625 +0.392578125 +0.369140625 +0.365234375 +0.369140625 +0.39453125 +0.369140625 +0.369140625 +0.359375 +0.37109375 +0.375 +0.36328125 +0.373046875 +0.369140625 +0.369140625 +0.37109375 +0.375 +0.365234375 +0.37109375 +0.376953125 +0.37890625 +0.375 +0.3828125 +0.37890625 +0.361328125 +0.37890625 +0.38671875 +0.376953125 +0.37109375 +0.365234375 +0.380859375 +0.35546875 +0.369140625 +0.357421875 +0.365234375 +0.369140625 +0.345703125 +0.396484375 +0.37109375 +0.37109375 +0.353515625 +0.361328125 +0.357421875 +0.365234375 +0.35546875 +0.365234375 +0.36328125 +0.3515625 +0.361328125 +0.37109375 +0.353515625 +0.361328125 +0.380859375 +0.375 +0.341796875 +0.365234375 +0.37109375 +0.3671875 +0.3671875 +0.361328125 +0.369140625 +0.345703125 +0.357421875 +0.36328125 +0.3515625 +0.373046875 +0.37890625 +0.35546875 +0.380859375 +0.35546875 +0.361328125 +0.35546875 +0.365234375 +0.373046875 +0.375 +0.380859375 +0.361328125 +0.3671875 +0.37890625 +0.369140625 +0.38671875 +0.376953125 +0.349609375 +0.369140625 +0.37109375 +0.357421875 +0.376953125 +0.35546875 +0.3828125 +0.375 +0.365234375 +0.34765625 +0.36328125 +0.35546875 +0.34765625 +0.36328125 +0.36328125 +0.369140625 +0.390625 +0.36328125 +0.353515625 +0.37109375 +0.38671875 +0.384765625 +0.3671875 +0.365234375 +0.380859375 +0.357421875 +0.349609375 +0.35546875 +0.35546875 +0.380859375 +0.35546875 +0.376953125 +0.369140625 +0.3828125 +0.37890625 +0.3515625 +0.3671875 +0.365234375 +0.36328125 +0.37109375 +0.36328125 +0.349609375 +0.37109375 +0.361328125 +0.3671875 +0.361328125 +0.357421875 +0.365234375 +0.384765625 +0.359375 +0.37890625 +0.353515625 +0.35546875 +0.35546875 +0.3671875 +0.37109375 +0.365234375 +0.361328125 +0.35546875 +0.373046875 +0.361328125 +0.373046875 +0.359375 +0.359375 +0.361328125 +0.3671875 +0.359375 +0.3828125 +0.365234375 +0.375 +0.384765625 +0.375 +0.375 +0.37890625 +0.3515625 +0.375 +0.341796875 +0.35546875 +0.376953125 +0.3828125 +0.375 +0.380859375 +0.3828125 +0.357421875 +0.35546875 +0.36328125 +0.375 +0.3671875 +0.365234375 +0.345703125 +0.3671875 +0.3671875 +0.373046875 +0.36328125 +0.369140625 +0.376953125 +0.341796875 +0.361328125 +0.37109375 +0.36328125 +0.373046875 +0.375 +0.349609375 +0.37109375 +0.357421875 +0.36328125 +0.35546875 +0.359375 +0.373046875 +0.353515625 +0.36328125 +0.361328125 +0.365234375 +0.35546875 +0.359375 +0.37109375 +0.357421875 +0.365234375 +0.35546875 +0.3515625 +0.380859375 +0.373046875 +0.35546875 +0.369140625 +0.35546875 +0.369140625 +0.357421875 +0.38671875 +0.37109375 +0.37890625 +0.375 +0.380859375 +0.390625 +0.462890625 +0.384765625 +0.3828125 +0.38671875 +0.384765625 +0.37109375 +0.375 +0.365234375 +0.37109375 +0.3671875 +0.369140625 +0.38671875 +0.3671875 +0.353515625 +0.365234375 +0.365234375 +0.380859375 +0.361328125 +0.36328125 +0.341796875 +0.365234375 +0.349609375 +0.37109375 +0.369140625 +0.3515625 +0.357421875 +0.3515625 +0.369140625 +0.36328125 +0.361328125 +0.365234375 +0.384765625 +0.3515625 +0.35546875 +0.359375 +0.3671875 +0.365234375 +0.357421875 +0.35546875 +0.353515625 +0.369140625 +0.35546875 +0.35546875 +0.36328125 +0.35546875 +0.361328125 +0.3828125 +0.35546875 +0.357421875 +0.34765625 +0.376953125 +0.35546875 +0.365234375 +0.36328125 +0.35546875 +0.373046875 +0.369140625 +0.345703125 +0.36328125 +0.359375 +0.357421875 +0.361328125 +0.353515625 +0.361328125 +0.376953125 +0.3515625 +0.361328125 +0.365234375 +0.37109375 +0.388671875 +0.373046875 +0.353515625 +0.357421875 +0.353515625 +0.353515625 +0.34765625 +0.365234375 +0.376953125 +0.3671875 +0.361328125 +0.376953125 +0.357421875 +0.333984375 +0.365234375 +0.35546875 +0.3671875 +0.37109375 +0.353515625 +0.34375 +0.361328125 +0.353515625 +0.365234375 +0.34765625 +0.349609375 +0.353515625 +0.39453125 +0.359375 +0.361328125 +0.36328125 +0.361328125 +0.345703125 +0.361328125 +0.345703125 +0.36328125 +0.357421875 +0.353515625 +0.36328125 +0.36328125 +0.369140625 +0.36328125 +0.349609375 +0.373046875 +0.353515625 +0.37890625 +0.345703125 +0.353515625 +0.34765625 +0.373046875 +0.365234375 +0.3515625 +0.37890625 +0.369140625 +0.37109375 +0.361328125 +0.359375 +0.345703125 +0.34765625 +0.345703125 +0.341796875 +0.361328125 +0.345703125 +0.357421875 +0.34375 +0.365234375 +0.36328125 +0.37109375 +0.357421875 +0.361328125 +0.345703125 +0.349609375 +0.353515625 +0.369140625 +0.333984375 +0.3515625 +0.349609375 +0.359375 +0.353515625 +0.365234375 +0.359375 +0.35546875 +0.34765625 +0.365234375 +0.36328125 +0.373046875 +0.359375 +0.345703125 +0.337890625 +0.361328125 +0.380859375 +0.349609375 +0.36328125 +0.345703125 +0.37109375 +0.349609375 +0.361328125 +0.34375 +0.353515625 +0.37109375 +0.359375 +0.365234375 +0.35546875 +0.36328125 +0.353515625 +0.34765625 +0.3671875 +0.359375 +0.36328125 +0.337890625 +0.36328125 +0.353515625 +0.3515625 +0.341796875 +0.373046875 +0.345703125 +0.345703125 +0.365234375 +0.3515625 +0.3515625 +0.359375 +0.361328125 +0.349609375 +0.353515625 +0.373046875 +0.345703125 +0.36328125 +0.34375 +0.349609375 +0.337890625 +0.359375 +0.359375 +0.3515625 +0.369140625 +0.337890625 +0.353515625 +0.349609375 +0.359375 +0.349609375 +0.37890625 +0.359375 +0.357421875 +0.353515625 +0.359375 +0.341796875 +0.353515625 +0.361328125 +0.369140625 +0.3515625 +0.365234375 +0.35546875 +0.345703125 +0.359375 +0.36328125 +0.361328125 +0.361328125 +0.33984375 +0.3671875 +0.35546875 +0.3671875 +0.359375 +0.369140625 +0.349609375 +0.376953125 +0.34375 +0.34765625 +0.35546875 +0.365234375 +0.35546875 +0.3515625 +0.3671875 +0.361328125 +0.349609375 +0.359375 +0.35546875 +0.36328125 +0.365234375 +0.3515625 +0.3515625 +0.353515625 +0.34375 +0.361328125 +0.353515625 +0.349609375 +0.357421875 +0.35546875 +0.365234375 +0.357421875 +0.34375 +0.359375 +0.345703125 +0.380859375 +0.37109375 +0.357421875 +0.353515625 +0.34765625 +0.337890625 +0.3359375 +0.3671875 +0.349609375 +0.353515625 +0.34375 +0.35546875 +0.345703125 +0.3671875 +0.3515625 +0.349609375 +0.365234375 +0.349609375 +0.353515625 +0.353515625 +0.37109375 +0.36328125 +0.36328125 +0.34375 +0.37109375 +0.353515625 +0.365234375 +0.369140625 +0.349609375 +0.353515625 +0.3515625 +0.35546875 +0.361328125 +0.359375 +0.33203125 +0.353515625 +0.353515625 +0.357421875 +0.37109375 +0.353515625 +0.357421875 +0.37109375 +0.359375 +0.357421875 +0.361328125 +0.33984375 +0.35546875 +0.349609375 +0.35546875 +0.34375 +0.34375 +0.357421875 +0.349609375 +0.333984375 +0.345703125 +0.35546875 +0.353515625 +0.357421875 +0.3515625 +0.365234375 +0.3671875 +0.35546875 +0.369140625 +0.3515625 +0.345703125 +0.35546875 +0.34765625 +0.34375 +0.353515625 +0.3515625 +0.3671875 +0.361328125 +0.359375 +0.357421875 +0.35546875 +0.353515625 +0.33984375 +0.35546875 +0.365234375 +0.361328125 +0.3359375 +0.359375 +0.34765625 +0.35546875 +0.357421875 +0.34765625 +0.349609375 +0.34765625 +0.34375 +0.35546875 +0.345703125 +0.341796875 +0.337890625 +0.359375 +0.3515625 +0.36328125 +0.3671875 +0.3515625 +0.349609375 +0.33984375 +0.35546875 +0.34375 +0.369140625 +0.361328125 +0.361328125 +0.35546875 +0.353515625 +0.345703125 +0.3515625 +0.353515625 +0.35546875 +0.36328125 +0.34765625 +0.35546875 +0.345703125 +0.345703125 +0.361328125 +0.349609375 +0.359375 +0.359375 +0.337890625 +0.3671875 +0.3515625 +0.34765625 +0.359375 +0.328125 +0.36328125 +0.361328125 +0.337890625 +0.3515625 +0.3515625 +0.34375 +0.36328125 +0.349609375 +0.34375 +0.369140625 +0.365234375 +0.359375 +0.33984375 +0.33984375 +0.36328125 +0.34375 +0.34375 +0.3515625 +0.35546875 +0.349609375 +0.361328125 +0.341796875 +0.34375 +0.357421875 diff --git a/model.pth b/model.pth Binary files differnew file mode 100644 index 0000000..4cd979c --- /dev/null +++ b/model.pth diff --git a/transformer_shortest_paths.ipynb b/transformer_shortest_paths.ipynb index 7a1a2e4..3949fd5 100644 --- a/transformer_shortest_paths.ipynb +++ b/transformer_shortest_paths.ipynb @@ -23,6 +23,7 @@ { "cell_type": "code", "execution_count": 1, + "execution_state": "idle", "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -38,22 +39,26 @@ "import torch.nn as nn\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", + "from torch.utils.data import DataLoader, TensorDataset\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.\"" + "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" }, @@ -61,8 +66,8 @@ "source": [ "# VTXS numbers here are inclusive\n", "MIN_VTXS = 3\n", - "MAX_VTXS = 8\n", - "MAX_TUNE_VTXS = 8 # 15\n", + "MAX_VTXS = 15\n", + "MAX_TUNE_VTXS = 7 # 15\n", "AVG_DEG = 2\n", "SEQ_LEN = MAX_VTXS + 1 # means 32 edges, final token is the target vertex\n", "PAD_TOKEN = 0\n", @@ -81,7 +86,8 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 18, + "execution_state": "idle", "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -120,15 +126,15 @@ "output: [number of vertices]+[d(1,i) for i in range(n)] if target=None\n", "if target is set to some value, then we instead just output that specific distance\n", "\"\"\"\n", - "def SSSP(n, G, target=2):\n", - " dist = [n for _ in G]\n", + "def SSSP(G, target=2):\n", + " dist = [MAX_VTXS for _ in 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] == n:\n", + " if dist[x] == MAX_VTXS:\n", " dist[x] = 1 + dist[vtx]\n", " frontier.append(x)\n", " if x == target:\n", @@ -145,18 +151,29 @@ " for i in range(size):\n", " n = random.randint(MIN_VTXS, MAX_VTXS)\n", " edge_list, adj_list = random_graph(n)\n", - " dist = SSSP(n, adj_list)\n", + " dist = SSSP(adj_list)\n", " edge_list[-1] = 2 # target token\n", " graphs1.append(edge_list)\n", " distance1.append(dist)\n", " \n", - " data = torch.tensor(graphs1, device=device)\n", - " labels = torch.tensor(distance1, dtype=torch.bfloat16, device=device)\n", + " data = torch.tensor(graphs1)\n", + " labels = torch.tensor(distance1, dtype=torch.bfloat16)\n", " padding = data == PAD_TOKEN\n", " return data, labels, padding\n", "\n", - "def vertices_on_shortest_12_path(n, G, target=2):\n", - " dist = [n for _ in G]\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/{idx}.pickle', 'wb') as file:\n", + " pickle.dump(everything, file)\n", + "\n", + "def vertices_on_shortest_12_path(G, target=2):\n", + " dist = [MAX_VTXS for _ in G]\n", " parent = [-1 for _ in G]\n", " dist[1] = 0\n", " frontier = deque()\n", @@ -164,7 +181,7 @@ " while len(frontier) > 0:\n", " vtx = frontier.popleft()\n", " for x in G[vtx]:\n", - " if dist[x] == n:\n", + " if dist[x] == MAX_VTXS:\n", " parent[x] = vtx\n", " dist[x] = 1 + dist[vtx]\n", " frontier.append(x)\n", @@ -176,15 +193,15 @@ " return list(reversed(path))\n", " return []\n", "\n", - "def mktunebatch(size):\n", + "def mktunebatch(size, test=False):\n", " graphs = []\n", " distance = []\n", " \n", " for i in range(size):\n", - " n = random.randint(MIN_VTXS, MAX_TUNE_VTXS)\n", + " n = random.randint(MIN_VTXS, MAX_VTXS if test else MAX_TUNE_VTXS)\n", " while True:\n", " edge_list, adj_list = random_graph(n)\n", - " path = vertices_on_shortest_12_path(n, adj_list)\n", + " path = vertices_on_shortest_12_path(adj_list)\n", " if len(path) > 1:\n", " target_vtx_idx = random.randrange(1, len(path))\n", " target_vtx = path[target_vtx_idx]\n", @@ -202,30 +219,63 @@ { "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(1000):\n", + "# executor.submit(savebatch, 2**20, i)\n", + "# executor.shutdown()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "execution_state": "idle", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(tensor([[1, 2, 4, 5, 3, 4, 1, 7, 1, 2, 1, 4, 0, 0, 0, 0, 2],\n", - " [4, 7, 5, 8, 1, 3, 6, 7, 3, 5, 4, 6, 2, 7, 0, 0, 2],\n", - " [3, 5, 1, 3, 4, 5, 1, 4, 1, 5, 0, 0, 0, 0, 0, 0, 2],\n", - " [3, 5, 2, 5, 2, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2],\n", - " [2, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2]], device='cuda:0'),\n", - " tensor([1., 8., 5., 1., 1.], device='cuda:0', dtype=torch.bfloat16),\n", + "(tensor([[ 1, 2, 5, 12, 3, 12, 2, 11, 9, 12, 2, 10, 1, 7, 1, 2, 9, 10,\n", + " 1, 9, 4, 12, 0, 0, 0, 0, 0, 0, 0, 0, 2],\n", + " [ 9, 12, 4, 7, 8, 10, 5, 13, 1, 13, 3, 13, 7, 12, 5, 6, 3, 4,\n", + " 6, 13, 2, 7, 0, 0, 0, 0, 0, 0, 0, 0, 2],\n", + " [ 1, 5, 8, 12, 2, 9, 2, 7, 5, 9, 10, 11, 6, 10, 4, 12, 1, 2,\n", + " 4, 11, 2, 5, 2, 4, 0, 0, 0, 0, 0, 0, 2],\n", + " [ 5, 8, 3, 6, 4, 5, 2, 3, 4, 9, 3, 8, 5, 7, 4, 9, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2],\n", + " [ 6, 13, 1, 13, 1, 4, 6, 13, 5, 7, 2, 4, 10, 12, 4, 6, 8, 11,\n", + " 7, 11, 3, 8, 3, 5, 4, 12, 0, 0, 0, 0, 2]]),\n", + " tensor([ 1., 5., 1., 15., 2.], dtype=torch.bfloat16),\n", " tensor([[False, False, False, False, False, False, False, False, False, False,\n", - " False, False, True, True, True, True, False],\n", + " False, False, False, False, False, False, False, False, False, False,\n", + " False, False, 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, True, True, False],\n", + " False, False, False, False, False, False, False, False, False, False,\n", + " False, False, True, True, True, True, True, True, True, True,\n", + " False],\n", " [False, False, False, False, False, False, False, False, False, False,\n", - " True, True, True, True, True, True, False],\n", - " [False, False, False, False, False, False, False, False, True, True,\n", - " True, True, True, True, True, True, False],\n", - " [False, False, False, False, True, True, True, True, True, True,\n", - " True, True, True, True, True, True, False]], device='cuda:0'))" + " False, False, False, False, False, False, False, False, False, False,\n", + " False, False, False, False, 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, 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, True, True, True, True,\n", + " False]]))" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -236,39 +286,40 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, + "execution_state": "idle", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(array([683., 0., 0., 0., 0., 0., 0., 0., 0., 427., 0.,\n", - " 0., 0., 0., 0., 0., 0., 0., 256., 0., 0., 0.,\n", - " 0., 0., 0., 0., 0., 161., 0., 0., 0., 0., 0.,\n", - " 0., 0., 0., 140., 0., 0., 0., 0., 0., 0., 0.,\n", - " 0., 125., 0., 0., 0., 0., 0., 0., 0., 0., 139.,\n", - " 0., 0., 0., 0., 0., 0., 0., 0., 117.]),\n", - " array([1. , 1.109375, 1.21875 , 1.328125, 1.4375 , 1.546875,\n", - " 1.65625 , 1.765625, 1.875 , 1.984375, 2.09375 , 2.203125,\n", - " 2.3125 , 2.421875, 2.53125 , 2.640625, 2.75 , 2.859375,\n", - " 2.96875 , 3.078125, 3.1875 , 3.296875, 3.40625 , 3.515625,\n", - " 3.625 , 3.734375, 3.84375 , 3.953125, 4.0625 , 4.171875,\n", - " 4.28125 , 4.390625, 4.5 , 4.609375, 4.71875 , 4.828125,\n", - " 4.9375 , 5.046875, 5.15625 , 5.265625, 5.375 , 5.484375,\n", - " 5.59375 , 5.703125, 5.8125 , 5.921875, 6.03125 , 6.140625,\n", - " 6.25 , 6.359375, 6.46875 , 6.578125, 6.6875 , 6.796875,\n", - " 6.90625 , 7.015625, 7.125 , 7.234375, 7.34375 , 7.453125,\n", - " 7.5625 , 7.671875, 7.78125 , 7.890625, 8. ]),\n", + "(array([523., 0., 0., 0., 390., 0., 0., 0., 0., 238., 0.,\n", + " 0., 0., 92., 0., 0., 0., 0., 40., 0., 0., 0.,\n", + " 15., 0., 0., 0., 0., 5., 0., 0., 0., 0., 2.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 743.]),\n", + " array([ 1. , 1.21875, 1.4375 , 1.65625, 1.875 , 2.09375,\n", + " 2.3125 , 2.53125, 2.75 , 2.96875, 3.1875 , 3.40625,\n", + " 3.625 , 3.84375, 4.0625 , 4.28125, 4.5 , 4.71875,\n", + " 4.9375 , 5.15625, 5.375 , 5.59375, 5.8125 , 6.03125,\n", + " 6.25 , 6.46875, 6.6875 , 6.90625, 7.125 , 7.34375,\n", + " 7.5625 , 7.78125, 8. , 8.21875, 8.4375 , 8.65625,\n", + " 8.875 , 9.09375, 9.3125 , 9.53125, 9.75 , 9.96875,\n", + " 10.1875 , 10.40625, 10.625 , 10.84375, 11.0625 , 11.28125,\n", + " 11.5 , 11.71875, 11.9375 , 12.15625, 12.375 , 12.59375,\n", + " 12.8125 , 13.03125, 13.25 , 13.46875, 13.6875 , 13.90625,\n", + " 14.125 , 14.34375, 14.5625 , 14.78125, 15. ]),\n", " <BarContainer object of 64 artists>)" ] }, - "execution_count": 5, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] @@ -283,44 +334,40 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, + "execution_state": "idle", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(array([1.488e+03, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n", - " 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n", - " 4.340e+02, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n", - " 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n", - " 0.000e+00, 1.030e+02, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n", - " 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n", - " 0.000e+00, 0.000e+00, 1.700e+01, 0.000e+00, 0.000e+00, 0.000e+00,\n", - " 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n", - " 0.000e+00, 0.000e+00, 0.000e+00, 5.000e+00, 0.000e+00, 0.000e+00,\n", - " 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n", - " 0.000e+00, 0.000e+00, 0.000e+00, 1.000e+00]),\n", - " array([1. , 1.078125, 1.15625 , 1.234375, 1.3125 , 1.390625,\n", - " 1.46875 , 1.546875, 1.625 , 1.703125, 1.78125 , 1.859375,\n", - " 1.9375 , 2.015625, 2.09375 , 2.171875, 2.25 , 2.328125,\n", - " 2.40625 , 2.484375, 2.5625 , 2.640625, 2.71875 , 2.796875,\n", - " 2.875 , 2.953125, 3.03125 , 3.109375, 3.1875 , 3.265625,\n", - " 3.34375 , 3.421875, 3.5 , 3.578125, 3.65625 , 3.734375,\n", - " 3.8125 , 3.890625, 3.96875 , 4.046875, 4.125 , 4.203125,\n", - " 4.28125 , 4.359375, 4.4375 , 4.515625, 4.59375 , 4.671875,\n", - " 4.75 , 4.828125, 4.90625 , 4.984375, 5.0625 , 5.140625,\n", - " 5.21875 , 5.296875, 5.375 , 5.453125, 5.53125 , 5.609375,\n", - " 5.6875 , 5.765625, 5.84375 , 5.921875, 6. ]),\n", + "(array([1516., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 420., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 94., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 16., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 2.]),\n", + " array([1. , 1.0625, 1.125 , 1.1875, 1.25 , 1.3125, 1.375 , 1.4375,\n", + " 1.5 , 1.5625, 1.625 , 1.6875, 1.75 , 1.8125, 1.875 , 1.9375,\n", + " 2. , 2.0625, 2.125 , 2.1875, 2.25 , 2.3125, 2.375 , 2.4375,\n", + " 2.5 , 2.5625, 2.625 , 2.6875, 2.75 , 2.8125, 2.875 , 2.9375,\n", + " 3. , 3.0625, 3.125 , 3.1875, 3.25 , 3.3125, 3.375 , 3.4375,\n", + " 3.5 , 3.5625, 3.625 , 3.6875, 3.75 , 3.8125, 3.875 , 3.9375,\n", + " 4. , 4.0625, 4.125 , 4.1875, 4.25 , 4.3125, 4.375 , 4.4375,\n", + " 4.5 , 4.5625, 4.625 , 4.6875, 4.75 , 4.8125, 4.875 , 4.9375,\n", + " 5. ]),\n", " <BarContainer object of 64 artists>)" ] }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] @@ -334,25 +381,6 @@ ] }, { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "# import pickle\n", - "\n", - "# graphs, labels, _ = mkbatch(3*10**5)\n", - "\n", - "# data = {\n", - "# \"data\": graphs,\n", - "# \"labels\": labels\n", - "# }\n", - "\n", - "# with open('data.pkl', 'wb') as file:\n", - "# pickle.dump(data, file)" - ] - }, - { "cell_type": "markdown", "metadata": { "id": "Q3Cg_8UQep8g" @@ -363,7 +391,8 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 5, + "execution_state": "idle", "metadata": { "id": "tLOWhg_CeWzH" }, @@ -403,7 +432,8 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 6, + "execution_state": "idle", "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -416,8 +446,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Training data: 524M\n", - "Trainable parameters in the model: 800K\n" + "Training data: 1048M\n", + "Trainable parameters in the model: 200K\n" ] } ], @@ -426,58 +456,63 @@ "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 = 1000\n", - "BSZ = 2**15 # Batch size\n", - "BPE = 16 # Batches per epoch\n", - "NHEADS = 8\n", - "NLAYERS = 16\n", + "BSZ = 2**17 # Batch size\n", + "BPE = 8 # Batches per epoch\n", + "NHEADS = 2\n", + "NLAYERS = 4\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", + "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*BSZ*BPE//10**6}M\")\n", + "print(f\"Training data: {NEPOCHS*BPE*BSZ//10**6}M\")\n", "print(f\"Trainable parameters in the model: {trainable_params//1000}K\")\n", "\n", "train_err = []\n", - "test_err = []\n", + "epoch = 0\n", "\n", "# clear loss file\n", "open('loss', 'w').close()" ] }, { - "cell_type": "code", - "execution_count": 27, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "LR = 2e-6\n", - "WD = 0 # 1e-5\n", + "MODEL_DIM = 64 # Dimension of model (embedding and transformer)\n", + "NEPOCHS = 1000\n", + "BSZ = 2**17 # Batch size\n", + "BPE = 8 # Batches per epoch\n", + "NHEADS = 2\n", + "NLAYERS = 4\n", + "DROPOUT = 0 # 0.2\n", "\n", - "criterion = nn.MSELoss()\n", - "optimizer = torch.optim.Adam(model.parameters(), lr=LR, weight_decay=WD)" + "LR of 8e-4 for 1000 epochs to get down to 0.35546875" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 8, + "execution_state": "idle", "metadata": {}, "outputs": [], "source": [ - "# from torch.utils.data import DataLoader, TensorDataset\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", + "model.load_state_dict(torch.load('model.pth', weights_only=True))\n", "\n", - "# with open(\"data.pkl\", \"rb\") as f:\n", - "# pickled_stuff = pickle.load(f)\n", + "LR = 8e-4\n", + "WD = 0 # 1e-5\n", "\n", - "# data = pickled_stuff[\"data\"].to(device)\n", - "# label = pickled_stuff[\"labels\"].to(device)\n", - "# padding_mask = (data == PAD_TOKEN).bool().to(device)\n", - "# dataset = TensorDataset(data, label, padding_mask)\n", - "# # train_dataset, test_dataset = torch.utils.data.random_split(dataset, [.9, .1])\n", - "# train_loader = DataLoader(dataset, batch_size=BSZ, shuffle=True)" + "criterion = nn.MSELoss()\n", + "optimizer = torch.optim.Adam(model.parameters(), lr=LR, weight_decay=WD)\n", + "# scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, patience=100, cooldown=100)" ] }, { @@ -492,6 +527,7 @@ { "cell_type": "code", "execution_count": 12, + "execution_state": "idle", "metadata": {}, "outputs": [], "source": [ @@ -499,7 +535,7 @@ " model.eval()\n", " test_loss = 0\n", " with torch.no_grad():\n", - " batch_src, batch_labels, batch_padding_mask = mkbatch(BSZ)\n", + " batch_src, batch_labels, batch_padding_mask = map(lambda x: x.to(device), mkbatch(BSZ))\n", " output = model(batch_src, batch_padding_mask)\n", " loss = criterion(output.squeeze(1), batch_labels)\n", " return loss.item()\n", @@ -509,7 +545,7 @@ " model.eval()\n", " test_loss = 0\n", " with torch.no_grad():\n", - " batch_src, batch_labels, batch_padding_mask = mkbatch(BSZ)\n", + " batch_src, batch_labels, batch_padding_mask = map(lambda x: x.to(device), mkbatch(BSZ))\n", " output = model(batch_src, batch_padding_mask)\n", " loss = criterion(output[batch_labels == 1].squeeze(1), batch_labels[batch_labels==1])\n", " return loss.item()" @@ -517,7 +553,8 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, + "execution_state": "running", "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -531,255 +568,333 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 2.97it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/1000 \t Train Err: 1.1650 \t Test Err: 1.1562, Test short loss: 0.0006\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.07it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 2/1000 \t Train Err: 1.1616 \t Test Err: 1.1797, Test short loss: 0.0006\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.06it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 3/1000 \t Train Err: 1.1660 \t Test Err: 1.1562, Test short loss: 0.0006\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.02it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 4/1000 \t Train Err: 1.1621 \t Test Err: 1.1719, Test short loss: 0.0007\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.02it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 5/1000 \t Train Err: 1.1597 \t Test Err: 1.1562, Test short loss: 0.0006\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.00it/s]\n" + "/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", + "/home/sipb/.venv/lib64/python3.12/site-packages/torch/_inductor/compile_fx.py:167: UserWarning: TensorFloat32 tensor cores for float32 matrix multiplication available but not enabled. Consider setting `torch.set_float32_matmul_precision('high')` for better performance.\n", + " warnings.warn(\n", + "/tmp/torchinductor_sipb/nj/cnjfg6sudczhbwjig6u6ixumyik7x7ugjn4x43lbushjy4vv4pwz.py:883: 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, (1048576, 64), (64, 1), 0), reinterpret_tensor(primals_5, (64, 192), (1, 64), 0), out=buf2)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Epoch 6/1000 \t Train Err: 1.1694 \t Test Err: 1.1406, Test short loss: 0.0007\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.02it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 7/1000 \t Train Err: 1.1660 \t Test Err: 1.1797, Test short loss: 0.0007\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.02it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 8/1000 \t Train Err: 1.1611 \t Test Err: 1.1562, Test short loss: 0.0007\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.02it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 9/1000 \t Train Err: 1.1665 \t Test Err: 1.1328, Test short loss: 0.0006\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.02it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 10/1000 \t Train Err: 1.1685 \t Test Err: 1.1797, Test short loss: 0.0006\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.02it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 11/1000 \t Train Err: 1.1582 \t Test Err: 1.1484, Test short loss: 0.0007\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.02it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 12/1000 \t Train Err: 1.1680 \t Test Err: 1.1641, Test short loss: 0.0007\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.02it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 13/1000 \t Train Err: 1.1582 \t Test Err: 1.1562, Test short loss: 0.0006\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.01it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 14/1000 \t Train Err: 1.1689 \t Test Err: 1.1641, Test short loss: 0.0006\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:05<00:00, 3.02it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 15/1000 \t Train Err: 1.1670 \t Test Err: 1.1641, Test short loss: 0.0007\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - " 31%|███████████████████████████████████████████████▌ | 5/16 [00:01<00:04, 2.51it/s]\n" - ] - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[28], line 10\u001b[0m\n\u001b[1;32m 8\u001b[0m output \u001b[38;5;241m=\u001b[39m model(batch_src, batch_padding_mask)\n\u001b[1;32m 9\u001b[0m loss \u001b[38;5;241m=\u001b[39m criterion(output\u001b[38;5;241m.\u001b[39msqueeze(\u001b[38;5;241m1\u001b[39m), batch_labels)\n\u001b[0;32m---> 10\u001b[0m train_loss \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[43mloss\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitem\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;241m/\u001b[39m BPE\n\u001b[1;32m 11\u001b[0m loss\u001b[38;5;241m.\u001b[39mbackward()\n\u001b[1;32m 12\u001b[0m optimizer\u001b[38;5;241m.\u001b[39mstep()\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + "Epoch 0/1000 \t Train Err: 85.0000\n", + "Epoch 0/1000 \t Train Err: 72.0000\n", + "Epoch 0/1000 \t Train Err: 63.5000\n", + "Epoch 0/1000 \t Train Err: 58.0000\n", + "Epoch 0/1000 \t Train Err: 53.7500\n", + "Epoch 0/1000 \t Train Err: 51.0000\n", + "Epoch 0/1000 \t Train Err: 49.2500\n", + "Epoch 0/1000 \t Train Err: 48.0000\n", + "Epoch 0/1000 \t Train Err: 47.2500\n", + "Epoch 0/1000 \t Train Err: 46.2500\n", + "Epoch 0/1000 \t Train Err: 45.5000\n", + "Epoch 0/1000 \t Train Err: 45.2500\n", + "Epoch 0/1000 \t Train Err: 44.5000\n", + "Epoch 0/1000 \t Train Err: 44.2500\n", + "Epoch 0/1000 \t Train Err: 44.2500\n", + "Epoch 0/1000 \t Train Err: 44.2500\n", + "Epoch 1/1000 \t Train Err: 43.5000\n", + "Epoch 1/1000 \t Train Err: 43.5000\n", + "Epoch 1/1000 \t Train Err: 43.5000\n", + "Epoch 1/1000 \t Train Err: 43.5000\n", + "Epoch 1/1000 \t Train Err: 43.2500\n", + "Epoch 1/1000 \t Train Err: 43.2500\n", + "Epoch 1/1000 \t Train Err: 43.0000\n", + "Epoch 1/1000 \t Train Err: 43.0000\n", + "Epoch 1/1000 \t Train Err: 42.7500\n", + "Epoch 1/1000 \t Train Err: 42.5000\n", + "Epoch 1/1000 \t Train Err: 42.5000\n", + "Epoch 1/1000 \t Train Err: 42.7500\n", + "Epoch 1/1000 \t Train Err: 42.7500\n", + "Epoch 1/1000 \t Train Err: 42.5000\n", + "Epoch 1/1000 \t Train Err: 42.2500\n", + "Epoch 1/1000 \t Train Err: 42.2500\n", + "Epoch 2/1000 \t Train Err: 42.2500\n", + "Epoch 2/1000 \t Train Err: 42.5000\n", + "Epoch 2/1000 \t Train Err: 42.0000\n", + "Epoch 2/1000 \t Train Err: 42.0000\n", + "Epoch 2/1000 \t Train Err: 42.0000\n", + "Epoch 2/1000 \t Train Err: 42.0000\n", + "Epoch 2/1000 \t Train Err: 42.0000\n", + "Epoch 2/1000 \t Train Err: 42.2500\n", + "Epoch 2/1000 \t Train Err: 41.7500\n", + "Epoch 2/1000 \t Train Err: 41.7500\n", + "Epoch 2/1000 \t Train Err: 41.2500\n", + "Epoch 2/1000 \t Train Err: 41.5000\n", + "Epoch 2/1000 \t Train Err: 41.5000\n", + "Epoch 2/1000 \t Train Err: 41.7500\n", + "Epoch 2/1000 \t Train Err: 41.2500\n", + "Epoch 2/1000 \t Train Err: 41.5000\n", + "Epoch 3/1000 \t Train Err: 41.5000\n", + "Epoch 3/1000 \t Train Err: 41.2500\n", + "Epoch 3/1000 \t Train Err: 41.5000\n", + "Epoch 3/1000 \t Train Err: 41.2500\n", + "Epoch 3/1000 \t Train Err: 41.2500\n", + "Epoch 3/1000 \t Train Err: 41.0000\n", + "Epoch 3/1000 \t Train Err: 41.0000\n", + "Epoch 3/1000 \t Train Err: 40.7500\n", + "Epoch 3/1000 \t Train Err: 40.7500\n", + "Epoch 3/1000 \t Train Err: 40.5000\n", + "Epoch 3/1000 \t Train Err: 40.5000\n", + "Epoch 3/1000 \t Train Err: 40.2500\n", + "Epoch 3/1000 \t Train Err: 40.0000\n", + "Epoch 3/1000 \t Train Err: 39.7500\n", + "Epoch 3/1000 \t Train Err: 39.2500\n", + "Epoch 3/1000 \t Train Err: 38.7500\n", + "Epoch 4/1000 \t Train Err: 38.0000\n", + "Epoch 4/1000 \t Train Err: 37.2500\n", + "Epoch 4/1000 \t Train Err: 36.5000\n", + "Epoch 4/1000 \t Train Err: 35.5000\n", + "Epoch 4/1000 \t Train Err: 35.0000\n", + "Epoch 4/1000 \t Train Err: 34.7500\n", + "Epoch 4/1000 \t Train Err: 34.7500\n", + "Epoch 4/1000 \t Train Err: 34.7500\n", + "Epoch 4/1000 \t Train Err: 34.5000\n", + "Epoch 4/1000 \t Train Err: 34.2500\n", + "Epoch 4/1000 \t Train Err: 33.7500\n", + "Epoch 4/1000 \t Train Err: 33.7500\n", + "Epoch 4/1000 \t Train Err: 33.5000\n", + "Epoch 4/1000 \t Train Err: 33.5000\n", + "Epoch 4/1000 \t Train Err: 33.0000\n", + "Epoch 4/1000 \t Train Err: 33.0000\n", + "Epoch 5/1000 \t Train Err: 33.0000\n", + "Epoch 5/1000 \t Train Err: 32.7500\n", + "Epoch 5/1000 \t Train Err: 32.7500\n", + "Epoch 5/1000 \t Train Err: 32.7500\n", + "Epoch 5/1000 \t Train Err: 32.5000\n", + "Epoch 5/1000 \t Train Err: 32.0000\n", + "Epoch 5/1000 \t Train Err: 32.5000\n", + "Epoch 5/1000 \t Train Err: 32.2500\n", + "Epoch 5/1000 \t Train Err: 32.5000\n", + "Epoch 5/1000 \t Train Err: 31.8750\n", + "Epoch 5/1000 \t Train Err: 31.6250\n", + "Epoch 5/1000 \t Train Err: 31.6250\n", + "Epoch 5/1000 \t Train Err: 31.6250\n", + "Epoch 5/1000 \t Train Err: 31.8750\n", + "Epoch 5/1000 \t Train Err: 31.5000\n", + "Epoch 5/1000 \t Train Err: 31.2500\n", + "Epoch 6/1000 \t Train Err: 31.1250\n", + "Epoch 6/1000 \t Train Err: 31.1250\n", + "Epoch 6/1000 \t Train Err: 31.2500\n", + "Epoch 6/1000 \t Train Err: 31.2500\n", + "Epoch 6/1000 \t Train Err: 31.0000\n", + "Epoch 6/1000 \t Train Err: 30.8750\n", + "Epoch 6/1000 \t Train Err: 31.0000\n", + "Epoch 6/1000 \t Train Err: 30.8750\n", + "Epoch 6/1000 \t Train Err: 30.8750\n", + "Epoch 6/1000 \t Train Err: 30.8750\n", + "Epoch 6/1000 \t Train Err: 30.7500\n", + "Epoch 6/1000 \t Train Err: 30.6250\n", + "Epoch 6/1000 \t Train Err: 30.5000\n", + "Epoch 6/1000 \t Train Err: 30.7500\n", + "Epoch 6/1000 \t Train Err: 30.3750\n", + "Epoch 6/1000 \t Train Err: 30.5000\n", + "Epoch 7/1000 \t Train Err: 30.6250\n", + "Epoch 7/1000 \t Train Err: 30.5000\n", + "Epoch 7/1000 \t Train Err: 30.3750\n", + "Epoch 7/1000 \t Train Err: 30.5000\n", + "Epoch 7/1000 \t Train Err: 30.5000\n", + "Epoch 7/1000 \t Train Err: 30.5000\n", + "Epoch 7/1000 \t Train Err: 30.3750\n", + "Epoch 7/1000 \t Train Err: 30.2500\n", + "Epoch 7/1000 \t Train Err: 30.2500\n", + "Epoch 7/1000 \t Train Err: 30.2500\n", + "Epoch 7/1000 \t Train Err: 30.1250\n", + "Epoch 7/1000 \t Train Err: 30.0000\n", + "Epoch 7/1000 \t Train Err: 30.2500\n", + "Epoch 7/1000 \t Train Err: 30.1250\n", + "Epoch 7/1000 \t Train Err: 30.1250\n", + "Epoch 7/1000 \t Train Err: 30.0000\n", + "Epoch 8/1000 \t Train Err: 30.0000\n", + "Epoch 8/1000 \t Train Err: 29.8750\n", + "Epoch 8/1000 \t Train Err: 30.0000\n", + "Epoch 8/1000 \t Train Err: 30.0000\n", + "Epoch 8/1000 \t Train Err: 29.7500\n", + "Epoch 8/1000 \t Train Err: 30.0000\n", + "Epoch 8/1000 \t Train Err: 29.8750\n", + "Epoch 8/1000 \t Train Err: 29.8750\n", + "Epoch 8/1000 \t Train Err: 29.8750\n", + "Epoch 8/1000 \t Train Err: 29.6250\n", + "Epoch 8/1000 \t Train Err: 29.6250\n", + "Epoch 8/1000 \t Train Err: 29.8750\n", + "Epoch 8/1000 \t Train Err: 29.8750\n", + "Epoch 8/1000 \t Train Err: 29.5000\n", + "Epoch 8/1000 \t Train Err: 29.8750\n", + "Epoch 8/1000 \t Train Err: 29.6250\n", + "Epoch 9/1000 \t Train Err: 29.7500\n", + "Epoch 9/1000 \t Train Err: 29.7500\n", + "Epoch 9/1000 \t Train Err: 29.5000\n", + "Epoch 9/1000 \t Train Err: 29.6250\n", + "Epoch 9/1000 \t Train Err: 29.6250\n", + "Epoch 9/1000 \t Train Err: 29.6250\n", + "Epoch 9/1000 \t Train Err: 29.6250\n", + "Epoch 9/1000 \t Train Err: 29.6250\n", + "Epoch 9/1000 \t Train Err: 29.5000\n", + "Epoch 9/1000 \t Train Err: 29.3750\n", + "Epoch 9/1000 \t Train Err: 29.5000\n", + "Epoch 9/1000 \t Train Err: 29.5000\n", + "Epoch 9/1000 \t Train Err: 29.5000\n", + "Epoch 9/1000 \t Train Err: 29.3750\n", + "Epoch 9/1000 \t Train Err: 29.5000\n", + "Epoch 9/1000 \t Train Err: 29.2500\n", + "Epoch 10/1000 \t Train Err: 29.2500\n", + "Epoch 10/1000 \t Train Err: 29.3750\n", + "Epoch 10/1000 \t Train Err: 29.2500\n", + "Epoch 10/1000 \t Train Err: 29.5000\n", + "Epoch 10/1000 \t Train Err: 29.3750\n", + "Epoch 10/1000 \t Train Err: 29.2500\n", + "Epoch 10/1000 \t Train Err: 29.2500\n", + "Epoch 10/1000 \t Train Err: 29.2500\n", + "Epoch 10/1000 \t Train Err: 29.3750\n", + "Epoch 10/1000 \t Train Err: 29.3750\n", + "Epoch 10/1000 \t Train Err: 29.2500\n", + "Epoch 10/1000 \t Train Err: 29.2500\n", + "Epoch 10/1000 \t Train Err: 29.2500\n", + "Epoch 10/1000 \t Train Err: 29.2500\n", + "Epoch 10/1000 \t Train Err: 29.2500\n", + "Epoch 10/1000 \t Train Err: 29.1250\n", + "Epoch 11/1000 \t Train Err: 29.2500\n", + "Epoch 11/1000 \t Train Err: 29.2500\n", + "Epoch 11/1000 \t Train Err: 29.2500\n", + "Epoch 11/1000 \t Train Err: 29.1250\n", + "Epoch 11/1000 \t Train Err: 29.0000\n", + "Epoch 11/1000 \t Train Err: 29.2500\n", + "Epoch 11/1000 \t Train Err: 29.1250\n", + "Epoch 11/1000 \t Train Err: 29.0000\n", + "Epoch 11/1000 \t Train Err: 29.0000\n", + "Epoch 11/1000 \t Train Err: 29.0000\n", + "Epoch 11/1000 \t Train Err: 29.0000\n", + "Epoch 11/1000 \t Train Err: 29.1250\n", + "Epoch 11/1000 \t Train Err: 29.1250\n", + "Epoch 11/1000 \t Train Err: 29.2500\n", + "Epoch 11/1000 \t Train Err: 29.1250\n", + "Epoch 11/1000 \t Train Err: 29.1250\n", + "Epoch 12/1000 \t Train Err: 29.1250\n", + "Epoch 12/1000 \t Train Err: 29.0000\n", + "Epoch 12/1000 \t Train Err: 29.0000\n", + "Epoch 12/1000 \t Train Err: 29.0000\n", + "Epoch 12/1000 \t Train Err: 28.8750\n", + "Epoch 12/1000 \t Train Err: 29.0000\n", + "Epoch 12/1000 \t Train Err: 29.1250\n", + "Epoch 12/1000 \t Train Err: 28.8750\n", + "Epoch 12/1000 \t Train Err: 29.0000\n", + "Epoch 12/1000 \t Train Err: 29.0000\n", + "Epoch 12/1000 \t Train Err: 29.0000\n", + "Epoch 12/1000 \t Train Err: 28.8750\n", + "Epoch 12/1000 \t Train Err: 28.7500\n", + "Epoch 12/1000 \t Train Err: 28.8750\n", + "Epoch 12/1000 \t Train Err: 28.8750\n", + "Epoch 12/1000 \t Train Err: 28.8750\n", + "Epoch 13/1000 \t Train Err: 29.0000\n", + "Epoch 13/1000 \t Train Err: 28.8750\n", + "Epoch 13/1000 \t Train Err: 29.1250\n", + "Epoch 13/1000 \t Train Err: 29.0000\n", + "Epoch 13/1000 \t Train Err: 29.0000\n", + "Epoch 13/1000 \t Train Err: 28.8750\n", + "Epoch 13/1000 \t Train Err: 28.8750\n", + "Epoch 13/1000 \t Train Err: 29.0000\n", + "Epoch 13/1000 \t Train Err: 28.8750\n", + "Epoch 13/1000 \t Train Err: 28.8750\n", + "Epoch 13/1000 \t Train Err: 28.7500\n", + "Epoch 13/1000 \t Train Err: 28.6250\n", + "Epoch 13/1000 \t Train Err: 28.6250\n", + "Epoch 13/1000 \t Train Err: 28.8750\n", + "Epoch 13/1000 \t Train Err: 28.6250\n", + "Epoch 13/1000 \t Train Err: 28.7500\n", + "Epoch 14/1000 \t Train Err: 28.7500\n", + "Epoch 14/1000 \t Train Err: 28.8750\n", + "Epoch 14/1000 \t Train Err: 28.5000\n", + "Epoch 14/1000 \t Train Err: 28.7500\n", + "Epoch 14/1000 \t Train Err: 28.7500\n", + "Epoch 14/1000 \t Train Err: 28.7500\n", + "Epoch 14/1000 \t Train Err: 28.7500\n", + "Epoch 14/1000 \t Train Err: 28.7500\n", + "Epoch 14/1000 \t Train Err: 28.8750\n", + "Epoch 14/1000 \t Train Err: 28.7500\n", + "Epoch 14/1000 \t Train Err: 28.7500\n", + "Epoch 14/1000 \t Train Err: 28.8750\n", + "Epoch 14/1000 \t Train Err: 28.7500\n", + "Epoch 14/1000 \t Train Err: 28.8750\n", + "Epoch 14/1000 \t Train Err: 28.7500\n", + "Epoch 14/1000 \t Train Err: 28.7500\n", + "Epoch 15/1000 \t Train Err: 28.7500\n", + "Epoch 15/1000 \t Train Err: 28.7500\n", + "Epoch 15/1000 \t Train Err: 28.6250\n", + "Epoch 15/1000 \t Train Err: 28.7500\n", + "Epoch 15/1000 \t Train Err: 28.6250\n", + "Epoch 15/1000 \t Train Err: 28.7500\n", + "Epoch 15/1000 \t Train Err: 28.7500\n", + "Epoch 15/1000 \t Train Err: 28.6250\n", + "Epoch 15/1000 \t Train Err: 28.7500\n", + "Epoch 15/1000 \t Train Err: 28.6250\n", + "Epoch 15/1000 \t Train Err: 28.7500\n", + "Epoch 15/1000 \t Train Err: 28.5000\n", + "Epoch 15/1000 \t Train Err: 28.6250\n", + "Epoch 15/1000 \t Train Err: 28.6250\n", + "Epoch 15/1000 \t Train Err: 28.5000\n", + "Epoch 15/1000 \t Train Err: 28.6250\n", + "Epoch 16/1000 \t Train Err: 28.3750\n", + "Epoch 16/1000 \t Train Err: 28.2500\n", + "Epoch 16/1000 \t Train Err: 28.1250\n", + "Epoch 16/1000 \t Train Err: 27.8750\n", + "Epoch 16/1000 \t Train Err: 28.0000\n", + "Epoch 16/1000 \t Train Err: 27.6250\n", + "Epoch 16/1000 \t Train Err: 27.5000\n", + "Epoch 16/1000 \t Train Err: 27.2500\n", + "Epoch 16/1000 \t Train Err: 27.1250\n", + "Epoch 16/1000 \t Train Err: 27.0000\n", + "Epoch 16/1000 \t Train Err: 26.5000\n", + "Epoch 16/1000 \t Train Err: 27.0000\n", + "Epoch 16/1000 \t Train Err: 26.5000\n", + "Epoch 16/1000 \t Train Err: 26.3750\n", + "Epoch 16/1000 \t Train Err: 25.6250\n", + "Epoch 16/1000 \t Train Err: 25.8750\n", + "Epoch 17/1000 \t Train Err: 25.2500\n", + "Epoch 17/1000 \t Train Err: 25.1250\n", + "Epoch 17/1000 \t Train Err: 24.8750\n", + "Epoch 17/1000 \t Train Err: 24.7500\n", + "Epoch 17/1000 \t Train Err: 24.1250\n", + "Epoch 17/1000 \t Train Err: 23.8750\n", + "Epoch 17/1000 \t Train Err: 23.7500\n", + "Epoch 17/1000 \t Train Err: 23.5000\n", + "Epoch 17/1000 \t Train Err: 23.1250\n", + "Epoch 17/1000 \t Train Err: 22.8750\n" ] } ], "source": [ - "for epoch in range(NEPOCHS):\n", + "while epoch < NEPOCHS:\n", " model.train()\n", - " train_loss = 0\n", - " for i in tqdm(range(BPE)):\n", - " batch_src, batch_labels, batch_padding_mask = mkbatch(BSZ)\n", - " # for batch_src, batch_labels, batch_padding_mask in tqdm(train_loader):\n", + " with open(f\"data/{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)\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 loader:\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() / BPE\n", + " train_loss = loss.item()\n", " loss.backward()\n", " optimizer.step()\n", - "\n", - " test_loss = evaluate()\n", - " test_short_loss = evaluate_short()\n", + " # scheduler.step(loss)\n", " \n", - " test_err.append(test_loss)\n", - " train_err.append(train_loss)\n", - " with open('loss', 'a') as f:\n", - " f.write(f\"{train_loss} {test_loss}\\n\")\n", - " print(f\"Epoch {epoch + 1}/{NEPOCHS} \\t Train Err: {train_loss:.4f} \\t Test Err: {test_loss:.4f}, Test short loss: {test_short_loss:.4f}\")\n", - " \n", - " if epoch % 100 == 99:\n", + " # test_loss = evaluate()\n", + " # test_short_loss = evaluate_short()\n", + " \n", + " # test_err.append(test_loss)\n", + " train_err.append(train_loss)\n", + " with open('loss', 'a') as f:\n", + " f.write(f\"{train_loss}\\n\")\n", + " print(f\"Epoch {epoch}/{NEPOCHS} \\t Train Err: {train_loss:.4f}\")\n", + "\n", + " epoch += 1\n", + " if epoch % 100 == 0:\n", " torch.save(model.state_dict(), f\"model_weights_{epoch}.pth\")" ] }, @@ -814,12 +929,13 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 21, + "execution_state": "idle", "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHgCAYAAAC/0ofgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABOL0lEQVR4nO3deXhU1f3H8fdkm+wbZGVJAiIgCCJQRFRAFkHFDQUVK6gVFVyo1V+hrSxuKIpFXBC1glYFhFaqVlTcolJRdnABlV1CCFv2feb+/rjJwJgACUwyuTOf1/PcZ2buvZn5zi195uM5555jMwzDQERERMSCArxdgIiIiMjJUpARERERy1KQEREREctSkBERERHLUpARERERy1KQEREREctSkBERERHLUpARERERy1KQEREREctSkBER8SCbzcadd97p7TJE/IaCjIiFzJ8/H5vNhs1m46uvvqpx3DAMWrVqhc1m49JLL3U7VlhYyJQpU+jcuTMRERE0a9aMs846i3vuuYesrCzXeVOnTnV9Rm1bdnZ2g3/P4zlebbfffrtXaxORxhfk7QJEpP5CQ0N58803Oe+889z2Z2Zm8uuvv2K32932V1RUcMEFF7B582ZGjx7NXXfdRWFhId9//z1vvvkmV155JampqW5/M2fOHCIjI2t8dmxsrMe/T30NGjSIG2+8scb+008/3QvViIg3KciIWNDFF1/M4sWLmT17NkFBR/5v/Oabb9K9e3cOHDjgdv7SpUtZt24db7zxBtdff73bsdLSUsrLy2t8xtVXX03z5s0b5gucotNPP50bbrjB22WISBOgriURC7ruuus4ePAgy5cvd+0rLy9nyZIlNYIKwNatWwHo06dPjWOhoaFER0d7pK7OnTvTv3//GvudTictWrTg6quvdu1buHAh3bt3JyoqiujoaM4880yefvppj9QB0K9fPzp37syaNWs499xzCQsLIyMjgxdeeKHGuTk5Odxyyy0kJSURGhpK165defXVV2v9Hk8//TRnnnkmoaGhJCQkMGTIEFavXl3j3KVLl9K5c2fsdjudOnXigw8+cDteUFDAhAkTSE9Px263k5iYyKBBg1i7dq3HroGIP1CQEbGg9PR0evfuzYIFC1z7li1bRl5eHtdee22N89PS0gB47bXXMAyjTp9x6NAhDhw44Lbl5uYe929GjhzJF198UWMczVdffUVWVpartuXLl3PdddcRFxfH448/zmOPPUa/fv1YsWJFnWorLS2tUduBAwdqtCwdPnyYiy++mO7duzNjxgxatmzJHXfcwSuvvOI6p6SkhH79+vHPf/6TUaNG8cQTTxATE8OYMWNqBKtbbrmFCRMm0KpVKx5//HEmTpxIaGgoK1eurPF9x40bx7XXXsuMGTMoLS1l+PDhHDx40HXO7bffzpw5cxg+fDjPP/889913H2FhYfz44491ugYiUsUQEcuYN2+eARirVq0ynn32WSMqKsooLi42DMMwrrnmGqN///6GYRhGWlqacckll7j+rri42Gjfvr0BGGlpacaYMWOMf/zjH8a+fftqfMaUKVMMoNatffv2x61vy5YtBmA888wzbvvHjRtnREZGumq95557jOjoaKOysrLe1+BYtQHGggULXOf17dvXAIyZM2e69pWVlRlnnXWWkZiYaJSXlxuGYRizZs0yAOP11193nVdeXm707t3biIyMNPLz8w3DMIxPP/3UAIy77767Rk1Op9OtvpCQEOOXX35x7duwYUON6xITE2OMHz++3t9fRNypRUbEokaMGEFJSQnvvfceBQUFvPfee7V2KwGEhYXxzTffcP/99wPm3U+33HILKSkp3HXXXZSVldX4m3/9618sX77cbZs3b95xazr99NM566yzWLRokWufw+FgyZIlDBs2jLCwMMAcMFxUVOTWNVYfl19+eY3ali9fXqNbKygoiNtuu831OiQkhNtuu42cnBzWrFkDwPvvv09ycjLXXXed67zg4GDuvvtuCgsLyczMdF0Pm83GlClTatRjs9ncXg8cOJC2bdu6Xnfp0oXo6Gi2bdvm2hcbG8s333zjdseYiNSfBvuKWFRCQgIDBw7kzTffpLi4GIfD4TYG5bdiYmKYMWMGM2bMYOfOnXzyySc8+eSTPPvss8TExPDwww+7nX/BBRec1GDfkSNH8pe//IU9e/bQokULPv/8c3Jychg5cqTrnHHjxvHWW28xdOhQWrRoweDBgxkxYgRDhgyp02e0bNmSgQMHnvC81NRUIiIi3PZV39m0Y8cOzjnnHHbu3Em7du0ICHD/77qOHTsCsHPnTsAcZ5Samkp8fPwJP7d169Y19sXFxXH48GHX6xkzZjB69GhatWpF9+7dufjii7nxxhtp06bNCd9fRI5Qi4yIhV1//fUs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V5BJjFCQERERa1GQEVeQaR6mICMiItaiICOuINMsVEFGRESsRUFGXEEm3q4gIyIi1lKvIDNjxgxKSkpcr1esWEFZWZnrdUFBAePGjfNcddI4qgf7hijIiIiItdQryEyaNImCggLX66FDh7Jnzx7X6+LiYubOneu56qRxVAWZmCAFGRERsZZ6BRnDMI77WiyqKshEB5pBJi/Pm8WIiIjUncbISI0WmZwcbxYjIiJSdwoycmSwb9VdS7t3e7MYERGRuguq7x+8/PLLREZGAlBZWcn8+fNp3rw5gNv4GU/Zs2cPf/7zn1m2bBnFxcWcdtppzJs3jx49enj8s/xWVZCJrWqR2bXLm8WIiIjUXb2CTOvWrXnppZdcr5OTk/nnP/9Z4xxPOXz4MH369KF///4sW7aMhIQEfv75Z+Li4jz2GYIryEQFKMiIiIi11CvI7Nixo4HKqN3jjz9Oq1atmDdvnmtfRkZGo9bgF6qCTLhx5K6lvDyIifFmUSIiIifWpMfIvPPOO/To0YNrrrmGxMREunXr5tYiVJuysjLy8/PdNjmBqiATVFZEdWOXxsmIiIgV1CvIfP3117z33ntu+1577TUyMjJITExk7NixbhPknapt27YxZ84c2rVrx4cffsgdd9zB3XffzauvvnrMv5k+fToxMTGurVWrVh6rx2dVBRmKiqjuGVT3koiIWEG9gsyDDz7I999/73q9adMmbrnlFgYOHMjEiRN59913mT59useKczqdnH322Tz66KN069aNsWPHcuutt/LCCy8c828mTZpEXl6ea9utpoUTqyXI6LKJiIgV1CvIrF+/ngEDBrheL1y4kF69evHSSy9x7733Mnv2bN566y2PFZeSksIZZ5zhtq9jx47sOk5zgd1uJzo62m2TEzgqyFQ3YKlFRkRErKBeQebw4cMkJSW5XmdmZjJ06FDX6549e3q0BaRPnz5s2bLFbd9PP/1EWlqaxz5DUNeSiIhYVr2CTFJSEtu3bwegvLyctWvXcs4557iOFxQUEBwc7LHi/vjHP7Jy5UoeffRRfvnlF958801efPFFxo8f77HPENS1JCIillWvIHPxxRczceJEvvzySyZNmkR4eDjnn3++6/jGjRtp27atx4rr2bMnb7/9NgsWLKBz58489NBDzJo1i1GjRnnsM4QjQaa0lFapDkAtMiIiYg31mkfmoYce4qqrrqJv375ERkYyf/58QkJCXMdfeeUVBg8e7NECL730Ui699FKPvqf8RnWQAdISioEofv0VnE4IaNI36IuIiL+zGSexhHVeXh6RkZEEBga67T906BBRUVEe7V46Vfn5+cTExJCXl6eBv8diGBAYCIZB5e692NOScTohKwtSUrxdnIiI+KO6/n7Xq0Xm5ptvrtN5r7zySn3eVrzNZoPwcCgqIqisiNRU+PVXs3tJQUZERJqyegWZ+fPnk5aWRrdu3TiJhhxpyiIioKjINeD311/NAb+9enm7MBERkWOrV5C54447WLBgAdu3b+emm27ihhtuID4+vqFqk8akuWRERMSC6jWU87nnnmPv3r383//9H++++y6tWrVixIgRfPjhh2qhsTrNJSMiIhZU73tS7HY71113HcuXL+eHH36gU6dOjBs3jvT0dAoLCxuiRmkMmktGREQs6JRurg0ICMBms2EYBg6Hw1M1iTeoa0lERCyo3kGmrKyMBQsWMGjQIE4//XQ2bdrEs88+y65du4iMjGyIGqUxqGtJREQsqF6DfceNG8fChQtp1aoVN998MwsWLKB58+YNVZs0plqCTE4OlJZCaKj3yhIRETmeegWZF154gdatW9OmTRsyMzPJzMys9bx///vfHilOGtFRQSY+HsLCoKTEvA37tNO8W5qIiMix1CvI3HjjjdhstoaqRbzpqCBjs0Hr1rBlizngV0FGRESaqnpPiCc+6qggA0eCjMbJiIhIU6YlAcX0myCjO5dERMQKFGTEVEuLDGguGRERadoUZMR0jCCjFhkREWnKFGTEpK4lERGxIAUZMR2na0nLaImISFOlICOm3wSZli3Nl4WFkJvrnZJEREROREFGTL8JMuHhUD1ps7qXRESkqVKQEdNvggzoziUREWn6FGTEVEuQ0YBfERFp6hRkxFQdZIqLXaN7dQu2iIg0dQoyYqoOMoZhrhaJupZERKTpU5ARU3j4keeaS0ZERCxCQUZMgYEQGmo+1zIFIiJiEQoycsQxJsX79VdwOLxUk4iIyHEoyMgRvwkyyckQFGSGmL17vViXiIjIMSjIyBG/CTKBgdCihblL3UsiItIUKcjIEceZFE8DfkVEpClSkJEjNCmeiIhYjIKMHKFlCkRExGIUZOQIdS2JiIjFKMjIEepaEhERi1GQkSPUtSQiIhajICNHxMebj/v3u3ZVt8gcOGCuJykiItKUKMjIEenp5uP27a5dsbEQGWk+V6uMiIg0NQoyckRGhvl4VJCx2dS9JCIiTZeCjBxRHWR27gSn07VbA35FRKSpUpCRI1q2NNclKC+HrCzXbrXIiIhIU6UgI0cEBR1JLUd1L2kuGRERaaoUZMRdLeNk1LUkIiJNlYKMuKslyKhrSUREmioFGXHXpo35eIyuJcPwQk0iIiLHoCAj7mppkWnZ0nwsKYGDB71Qk4iIyDEoyIi76iCzbZtrl90OSUnmc3UviYhIU6IgI+6qg8yePVBW5tqtO5dERKQpUpARd4mJEB5uDoY5KrXoziUREWmKFGTEnc1W65pLunNJRESaIgUZqek4t2CrRUZERJoSBRmpSZPiiYiIRSjISE2aFE9ERCxCQUZqOk6LTFYWVFZ6oSYREZFaKMhITbUEmaQkCA4Gp9NtYWwRERGvUpCRmqqDzIEDUFgIQECAxsmIiEjToyAjNcXEQHy8+VwDfkVEpAlTkJHa1bJUgQb8iohIU6MgI7XTXDIiImIBCjJSO80lIyIiFqAgI7XTXDIiImIBlgoyjz32GDabjQkTJni7FN+nriUREbEAywSZVatWMXfuXLp06eLtUvzD0UHGMIAjXUuHD7vuyhYREfEqSwSZwsJCRo0axUsvvURcXJy3y/EPaWnmY1GROZ8MEB1t3pkN6l4SEZGmwRJBZvz48VxyySUMHDjwhOeWlZWRn5/vtslJCA2F1FTzubqXRESkiWryQWbhwoWsXbuW6dOn1+n86dOnExMT49paVfeHSP21aWM+HhVkqhtqjppeRkRExGuadJDZvXs399xzD2+88QahoaF1+ptJkyaRl5fn2narD+Tk1TLgt1Mn83HTJi/UIyIi8htB3i7geNasWUNOTg5nn322a5/D4eCLL77g2WefpaysjMDAQLe/sdvt2O32xi7VN9USZM4803xUkBERkaagSQeZAQMGsOk3v5g33XQTHTp04M9//nONECMeVkuQqb5pbONG82Ymm80LdYmIiFRp0kEmKiqKzp07u+2LiIigWbNmNfZLA6hlvaX27SE4GPLzzQG/1WNmREREvKFJj5ERL6sOMrt2gcMBQEgIdOhg7lb3koiIeFuTbpGpzeeff+7tEvxHixZm80tFBezZ47r3uksXM8Rs3AiXXurlGkVExK+pRUaOLTDwyMQxtQz43bjRCzWJiIgcRUFGju84A37VtSQiIt6mICPHd5wgs2ULlJV5oSYREZEqCjJyfLUEmdRUiIszx//++KOX6hIREUFBRk6klmUKbDb3+WRERES8RUFGjq+WFhnQgF8REWkaFGTk+KqDTFaW24AYDfgVEZGmQEFGjq95c4iIMNcj2LnTtVtdSyIi0hQoyMjx2Wy1LlVQvQp2djbs3++FukRERFCQkbqoZZxMZCS0bWs+V/eSiIh4i4KMnJgG/IqISBOlICMndowgowG/IiLibQoycmInCDJqkREREW9RkJETO0HX0vffm7P8ioiINDYFGTmx6iBz6BDk57t2t20LYWFQUgJbt3qpNhER8WsKMnJiUVHmfDLg1ioTGAidO5vP1b0kIiLeoCAjdXOC7iUN+BUREW9QkJG60YBfERFpghRkpG40l4yIiDRBCjJSNycIMtu2QWFhI9ckIiJ+T0FG6qaW9ZYAEhIgJcV8/t13jVyTiIj4PQUZqZvqILNjh7kS9lE04FdERLxFQUbqpnVrcyXs4mLIyXE7pAG/IiLiLQoyUjd2O7RoYT7XgF8REWkiFGSk7uqweORvep1EREQalIKM1N0xgkzHjuYsv4cPw549XqhLRET8loKM1F2bNubjb4KM3Q7t25vPNeBXREQak4KM1N0xWmRAA35FRMQ7FGSk7o4TZDTgV0REvEFBRuquOsjs2gUOh9uhowf8ioiINBYFGam71FQICYHKSvj1V7dD1UHmxx+hvNwLtYmIiF9SkJG6CwiAtDTz+W+WKmjVCmJizIyzebMXahMREb+kICP1c9pp5uOXX7rtttm0VIGIiDQ+BRmpnxtuMB9nzYK8PLdDGvArIiKNTUFG6mfkSHMGvMOHYfZst0Ma8CsiIo1NQUbqJzAQJk82nz/1FOTmug5pLhkREWlsCjJSf9dcA506mSFm1izX7s6dzcc9e+DQIa9UJiIifkZBRuovMBCmTDGf//3vZjcTEB0N6enmbnUviYhIY1CQkZMzfLg5ujc/3wwzVdS9JCIijUlBRk5OQMCRVplZs1x9SboFW0REGpOCjJy8K6+Erl2hoABmzgTUIiMiIo1LQUZOXkAATJ1qPp89Gw4ccLXIfPcdOJ1eq0xERPyEgoycmssvh27doLAQZs6kXTuw26GoCNau9XZxIiLi6xRk5NTYbDBtmvn8mWcIOryfQYPMl8OHQ1aW90oTERHfpyAjp+7SS6FHD7MZ5sknmTcP2rWDXbvg4ovNG5tEREQagoKMnDqb7chYmWefpbkzhw8+gMRE2LDBbJkpL/dqhSIi4qMUZMQzLr4Yfvc7KC6GGTNo0wbefx8iIuDjj+GWW8AwvF2kiIj4GgUZ8Yyjx8o8/zxkZ9O9OyxZYk4E/Prr8Je/eLdEERHxPQoy4jkXXQTnnAMlJTBjBgBDhsDLL5uHH3sMnnvOi/X5k6wsePpp1/IRIiK+SkFGPOfoVpk5c8w+JWDMGHjoIXP3XXfB2297pzy/8te/woQJMGwYlJV5uxoRkQajICOeNWiQuZWWwuDB8MADUFnJX/8KY8ea42Suvx7+9z9vF+rjPvvMfFyxQgOURMSnKciIZ9ls8J//wG23mT+eDz8MF16Ibc+vPPec2UBQWmo+bt7s7WJ91O7dsHOnOfNyYCC88caRJjERER+jICOeFxYGL7wACxdCVBR8+SWcdRZBH/6XhQuhVy9zjcmBA+GLL7xdrA/66ivzsVs3s4sPzAU+FyzwXk0iIg1EQUYazsiR5joF3bvDwYNw6aWET7mfd/9VTocOsGcP9Otn3s2keWY86Msvzcfzz4dbb4U//cl8fdNN6tMTEZ+jICMN67TTzHEad99tvn7ySRKGX8CqxTu46Saz92n6dDj3XNiyxbul+oyjgwzA44+ba2KVlcEVV8C2bRw8aGacbt1g/XpvFSoicupshuHbowDz8/OJiYkhLy+P6Ohob5fj35YuNVsFcnMhJgZefpklXM3YseZdwuHh8Pe/mz+wNpu3i7WoQ4egWTPz+b595vTKYC4fcf75sG4deakdObv0f2w7FAtAQoLZxdehg3dKFhGpTV1/v9UiI43niivM//w/5xzIy4NrruHq16/g+2W7uPBCc1Lg226DK6+E/fu9XaxFrVhhPrZvfyTEAEREsOu5d9lvb0FM1o/MOTSCszpV0LWrea0HDTLHB4uIWI2CjDSutDTzP///8hcICoL//IeUAWewfOhMZj5eSUiIedNTly7w4YfeLtaCftutBFRWwpNPQocBLRhc9i5FhDOY5azufRfLPzLo0AF+/dUcfJ2d7aW6RUROkoKMNL7gYHjkEVi3Dvr0gaIiAu6/j3vf7MF3L6/kjDPMH9QhQ2D8eLMnSuqo+o6l884DYM0acwms++83J1yO7deN3OcXgM1G4MtzSXj97yxfbubLX34xW2YOHfJi/SIi9dSkg8z06dPp2bMnUVFRJCYmcsUVV7BFI0J9R+fOZuvMyy9DfDxs2EC70eey4dw7uP8P5tT6zz8Pp58O8+aB0+nlepu6khJYvRqA0p7n86c/mSFm3TqIi4N//AM+/RRa3HEZzJxp/s1999FyxSI+/hiSk+G772DoUCgo8OL3EBGphyYdZDIzMxk/fjwrV65k+fLlVFRUMHjwYIqKirxdmnhKQIA58+zmzTB6NBgGQS+/wIx3OvDdX96kYweD/fvh5pvNxpu1a71dcBP2zTdQUQGpqUycm8FTT5nh79pr4ccfzWvoGkQ9YQKMG2feNnbDDZz247ssX27myW+/NW9yKi315pcREakjw0JycnIMwMjMzKzz3+Tl5RmAkZeX14CVicd89plhdOhgGOZPrOE4p7fxnxveMmIiKgwwDJvNMO64wzAOHvR2oU3Qgw8aBhiV14w0YmPNS/jqq8c5v7LSMK6/3jzRbjeMjz82vv3WMCIjzV3DhhlGeXmjVS8i4qauv99NukXmt/Ly8gCIj48/5jllZWXk5+e7bWIh/fqZdzY9/DCEhhKw8msue30EB2La8GbXx4k1DjFnjtnd9PLL6m5yUzXQd2P0+eTmQsuWcMMNxzk/MBDmzz8yx8zll9Oz4n+8+y6EhsK775qNZA5HYxQvInJyLBNknE4nEyZMoE+fPnTu3PmY502fPp2YmBjX1qpVq0asUjzCbjdXb966Ff72N0hIIChrN9dtmMh+e0sWxd1G0sHvufVW805uTVaLeWvS118DMH+recfSDTeYPXfHFRwMixaZC3wWFcHFF9Mvei3/+pd5U9mCBeaAa9+ebUpErMwyE+LdcccdLFu2jK+++oqWLVse87yysjLKyspcr/Pz82nVqpUmxLOy0lLzF/Xpp2HDBtfuTwMH8pTjHt7nYgYMDGDKFNfNOv5nzRro0QNndAxhRQcpdwTy/fdwxhl1/PviYrjoIvOup+bNITOTRZvO4LrrzBDz2GPw5z836DcQEXHjUxPi3Xnnnbz33nt89tlnxw0xAHa7nejoaLdNLC401JwReN06yMw0Z8wLCOBCx8e8xzC+pRcHP17L+efDhReap/idqm6lXa36UO4IpHv3eoQYMKdVfu89c12sAwdg4EBG9tjK7Nnm4UmTzImZRUSamiYdZAzD4M477+Ttt9/m008/JSMjw9sliTfZbHDBBfDvf5vdTvfdB9HR9GA1q209mR1wD6s/y6dfP3OozWef+VGXSFWQ+W+e2a30+9+fxHvExJizEHbuDHv3woAB3HnFr0ff3KR1mUSkyWnSQWb8+PG8/vrrvPnmm0RFRZGdnU12djYlJSXeLk28LT0dnnjCXGnyuusIMJzc5ZzNroiOjAxaQmamwYUXmrnn4499PNAYhivIvPnr+QQGwnXXneR7NWsGy5ebi33u3AkDB/L0X3MYONAcQnPZZZr9V0SaliY9RsZ2jJUD582bx5gxY+r0Hlo00k8sX27Oi/LLLwB833ooV+19jp8qzFa8s882p04ZORJCQrxYZ0PYsgU6dKAi0E6kI49Bl9h5771TfM+dO81lDnbvhi5dyF2wjHOuSmXLFujVy2ztCgvzSPUiIrXyiTEyhmHUutU1xIgfGTQINm2CyZMhJIROu5bxY2An3uk9nSh7OWvXwo03mlPxP/QQ5OR4u2APqmqNWRPUi3Ls3HijB94zLQ0++QSSkmDjRmIH9eSj6WuIizPn3bvlFh9v5RIRy2jSQUakXkJDYdo02LgRLryQgNIShn39Fw6ld+Oji2cxKGEdOdkOJk+G1q3NH+ONG71dtAdUra/0Sdl5REfDsGEeet927czVtDt2hKwsWo86ny/uXuK6LfuRRzz0OSIip0BBRnxP+/bmwJh//tOcg2bLDwx6/498tP9sSsKbkxlzGePLZrL+lTV06+pgwABzxe2j7tq3lqoWmS85nxEjPNzl07atOT/NkCFQUkLnadfw9SUPAwYPPABLlnjws0RETkKTHiPjCRoj4+cOHTJXS/zsM7Pl4jerIeYRzVecx6dcyNLQ6+g4IJUhQ8zf7dNO81LN9ZGVBS1a4CCAOA7zXmY0F1zQAJ9TWWkuoT1rFgBr2l/HeVv+gS0sjC++gB49GuAzRcSv1fX3W0FG/Edl5ZG5aDIzzZW3j1rCopJA3mUYc7mNjxhMRpsAV6jp3x8iI71Y+7EsWgTXXstaujE8fS1bt9ZhNt9TMXcu3HknVFayOaYX/fKWEpiazLffQosWDfi5IuJ3fGKwr4hHBQVBz57m/DPvvmu21qxZA089hXH++QTh4EqW8gFD2UpbRm57lH89n81ll5mrQg8cCM8/38RuPz6qW+n3v2/gEANw223w0UcQF0eHvG9YF/Q7ErLW07u3OWneqlUaBCwijUstMiLVfvgBXnwRXn0VcnMBcAQE8VHY5TxVdBufMACDANe8fFdfDcOHQ0qK90qu6NSV4B82cjWLmf7T1bRr10gf/PPP5qjiLVsotoUzzniORYyklDBatjQnX77qKnPJiKCgRqpJRHyKupaqKMhIvZWUwOLFZjfKUStS5sWlsTz4El7LuYjP6E8hUdhs5o91dahp1O6V3FyM+HhshsElZ+/lv2uSG/HDzc9nxAhzDh+gOCiK/xiX84ZjJB8xmApCaN7cnETvqqvMFi27vXFLFBHrUpCpoiAjp2TTJrOV5p//hLw8125HYDDrI/qwOP8iPuQiNtAVgwB69TJ/sC+8EM4917wjvMG8/z5ccgk/cxrLn/uZceMa8LOOpbISHn0UXn7ZnDyvSlFILEu5ktfKR/IpF1JJMDExZqC5/npzzFFgoBfqFRHLUJCpoiAjHlFcbN7S/eGH8MEHsG2b2+GDwUn8t2IwH3IRHzGYAyRgt0OfPmaoGTDAvLPHk90s+/8wiYR/PMZ8200M2/8KzZp57r3rzemElSvNwceLF5trNVUpDG3G0oDhvF08mPWcxXYySEwKYMQIcymFc84xl9ESETmagkwVBRlpEL/8ciTUfPaZuRDRUTYEd+e9CrO15mt6U0kwUVHm2JoLLzRbJLp2PbXBudtbnkfGnhU80+0V7lp70yl+IQ9yOMxb3RctMiea2b/f7XAhkaynKxvoynrOIiflLLpc35lrbgzjzDMVakTEpCBTRUFGGlxZmTmW5oMPzHCzYYPb4eKgKD61DXAFmx2Y6z/FxZnBpn9/c+vcue7BxlFUSmVkDHbK+ei5nxk8rolOelNZCZ9/Dv/6l3lL03ff1TrzoIMAttCejcE92NP6HMrP6kXsBV04o2swnTvj3dYmEfEKBZkqCjLS6LKzzVuUP/zQfDxwwO1wTmgrVlecxWrHWa5Wie1kEN8sgH79oF8/M9icccaxWydWP/UFPf7Ul2xbMnHFWdhDLdKMUVlpLnK5fj2sX49j7QYqVq8nNH9/jVNLCGUN3VnJOWyJ7UVR514kdW9Fl642unQxr48WrhTxXQoyVRRkxKucTli71gw1H35ottw4HDVOKyDSFWo20JVPuZCChLb07Ysr3BwdbBaf/SjXrPsra9tczdlbFzfqV/I4w4DsbCq+WcuhD77F8fU3xG35hrCy3BqnZpHCOrqxnrPYZOtKXsZZxJzdli7dAunSBbp0gVat1D0l4gsUZKooyEiTkp9vdj2tX3/k8RjdLavowSJG8hYj2E1rEhKgb1+zO6r9H4cy2PEB2yc8Tcbf7270r9HgnE5zrpqVKyn/8hsqvvqGsJ83EOCsGQKLCGcjXVxBcGdYRyKTI4lLCSUuJZSElnYSWoeSnBZKcnooLdODiI9X2BFp6hRkqijISJNX3d1SHWxWrcL48ktsR7XcrAzozQLnSBZzDftI4hDxxJCPsWYttrO7ea/2xlRcbC4xsWEDxnqzSyrwh00ElpXU620qCSSXWLaHtGdPZAcONGtPfmoHyjI6ENA2g2bJwSQmQkICJCaaW2Skgo9IY1OQqaIgI5aUk2MOkF20yFwTqur/pobNxs+RZ3N6wRrKw6IJKTjk3xOyOBxmy01VC5dz7Xoqt2zFWVyKUVpKQHkpgRWlBDkr6vR2FQTxC6exhfbsoQUlhFFKKJWBoQRFhhISbW5hsXbC40MJCA/FEVy1hYTirHruDDEfjRA7EdGBxMRAbKy5xcTgem23Y47w1mAfkRoUZKooyIjlZWWZtzEvXAhff31k/5AhsGyZ9+qyEofD7L4rLaU0t5RDm3MoWb8Fxw+bCf5lM+G/biEuZwshFcVeKW9vUEu2Rp7Frriu7E06i4Mtu1Leqi3RsQHExEB0NISHm1tYmLlVP69+jIw0J2BUy5H4CgWZKgoy4lN27YK33jIDzf33m7PJiWc4nfDrr2Y33+bN5vw3paVUFJRSmldGWV4p5fmlVBaW4igqxVlcQmBFGUGOUoIqSwl2lBJcWUqQs8x87qg57qk+CohkE2eynrPYQnsCcBJKqWuzU+b22sDGgcAkCsKSKIpKpjQ2mcrmyRiJSQSmJBLbPIioKAgJAXtgJZGOPMLLcwmvMB/DynIJLc2FigoqK3HbKiqhssJ87nCAs3kiARlp2NunE5MeR/MEG82bQ0SEgpR4joJMFQUZEfEKpxPKy83H33A4zHHfeXmQn1OKY9MPBG5aT9iW9UTv2ECzrE0EVZ5aEHIrBRsHaE45IcSQRxSFHnvvfKLYSRo7SOfXgDT2R6aTH9MaI8ROQAAEBEJggNmDFhh45DEkoJLYwHzibbnEGLlEO3OJcuQSXpFLeFWoCsBBaWJrSpPSKEtOp7RqK0tOoyI+CVuAjeBgiIoyW62ioszNNYO2YUBFRa13Ctag5qwmR0GmioKMiFhOZSX89NORu9u2bTObUkJD3Te7HULNMTnlJQ7Kdu3DsScbI3sfgfuzCTmcTWh+DgFGzTAFUBIYQUFgrLkFxJJvi6E8wO4KHgHVweOo14E4iSzMplnhDuLL9zXudTm6dkLZSRqHiavROnX0FkDdfuLKAsM5EJnOwcg0Dkalcyg6ncPRaRyOSSc3Np3iyESCgm0EBUFwMMd8DA090v0XFgYRASVE5+4i6tBOwnN2YM81r5nNBtjARi2PoXZITILkZNdmS2hOQHAgNlvV/xYBR+Uuh8NsQczOhn37jjw6HDX/zfx2S001V7s9mfVTKithzx7YsQPatzdr9SAFmSoKMiLi1xwOOHjQ/HErL3cfdRwcfGrvXVICu3ZhbN9B+c87Kd28A8fWHdj2/AqVlRgGGFSNVTdwe+0kgJLgGAqDzRCVZ4sljxgOOWM54Ihlf3ksZeU2Uip2kVq+g5SKnbQo30GLih0kVu4hkNrDWUMpIZSDNCMXs85cYmtspYTSgj2ks4N0dpDGTlLI9sjnOwhgPwlkk0w2ydgwSGIfyWSTwP5Tuh4OWyB5US3JjU0nPy6NoubpFCWkU5qURmXzZELz9xGRs4OIAzuJPLiDqAM7iDy0k6jc3a4pEXY9/Bqt//p7j3zXagoyVRRkRER8TEWFOZ5pxw6zj66qdaEiMJQiRyiFlaEUVJhbXqmd0sog1/ie347/cTqhstyJPS+HqIM7iDy4g5hDO4g6vJOYwzuIzd1BVP6eOrfs1KbIFsGugHR2GOlkOZNxEHjcdwun2BVSkthHAvtP+PlObG5BZx9JVBJ03NaqcIpJJQs75Sf93coJZhet+fWmyfR75caTfp/a1PX324Nr8YqIiDSC4GDIyDC3o3cDsVVb/UUDx1izrLzcDE6HD0Nurjm4KTfXfcvLMxePTU2F9HRISzMf09OJiI+no81Gx1re2jBqbk6n+/PiikqMnCNdR7bsvRjYqGxuDuiuaJZMZWxznAFBRDqgjRPSHGbZJSVQWmo+FpTC/lL3fWUlToIPZhOes4PIAzuIPryT2NwdxOfvoFnhDmJLs8m1J5ETns7+8HT2R6RzIDKNg5HpHIhMJz88GVtQIDfdcFIX3SMUZERERI4nJATatGmQt7bZ6jLGOAhiU+D0lAaoIABIrdrOrfWMCKBFA3yyp9RxrV0RERGRpkdBRkRERCxLQUZEREQsS0FGRERELEtBRkRERCxLQUZEREQsS0FGRERELEtBRkRERCxLQUZEREQsS0FGRERELEtBRkRERCxLQUZEREQsS0FGRERELEtBRkRERCwryNsFNDTDMADIz8/3ciUiIiJSV9W/29W/48fi80GmoKAAgFatWnm5EhEREamvgoICYmJijnncZpwo6lic0+kkKyuLqKgobDabx943Pz+fVq1asXv3bqKjoz32vnKErnHD0vVteLrGDUvXt+F58xobhkFBQQGpqakEBBx7JIzPt8gEBATQsmXLBnv/6Oho/R+ogekaNyxd34ana9ywdH0bnreu8fFaYqppsK+IiIhYloKMiIiIWJaCzEmy2+1MmTIFu93u7VJ8lq5xw9L1bXi6xg1L17fhWeEa+/xgXxEREfFdapERERERy1KQEREREctSkBERERHLUpARERERy1KQOUnPPfcc6enphIaG0qtXL7799ltvl2RZX3zxBcOGDSM1NRWbzcbSpUvdjhuGweTJk0lJSSEsLIyBAwfy888/e6dYC5o+fTo9e/YkKiqKxMRErrjiCrZs2eJ2TmlpKePHj6dZs2ZERkYyfPhw9u3b56WKrWXOnDl06dLFNWFY7969WbZsmeu4rq1nPfbYY9hsNiZMmODap2t8aqZOnYrNZnPbOnTo4Dre1K+vgsxJWLRoEffeey9Tpkxh7dq1dO3alYsuuoicnBxvl2ZJRUVFdO3aleeee67W4zNmzGD27Nm88MILfPPNN0RERHDRRRdRWlrayJVaU2ZmJuPHj2flypUsX76ciooKBg8eTFFRkeucP/7xj7z77rssXryYzMxMsrKyuOqqq7xYtXW0bNmSxx57jDVr1rB69WouvPBCLr/8cr7//ntA19aTVq1axdy5c+nSpYvbfl3jU9epUyf27t3r2r766ivXsSZ/fQ2pt9/97nfG+PHjXa8dDoeRmppqTJ8+3YtV+QbAePvtt12vnU6nkZycbDzxxBOufbm5uYbdbjcWLFjghQqtLycnxwCMzMxMwzDM6xkcHGwsXrzYdc6PP/5oAMbXX3/trTItLS4uznj55Zd1bT2ooKDAaNeunbF8+XKjb9++xj333GMYhv79esKUKVOMrl271nrMCtdXLTL1VF5ezpo1axg4cKBrX0BAAAMHDuTrr7/2YmW+afv27WRnZ7td75iYGHr16qXrfZLy8vIAiI+PB2DNmjVUVFS4XeMOHTrQunVrXeN6cjgcLFy4kKKiInr37q1r60Hjx4/nkksucbuWoH+/nvLzzz+TmppKmzZtGDVqFLt27QKscX19ftFITztw4AAOh4OkpCS3/UlJSWzevNlLVfmu7OxsgFqvd/UxqTun08mECRPo06cPnTt3BsxrHBISQmxsrNu5usZ1t2nTJnr37k1paSmRkZG8/fbbnHHGGaxfv17X1gMWLlzI2rVrWbVqVY1j+vd76nr16sX8+fNp3749e/fuZdq0aZx//vl89913lri+CjIifmT8+PF89913bv3fcurat2/P+vXrycvLY8mSJYwePZrMzExvl+UTdu/ezT333MPy5csJDQ31djk+aejQoa7nXbp0oVevXqSlpfHWW28RFhbmxcrqRl1L9dS8eXMCAwNrjNjet28fycnJXqrKd1VfU13vU3fnnXfy3nvv8dlnn9GyZUvX/uTkZMrLy8nNzXU7X9e47kJCQjjttNPo3r0706dPp2vXrjz99NO6th6wZs0acnJyOPvsswkKCiIoKIjMzExmz55NUFAQSUlJusYeFhsby+mnn84vv/xiiX/DCjL1FBISQvfu3fnkk09c+5xOJ5988gm9e/f2YmW+KSMjg+TkZLfrnZ+fzzfffKPrXUeGYXDnnXfy9ttv8+mnn5KRkeF2vHv37gQHB7td4y1btrBr1y5d45PkdDopKyvTtfWAAQMGsGnTJtavX+/aevTowahRo1zPdY09q7CwkK1bt5KSkmKNf8PeHm1sRQsXLjTsdrsxf/5844cffjDGjh1rxMbGGtnZ2d4uzZIKCgqMdevWGevWrTMA46mnnjLWrVtn7Ny50zAMw3jssceM2NhY4z//+Y+xceNG4/LLLzcyMjKMkpISL1duDXfccYcRExNjfP7558bevXtdW3Fxseuc22+/3WjdurXx6aefGqtXrzZ69+5t9O7d24tVW8fEiRONzMxMY/v27cbGjRuNiRMnGjabzfjoo48Mw9C1bQhH37VkGLrGp+pPf/qT8fnnnxvbt283VqxYYQwcONBo3ry5kZOTYxhG07++CjIn6ZlnnjFat25thISEGL/73e+MlStXersky/rss88MoMY2evRowzDMW7AfeOABIykpybDb7caAAQOMLVu2eLdoC6nt2gLGvHnzXOeUlJQY48aNM+Li4ozw8HDjyiuvNPbu3eu9oi3k5ptvNtLS0oyQkBAjISHBGDBggCvEGIaubUP4bZDRNT41I0eONFJSUoyQkBCjRYsWxsiRI41ffvnFdbypX1+bYRiGd9qCRERERE6NxsiIiIiIZSnIiIiIiGUpyIiIiIhlKciIiIiIZSnIiIiIiGUpyIiIiIhlKciIiIiIZSnIiIiIiGUpyIiIz7PZbCxdutTbZYhIA1CQEZEGNWbMGGw2W41tyJAh3i5NRHxAkLcLEBHfN2TIEObNm+e2z263e6kaEfElapERkQZnt9tJTk522+Li4gCz22fOnDkMHTqUsLAw2rRpw5IlS9z+ftOmTVx44YWEhYXRrFkzxo4dS2Fhods5r7zyCp06dcJut5OSksKdd97pdvzAgQNceeWVhIeH065dO9555x3XscOHDzNq1CgSEhIICwujXbt2NYKXiDRNCjIi4nUPPPAAw4cPZ8OGDYwaNYprr72WH3/8EYCioiIuuugi4uLiWLVqFYsXL+bjjz92Cypz5sxh/PjxjB07lk2bNvHOO+9w2mmnuX3GtGnTGDFiBBs3buTiiy9m1KhRHDp0yPX5P/zwA8uWLePHH39kzpw5NG/evPEugIicPG8vvy0ivm306NFGYGCgERER4bY98sgjhmEYBmDcfvvtbn/Tq1cv44477jAMwzBefPFFIy4uzigsLHQd/+9//2sEBAQY2dnZhmEYRmpqqvHXv/71mDUAxt/+9jfX68LCQgMwli1bZhiGYQwbNsy46aabPPOFRaRRaYyMiDS4/v37M2fOHLd98fHxrue9e/d2O9a7d2/Wr18PwI8//kjXrl2JiIhwHe/Tpw9Op5MtW7Zgs9nIyspiwIABx62hS5curucRERFER0eTk5MDwB133MHw4cNZu3YtgwcP5oorruDcc889qe8qIo1LQUZEGlxERESNrh5PCQsLq9N5wcHBbq9tNhtOpxOAoUOHsnPnTt5//32WL1/OgAEDGD9+PE8++aTH6xURz9IYGRHxupUrV9Z43bFjRwA6duzIhg0bKCoqch1fsWIFAQEBtG/fnqioKNLT0/nkk09OqYaEhARGjx7N66+/zqxZs3jxxRdP6f1EpHGoRUZEGlxZWRnZ2dlu+4KCglwDahcvXkyPHj0477zzeOONN/j222/5xz/+AcCoUaOYMmUKo0ePZurUqezfv5+77rqL3//+9yQlJQEwdepUbr/9dhITExk6dCgFBQWsWLGCu+66q071TZ48me7du9OpUyfKysp47733XEFKRJo2BRkRaXAffPABKSkpbvvat2/P5s2bAfOOooULFzJu3DhSUlJYsGABZ5xxBgDh4eF8+OGH3HPPPfTs2ZPw8HCGDx/OU0895Xqv0aNHU1payt///nfuu+8+mjdvztVXX13n+kJCQpg0aRI7duwgLCyM888/n4ULF3rgm4tIQ7MZhmF4uwgR8V82m423336bK664wtuliIgFaYyMiIiIWJaCjIiIiFiWxsiIiFepd1tEToVaZERERMSyFGRERETEshRkRERExLIUZERERMSyFGRERETEshRkRERExLIUZERERMSyFGRERETEsv4frCfIlEAJvBwAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAHgCAYAAAC1jimyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAxHUlEQVR4nO3deXRV1cH38d8NIQOEJEAmAmGyTAKCbzAhaItIJAxV0fCAKULAVEQGsSAVFInauiiglUlA+og8lFGo5VEKuDBYBwgIQZC5DkwSkhghCYMkIdnvHw/c9pqwSTTThe9nrbP0nrtP7t5nUfPtuedeHMYYIwAAAJTKo7onAAAAUJMRSwAAABbEEgAAgAWxBAAAYEEsAQAAWBBLAAAAFsQSAACABbEEAABgQSwBAABYEEsA4GYcDofGjBlT3dMAbhrEEgAXS5YskcPhkMPh0KefflrieWOMIiIi5HA49Otf/9rlufPnzys5OVkdOnRQ3bp11bBhQ3Xu3Fnjxo1Tenq6c9wLL7zgfI3StoyMjCpZ67XY5jZy5MhqnRuAqudZ3RMAUDP5+PhoxYoVuuuuu1z2f/TRR/r222/l7e3tsr+wsFC/+tWvdPjwYSUmJmrs2LE6f/68Dhw4oBUrVujBBx9UeHi4yzELFiyQn59fidcODAyspFWV3b333quhQ4eW2N+6detqmQ+A6kMsAShV3759tWbNGs2ZM0eenv/+T8WKFSsUGRmp7Oxsl/Hr1q3T559/ruXLl+s3v/mNy3OXLl1SQUFBidcYMGCAgoKCKnEVP13r1q31yCOPVPc0ANQAvA0HoFQJCQn6/vvvtXnzZue+goICrV27tkQMSdLXX38tSbrzzjtLPOfj4yN/f/8KmVeHDh3Uo0ePEvuLi4vVuHFjDRgwwLlv1apVioyMVL169eTv76+OHTtq9uzZFTIPSbr77rvVoUMHpaWlqVu3bvL19VWLFi20cOHCEmOzsrKUlJSk0NBQ+fj4qFOnTvqf//mfUtcxe/ZsdezYUT4+PgoODlbv3r21a9euEmPXrVunDh06yNvbW+3bt9emTZtcnj937pyeeuopNW/eXN7e3goJCdG9996r3bt3V9g5AG4GxBKAUjVv3lwxMTFauXKlc9/GjRuVm5urhx9+uMT4Zs2aSZKWLl0qY0yZXuPMmTPKzs522XJycqzHDBo0SB9//HGJ+5o+/fRTpaenO+e2efNmJSQkqH79+po+fbr+9Kc/6e6779bWrVvLNLdLly6VmFt2dnaJK2Rnz55V3759FRkZqRkzZqhJkyZ64okntHjxYueYH374QXfffbf++te/avDgwZo5c6YCAgI0bNiwEvGWlJSkp556ShEREZo+fbomTZokHx8fbd++vcR6R40apYcfflgzZszQpUuXFB8fr++//945ZuTIkVqwYIHi4+M1f/58Pf300/L19dWhQ4fKdA4AXGEA4D+89dZbRpLZuXOnmTdvnqlXr565ePGiMcaY//qv/zI9evQwxhjTrFkz069fP+dxFy9eNG3atDGSTLNmzcywYcPMm2++aTIzM0u8RnJyspFU6tamTRvr/I4cOWIkmblz57rsHzVqlPHz83POddy4ccbf399cvny53OfgWnOTZFauXOkc1717dyPJvPrqq859+fn5pnPnziYkJMQUFBQYY4yZNWuWkWSWLVvmHFdQUGBiYmKMn5+fycvLM8YYs2XLFiPJPPnkkyXmVFxc7DI/Ly8v89VXXzn37d27t8R5CQgIMKNHjy73+gG44soSgGsaOHCgfvjhB61fv17nzp3T+vXrS30LTpJ8fX21Y8cOTZw4UbryqbqkpCQ1atRIY8eOVX5+folj/va3v2nz5s0u21tvvWWdU+vWrdW5c2etXr3aua+oqEhr167VfffdJ19fX+nKTeIXLlxweRuxPB544IESc9u8eXOJtwA9PT31+OOPOx97eXnp8ccfV1ZWltLS0iRJGzZsUFhYmBISEpzjateurSeffFLnz5/XRx995DwfDodDycnJJebjcDhcHsfGxuqWW25xPr7tttvk7++vb775xrkvMDBQO3bscPkkIoDy4wZvANcUHBys2NhYrVixQhcvXlRRUZHLPUE/FhAQoBkzZmjGjBk6fvy4UlJS9Morr2jevHkKCAjQH//4R5fxv/rVr37SDd6DBg3Ss88+q1OnTqlx48b65z//qaysLA0aNMg5ZtSoUXr77bfVp08fNW7cWL169dLAgQPVu3fvMr1GkyZNFBsbe91x4eHhqlu3rsu+q5+YO3bsmLp27arjx4+rVatW8vBw/f+n7dq1kyQdP35cunLfV3h4uBo0aHDd123atGmJffXr19fZs2edj2fMmKHExERFREQoMjJSffv21dChQ9WyZcvr/nwA/8aV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", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] @@ -831,16 +947,15 @@ "source": [ "plt.suptitle('MSE vs Epochs')\n", "plt.plot(train_err, label='Train', color='blue')\n", - "plt.plot(test_err, label='Test', color='red')\n", "plt.xlabel('Epochs')\n", "plt.ylabel('MSE')\n", - "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 13, + "execution_state": "idle", "metadata": { "id": "LoGEmM5lH7_A" }, @@ -848,35 +963,43 @@ { "data": { "text/plain": [ - "(array([[1273., 144., 13., ..., 0., 0., 0.],\n", - " [ 0., 0., 0., ..., 0., 0., 0.],\n", - " [ 0., 0., 0., ..., 0., 0., 0.],\n", + "(array([[3.1870e+04, 4.5000e+01, 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", " ...,\n", - " [ 0., 0., 0., ..., 0., 0., 0.],\n", - " [ 0., 0., 0., ..., 0., 0., 0.],\n", - " [ 0., 0., 0., ..., 16., 21., 197.]]),\n", - " array([1. , 1.14 , 1.28 , 1.42 , 1.561, 1.7 , 1.84 , 1.98 , 2.121,\n", - " 2.26 , 2.4 , 2.54 , 2.68 , 2.82 , 2.96 , 3.1 , 3.24 , 3.38 ,\n", - " 3.52 , 3.66 , 3.8 , 3.94 , 4.08 , 4.22 , 4.36 , 4.5 , 4.64 ,\n", - " 4.78 , 4.92 , 5.06 , 5.2 , 5.34 , 5.48 , 5.62 , 5.76 , 5.902,\n", - " 6.04 , 6.18 , 6.32 , 6.46 , 6.6 , 6.742, 6.88 , 7.02 , 7.16 ,\n", - " 7.3 , 7.44 , 7.582, 7.72 , 7.86 , 8. ], dtype=float16),\n", - " array([0.949, 1.032, 1.115, 1.198, 1.281, 1.363, 1.446, 1.529, 1.612,\n", - " 1.695, 1.778, 1.861, 1.943, 2.027, 2.11 , 2.191, 2.275, 2.36 ,\n", - " 2.441, 2.523, 2.607, 2.69 , 2.773, 2.855, 2.938, 3.021, 3.104,\n", - " 3.188, 3.27 , 3.354, 3.436, 3.52 , 3.602, 3.684, 3.768, 3.85 ,\n", - " 3.934, 4.016, 4.1 , 4.18 , 4.266, 4.348, 4.43 , 4.516, 4.594,\n", - " 4.68 , 4.76 , 4.844, 4.93 , 5.01 , 5.094], dtype=float16),\n", - " <matplotlib.collections.QuadMesh at 0x7e0eafbe4950>)" + " [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, ..., 1.3300e+02, 2.9200e+02,\n", + " 4.8201e+04]]),\n", + " array([ 1. , 1.28 , 1.561, 1.84 , 2.121, 2.4 , 2.68 , 2.96 ,\n", + " 3.24 , 3.52 , 3.8 , 4.08 , 4.36 , 4.64 , 4.92 , 5.2 ,\n", + " 5.48 , 5.76 , 6.04 , 6.32 , 6.6 , 6.88 , 7.16 , 7.44 ,\n", + " 7.72 , 8. , 8.28 , 8.56 , 8.84 , 9.12 , 9.4 , 9.68 ,\n", + " 9.96 , 10.24 , 10.52 , 10.805, 11.08 , 11.36 , 11.64 , 11.92 ,\n", + " 12.2 , 12.484, 12.76 , 13.04 , 13.32 , 13.6 , 13.88 , 14.164,\n", + " 14.44 , 14.72 , 15. ], dtype=float16),\n", + " array([ 0.824, 1.1 , 1.376, 1.652, 1.928, 2.203, 2.48 , 2.756,\n", + " 3.031, 3.307, 3.582, 3.86 , 4.133, 4.41 , 4.688, 4.96 ,\n", + " 5.24 , 5.516, 5.79 , 6.066, 6.34 , 6.617, 6.895, 7.168,\n", + " 7.445, 7.723, 7.996, 8.27 , 8.55 , 8.83 , 9.09 , 9.375,\n", + " 9.66 , 9.92 , 10.2 , 10.484, 10.75 , 11.03 , 11.31 , 11.58 ,\n", + " 11.86 , 12.14 , 12.41 , 12.69 , 12.97 , 13.234, 13.516, 13.8 ,\n", + " 14.06 , 14.34 , 14.625], dtype=float16),\n", + " <matplotlib.collections.QuadMesh at 0x7fe60c0a49b0>)" ] }, - "execution_count": 29, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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550KBAJavny50RkHgvDRjy1btqi2tlbbtm1TS0uLYrGYrr/+enV1ddkezVd27Nih5557TpdddpntUXzhxIkTmjx5snJzc7Vx40Z99NFH+u1vf6thw4bZHs26pqYmrVy5Us8++6z+/ve/q6mpSY8//rieeeYZ26MZ19XVpQkTJmjFihX9fvzxxx/X008/rVWrVmn79u0aMmSIpk2bpu7ubuOzmna2a3Py5Em1traqoaFBra2tevXVV7V3717deOONVmY1LdXXzWnNzc3atm2bysvLjc32tThIqb293ZHkbNmyxfYovtHR0eGMHj3aaWlpcX7wgx84CxYssD2SdYsXL3auueYa22P40vTp05077rijz2s/+tGPnNmzZ1ubyQ8kOc3Nzb3PE4mEU1pa6jzxxBO9r33++edOMBh0XnrpJUtT2nHmtenPe++950hyDh8+bGwuP0h2bT755BPn/PPPd/bs2eOMGjXK+d3vfmdlPjdY+XAhHA5LkoqLi22P4hu1tbWaPn26qqurbY/iG6+//rquvPJKzZo1S8OHD9fEiRP1/PPP2x7LF66++mpt2rRJ+/btkyR98MEHeuedd1RTU2N7NF85dOiQjh071uffVSgU0lVXXaV3333X6mx+FA6HFQgENHToUNujWJdIJDRnzhwtWrRIY8eOtT1OSr67sZzfJBIJ1dXVafLkyRo3bpztcXzh5ZdfVmtrq3bs2GF7FF85ePCgVq5cqYULF+oXv/iFduzYofnz5ysvL09z5861PZ5VS5YsUSQS0ZgxY5Sdna14PK6lS5dq9uzZtkfzlWPHjkmSRowY0ef1ESNG9H4M/093d7cWL16s2267zRc3VLOtqalJOTk5mj9/vu1RXCF8pFBbW6s9e/bonXfesT2KL7S1tWnBggVqaWlRfn6+7XF8JZFI6Morr9SyZcskSRMnTtSePXu0atWqcz58vPLKK3rxxRe1bt06jR07Vrt371ZdXZ3Ky8vP+WuDgYvFYrrlllvkOI5Wrlxpexzrdu3apaeeekqtra0KBAK2x3GFX7ucxT333KMNGzZo8+bNGjlypO1xfGHXrl1qb2/XFVdcoZycHOXk5GjLli16+umnlZOTo3g8bntEa8rKynTppZf2ee2SSy7Rxx9/bG0mv1i0aJGWLFmiW2+9VePHj9ecOXN03333qbGx0fZovlJaWipJOn78eJ/Xjx8/3vuxc93p4HH48GG1tLSw6iHp7bffVnt7uyorK3u/Lx8+fFj333+/LrjgAtvj9YuVj344jqN7771Xzc3Neuutt1RVVWV7JN+49tpr9eGHH/Z5bd68eRozZowWL16s7Oxsa7PZNnny5K9syd63b59GjRplbSa/OHnypLKy+v5fJzs7W4lEwtpMflRVVaXS0lJt2rRJl19+uSQpEolo+/btuuuuu2yPZ93p4LF//35t3rxZJSUltkfyhTlz5nzl/XfTpk3TnDlzNG/ePGtznQ3hox+1tbVat26dXnvtNRUWFvb+rjUUCqmgoMD2eFYVFhZ+5b0vQ4YMUUlJyTn/npj77rtPV199tZYtW6ZbbrlF7733nlavXq3Vq1fbHs26GTNmaOnSpaqsrNTYsWP1/vvv68knn9Qdd9xhezTjOjs7deDAgd7nhw4d0u7du1VcXKzKykrV1dXp0Ucf1ejRo1VVVaWGhgaVl5dr5syZVuc24WzXpqysTDfffLNaW1u1YcMGxePx3u/NxcXFysvLszh5+qX6ujkziOXm5qq0tFQXX3yxhWldsL3dxo8k9ft44YUXbI/mS2y1/f/+9Kc/OePGjXOCwaAzZswYZ/Xq1bZH8oVIJOIsWLDAqaysdPLz850LL7zQ+eUvf+lEo1Hboxm3efPmfr+/zJ0713G+3G7b0NDgjBgxwgkGg861117r7N271/bYRpzt2hw6dCjp9+bNmzfbHj3tUn3dnMnvW20Dzrl4xCAAALCGN5wCAACjCB8AAMAowgcAADCK8AEAAIwifAAAAKMIHwAAwCjCBwAAMIrwAQAAjCJ8AAAAowgfAADAKMIHAAAwivABAACM+r9SXh0TglR/aQAAAABJRU5ErkJggg==", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] @@ -886,7 +1009,7 @@ } ], "source": [ - "batch_src, batch_labels, batch_padding_mask = mkbatch(4096)\n", + "batch_src, batch_labels, batch_padding_mask = map(lambda x: x.to(device), mkbatch(BSZ))\n", "model.eval()\n", "with torch.no_grad():\n", " output = model(batch_src, batch_padding_mask)\n", @@ -897,6 +1020,27 @@ ] }, { + "cell_type": "code", + "execution_count": 14, + "execution_state": "idle", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.353515625" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "evaluate()" + ] + }, + { "cell_type": "markdown", "metadata": { "id": "LC6Xv3YfC0Rm" @@ -907,21 +1051,28 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 19, + "execution_state": "idle", "metadata": {}, "outputs": [], "source": [ - "N_TUNE_EPOCHS = 10\n", + "N_TUNE_EPOCHS = 100\n", "TUNE_LR = 1e-5\n", "TUNE_WD = 0 # 1e-5\n", "\n", "tune_criterion = nn.MSELoss()\n", - "tune_optimizer = torch.optim.Adam(model.parameters(), lr=TUNE_LR, weight_decay=TUNE_WD)" + "tune_optimizer = torch.optim.Adam(model.parameters(), lr=TUNE_LR, weight_decay=TUNE_WD)\n", + "\n", + "tune_train_err = []\n", + "\n", + "# clear loss file\n", + "open('tune_loss', 'w').close()" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 20, + "execution_state": "idle", "metadata": {}, "outputs": [], "source": [ @@ -937,1500 +1088,147 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 23, + "execution_state": "idle", "metadata": {}, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "1", - "0", - "0", - "%", - "|", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "|", - " ", - "1", - "6", - "/", - "1", - "6", - " ", - "[", - "0", - "0", - ":", - "1", - "3", - "<", - "0", - "0", - ":", - "0", - "0", - ",", - " ", - " ", - "1", - ".", - "1", - "9", - "i", - "t", - "/", - "s", - "]", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "E", - "p", - "o", - "c", - "h", - " ", - "1", - "/", - "1", - "0", - "0", - "0", - " ", - "\t", - " ", - "T", - "r", - "a", - "i", - "n", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "2", - "0", - "0", - "1", - " ", - "\t", - " ", - "T", - "e", - "s", - "t", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "1", - "5", - "9", - "2", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "1", - "0", - "0", - "%", - "|", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "|", - " ", - "1", - "6", - "/", - "1", - "6", - " ", - "[", - "0", - "0", - ":", - "1", - "3", - "<", - "0", - "0", - ":", - "0", - "0", - ",", - " ", - " ", - "1", - ".", - "2", - "0", - "i", - "t", - "/", - "s", - "]", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "E", - "p", - "o", - "c", - "h", - " ", - "2", - "/", - "1", - "0", - "0", - "0", - " ", - "\t", - " ", - "T", - "r", - "a", - "i", - "n", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "1", - "3", - "5", - "5", - " ", - "\t", - " ", - "T", - "e", - "s", - "t", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "1", - "1", - "5", - "2", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "1", - "0", - "0", - "%", - "|", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "|", - " ", - "1", - "6", - "/", - "1", - "6", - " ", - "[", - "0", - "0", - ":", - "1", - "3", - "<", - "0", - "0", - ":", - "0", - "0", - ",", - " ", - " ", - "1", - ".", - "1", - "7", - "i", - "t", - "/", - "s", - "]", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "E", - "p", - "o", - "c", - "h", - " ", - "3", - "/", - "1", - "0", - "0", - "0", - " ", - "\t", - " ", - "T", - "r", - "a", - "i", - "n", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "1", - "0", - "3", - "9", - " ", - "\t", - " ", - "T", - "e", - "s", - "t", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "9", - "6", - "2", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "1", - "0", - "0", - "%", - "|", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "|", - " ", - "1", - "6", - "/", - "1", - "6", - " ", - "[", - "0", - "0", - ":", - "1", - "3", - "<", - "0", - "0", - ":", - "0", - "0", - ",", - " ", - " ", - "1", - ".", - "1", - "7", - "i", - "t", - "/", - "s", - "]", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "E", - "p", - "o", - "c", - "h", - " ", - "4", - "/", - "1", - "0", - "0", - "0", - " ", - "\t", - " ", - "T", - "r", - "a", - "i", - "n", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "8", - "7", - "7", - " ", - "\t", - " ", - "T", - "e", - "s", - "t", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "8", - "1", - "5", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "1", - "0", - "0", - "%", - "|", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "|", - " ", - "1", - "6", - "/", - "1", - "6", - " ", - "[", - "0", - "0", - ":", - "1", - "3", - "<", - "0", - "0", - ":", - "0", - "0", - ",", - " ", - " ", - "1", - ".", - "1", - "8", - "i", - "t", - "/", - "s", - "]", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "E", - "p", - "o", - "c", - "h", - " ", - "5", - "/", - "1", - "0", - "0", - "0", - " ", - "\t", - " ", - "T", - "r", - "a", - "i", - "n", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "7", - "7", - "5", - " ", - "\t", - " ", - "T", - "e", - "s", - "t", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "7", - "2", - "8", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "1", - "0", - "0", - "%", - "|", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "|", - " ", - "1", - "6", - "/", - "1", - "6", - " ", - "[", - "0", - "0", - ":", - "1", - "3", - "<", - "0", - "0", - ":", - "0", - "0", - ",", - " ", - " ", - "1", - ".", - "1", - "8", - "i", - "t", - "/", - "s", - "]", - "\n" - ] - }, - { "name": "stdout", "output_type": "stream", "text": [ - "E", - "p", - "o", - "c", - "h", - " ", - "6", - "/", - "1", - "0", - "0", - "0", - " ", - "\t", - " ", - "T", - "r", - "a", - "i", - "n", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "6", - "8", - "2", - " ", - "\t", - " ", - "T", - "e", - "s", - "t", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "6", - "3", - "5", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "1", - "0", - "0", - "%", - "|", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "|", - " ", - "1", - "6", - "/", - "1", - "6", - " ", - "[", - "0", - "0", - ":", - "1", - "3", - "<", - "0", - "0", - ":", - "0", - "0", - ",", - " ", - " ", - "1", - ".", - "1", - "9", - "i", - "t", - "/", - "s", - "]", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "E", - "p", - "o", - "c", - "h", - " ", - "7", - "/", - "1", - "0", - "0", - "0", - " ", - "\t", - " ", - "T", - "r", - "a", - "i", - "n", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "6", - "0", - "5", - " ", - "\t", - " ", - "T", - "e", - "s", - "t", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "5", - "8", - "1", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "1", - "0", - "0", - "%", - "|", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "|", - " ", - "1", - "6", - "/", - "1", - "6", - " ", - "[", - "0", - "0", - ":", - "1", - "3", - "<", - "0", - "0", - ":", - "0", - "0", - ",", - " ", - " ", - "1", - ".", - "1", - "7", - "i", - "t", - "/", - "s", - "]", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "E", - "p", - "o", - "c", - "h", - " ", - "8", - "/", - "1", - "0", - "0", - "0", - " ", - "\t", - " ", - "T", - "r", - "a", - "i", - "n", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "5", - "4", - "8", - " ", - "\t", - " ", - "T", - "e", - "s", - "t", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "5", - "1", - "3", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "1", - "0", - "0", - "%", - "|", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "|", - " ", - "1", - "6", - "/", - "1", - "6", - " ", - "[", - "0", - "0", - ":", - "1", - "3", - "<", - "0", - "0", - ":", - "0", - "0", - ",", - " ", - " ", - "1", - ".", - "1", - "7", - "i", - "t", - "/", - "s", - "]", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "E", - "p", - "o", - "c", - "h", - " ", - "9", - "/", - "1", - "0", - "0", - "0", - " ", - "\t", - " ", - "T", - "r", - "a", - "i", - "n", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "4", - "9", - "4", - " ", - "\t", - " ", - "T", - "e", - "s", - "t", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "4", - "5", - "7", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "1", - "0", - "0", - "%", - "|", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "█", - "|", - " ", - "1", - "6", - "/", - "1", - "6", - " ", - "[", - "0", - "0", - ":", - "1", - "3", - "<", - "0", - "0", - ":", - "0", - "0", - ",", - " ", - " ", - "1", - ".", - "1", - "7", - "i", - "t", - "/", - "s", - "]", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "E", - "p", - "o", - "c", - "h", - " ", - "1", - "0", - "/", - "1", - "0", - "0", - "0", - " ", - "\t", - " ", - "T", - "r", - "a", - "i", - "n", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "4", - "4", - "5", - " ", - "\t", - " ", - "T", - "e", - "s", - "t", - " ", - "E", - "r", - "r", - ":", - " ", - "0", - ".", - "0", - "4", - "0", - "3", - "\n" + "Epoch 1/100 \t Train Err: 2.8906\n", + "Epoch 2/100 \t Train Err: 0.3340\n", + "Epoch 3/100 \t Train Err: 0.1709\n", + "Epoch 4/100 \t Train Err: 0.2373\n", + "Epoch 5/100 \t Train Err: 0.2520\n", + "Epoch 6/100 \t Train Err: 0.1953\n", + "Epoch 7/100 \t Train Err: 0.1963\n", + "Epoch 8/100 \t Train Err: 0.2236\n", + "Epoch 9/100 \t Train Err: 0.2119\n", + "Epoch 10/100 \t Train Err: 0.1777\n", + "Epoch 11/100 \t Train Err: 0.1660\n", + "Epoch 12/100 \t Train Err: 0.1787\n", + "Epoch 13/100 \t Train Err: 0.1816\n", + "Epoch 14/100 \t Train Err: 0.1562\n", + "Epoch 15/100 \t Train Err: 0.1377\n", + "Epoch 16/100 \t Train Err: 0.1377\n", + "Epoch 17/100 \t Train Err: 0.1387\n", + "Epoch 18/100 \t Train Err: 0.1289\n", + "Epoch 19/100 \t Train Err: 0.1162\n", + "Epoch 20/100 \t Train Err: 0.1079\n", + "Epoch 21/100 \t Train Err: 0.1108\n", + "Epoch 22/100 \t Train Err: 0.1099\n", + "Epoch 23/100 \t Train Err: 0.1021\n", + "Epoch 24/100 \t Train Err: 0.0918\n", + "Epoch 25/100 \t Train Err: 0.0913\n", + "Epoch 26/100 \t Train Err: 0.0913\n", + "Epoch 27/100 \t Train Err: 0.0859\n", + "Epoch 28/100 \t Train Err: 0.0820\n", + "Epoch 29/100 \t Train Err: 0.0767\n", + "Epoch 30/100 \t Train Err: 0.0776\n", + "Epoch 31/100 \t Train Err: 0.0747\n", + "Epoch 32/100 \t Train Err: 0.0713\n", + "Epoch 33/100 \t Train Err: 0.0698\n", + "Epoch 34/100 \t Train Err: 0.0679\n", + "Epoch 35/100 \t Train Err: 0.0664\n", + "Epoch 36/100 \t Train Err: 0.0669\n", + "Epoch 37/100 \t Train Err: 0.0645\n", + "Epoch 38/100 \t Train Err: 0.0601\n", + "Epoch 39/100 \t Train Err: 0.0583\n", + "Epoch 40/100 \t Train Err: 0.0569\n", + "Epoch 41/100 \t Train Err: 0.0564\n", + "Epoch 42/100 \t Train Err: 0.0554\n", + "Epoch 43/100 \t Train Err: 0.0532\n", + "Epoch 44/100 \t Train Err: 0.0520\n", + "Epoch 45/100 \t Train Err: 0.0500\n", + "Epoch 46/100 \t Train Err: 0.0483\n", + "Epoch 47/100 \t Train Err: 0.0457\n", + "Epoch 48/100 \t Train Err: 0.0452\n", + "Epoch 49/100 \t Train Err: 0.0444\n", + "Epoch 50/100 \t Train Err: 0.0430\n", + "Epoch 51/100 \t Train Err: 0.0422\n", + "Epoch 52/100 \t Train Err: 0.0405\n", + "Epoch 53/100 \t Train Err: 0.0408\n", + "Epoch 54/100 \t Train Err: 0.0378\n", + "Epoch 55/100 \t Train Err: 0.0378\n", + "Epoch 56/100 \t Train Err: 0.0369\n", + "Epoch 57/100 \t Train Err: 0.0354\n", + "Epoch 58/100 \t Train Err: 0.0344\n", + "Epoch 59/100 \t Train Err: 0.0337\n", + "Epoch 60/100 \t Train Err: 0.0334\n", + "Epoch 61/100 \t Train Err: 0.0322\n", + "Epoch 62/100 \t Train Err: 0.0312\n", + "Epoch 63/100 \t Train Err: 0.0304\n", + "Epoch 64/100 \t Train Err: 0.0310\n", + "Epoch 65/100 \t Train Err: 0.0304\n", + "Epoch 66/100 \t Train Err: 0.0297\n", + "Epoch 67/100 \t Train Err: 0.0283\n", + "Epoch 68/100 \t Train Err: 0.0281\n", + "Epoch 69/100 \t Train Err: 0.0280\n", + "Epoch 70/100 \t Train Err: 0.0273\n", + "Epoch 71/100 \t Train Err: 0.0267\n", + "Epoch 72/100 \t Train Err: 0.0277\n", + "Epoch 73/100 \t Train Err: 0.0269\n", + "Epoch 74/100 \t Train Err: 0.0258\n", + "Epoch 75/100 \t Train Err: 0.0249\n", + "Epoch 76/100 \t Train Err: 0.0254\n", + "Epoch 77/100 \t Train Err: 0.0245\n", + "Epoch 78/100 \t Train Err: 0.0244\n", + "Epoch 79/100 \t Train Err: 0.0242\n", + "Epoch 80/100 \t Train Err: 0.0237\n", + "Epoch 81/100 \t Train Err: 0.0243\n", + "Epoch 82/100 \t Train Err: 0.0225\n", + "Epoch 83/100 \t Train Err: 0.0225\n", + "Epoch 84/100 \t Train Err: 0.0221\n", + "Epoch 85/100 \t Train Err: 0.0227\n", + "Epoch 86/100 \t Train Err: 0.0222\n", + "Epoch 87/100 \t Train Err: 0.0219\n", + "Epoch 88/100 \t Train Err: 0.0220\n", + "Epoch 89/100 \t Train Err: 0.0210\n", + "Epoch 90/100 \t Train Err: 0.0210\n", + "Epoch 91/100 \t Train Err: 0.0211\n", + "Epoch 92/100 \t Train Err: 0.0208\n", + "Epoch 93/100 \t Train Err: 0.0205\n", + "Epoch 94/100 \t Train Err: 0.0200\n", + "Epoch 95/100 \t Train Err: 0.0208\n", + "Epoch 96/100 \t Train Err: 0.0198\n", + "Epoch 97/100 \t Train Err: 0.0195\n", + "Epoch 98/100 \t Train Err: 0.0197\n", + "Epoch 99/100 \t Train Err: 0.0190\n", + "Epoch 100/100 \t Train Err: 0.0192\n" ] } ], "source": [ - "tune_train_err = []\n", - "tune_test_err = []\n", - "\n", - "# clear loss file\n", - "open('tune_loss', 'w').close()\n", - "\n", "for epoch in range(N_TUNE_EPOCHS):\n", " model.train()\n", " train_loss = 0\n", - " for i in tqdm(range(BPE)):\n", - " batch_src, batch_labels, batch_padding_mask = mktunebatch(BSZ)\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() / BPE\n", - " loss.backward()\n", - " optimizer.step()\n", - "\n", - " test_loss = tune_evaluate()\n", + " batch_src, batch_labels, batch_padding_mask = mktunebatch(BSZ)\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_test_err.append(test_loss)\n", " tune_train_err.append(train_loss)\n", " with open('tune_loss', 'a') as f:\n", - " f.write(f\"{train_loss} {test_loss}\\n\")\n", - " print(f\"Epoch {epoch + 1}/{N_TUNE_EPOCHS} \\t Train Err: {train_loss:.4f} \\t Test Err: {test_loss:.4f}\")\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\"tune_model_weights_{epoch}.pth\")" + " torch.save(model.state_dict(), f\"tune_model_weights_{epoch + 1}.pth\")" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 24, + "execution_state": "idle", "metadata": {}, "outputs": [ { "data": { - "image/png": "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yMDUatkb9PXXcifEzEzte23ayC6b3r2BSpX0qubePblIbeFCeQTavXvyuouL3PB6yBAZivScn01EZooBSE8MQERGdPu2PIl+6VI5b6hgh2lHR+DZZ+V8oc6d5U7VekhNlXlr4ULg1Cnt9UaNgKFDZeeTp6ee34WIzAoDkJ4YgIhM5MoVuYJs6VLgr7+01318gEGD5BKvOnX0qkIIYNcuua/QmjW6y+l79pRhKDxc7ylJRGQGGID0xABEZGJCyOVdS5fKOUP//qt976mnZEp5/nl5aKseMjLk0WcLFgBJSdrrNWtql9PXrKlXFUSkIAYgPTEAESkoN1fuOr1ggTyUteD/RFWqBLzyipzIExCgdzXJydrl9DdvymsqFdCpk8xbzz4rN7omIsvBAKQnBiAiM3HhglzatXgxcPGi9nrLljKl9O0LeHjoVcXt23I5/YIF8tD7Ap6e2uX0jRrpVQURmQgDkJ4YgIjMTH4+8OuvMqV8/z1w96687uwsV48NHQq0bav38q4zZ+Ry+iVLdJfTh4bKKnr3Blxd9fwuRGQ0DEB6YgAiMmNXr2pPSz1+XHu9fn3taaleXnpVce8esGWLrGLTJu3Zr66ustNp6FCgVSsupycyNwxAemIAIrIAQgCJiTKlrFoFZGfL63Z28oT6oUPlcno9T0u9ckUup1+wADh9Wnu9cWNZxSuvcDk9kblgANITAxCRhbl1S4agBQuAP//UXn/sMbm069VXAX9/vaoQAti5U7uc/s4ded3BQbuc/umnuZyeSEkMQHpiACKyYH/9JZd3ff01cP269np4uBwi69lT7+X0N29ql9MfOKC9XquWdjm9r69eVRBRGTAA6YkBiKgcyM2VE6YLltMXqFxZjlsNHQo0bap3NQcPapfTZ2TIawWn07/0kjydvmpVvashohJgANITAxBROXP+vFxKv2gR8M8/2uutWsleob59AT3/W799G1i3Tuat7du1121sgCefBF54QXY+sWeIyHgYgPTEAERUTuXny96gguX0BaelVqggj4wfMkQezqrn8q7Tp+WUpHXrdIfIcD9zvfCCfNStq1c1RPQABiA9MQARWYH0dO1y+hMntNcbNNCellqtmt7VnD8vN1pctw7YvVu7sTUANGkig1CvXnI0jsvqifTDAKQnBiAiKyIE8McfciLPqlVATo68bm8vz8MYOlRO6NFz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zcO8efOUbppV6tGjBz755BPUrFkTjRs3xsGDB/H555/j1VdfVbppFo3L4E0oPj4en332GVJTUxEYGIgZM2YgJCRE6WZZJZVKVez1xYsXY9CgQSZvD+lq3749l8ErbNOmTYiJicHff/8Nf39/REVFYdiwYUo3yyrdunUL48aNw/r165Geng4fHx/069cP48ePh4ODg9LNs1gMQERERGR1OAeIiIiIrA4DEBEREVkdBiAiIiKyOgxAREREZHUYgIiIiMjqMAARERGR1WEAIiIiIqvDAERERERWhwGIiOghVCoVNmzYoHQziMgIGICIyCwNGjQIKpWqyKNLly5KN42IygEehkpEZqtLly5YvHixzjVHR0fF2kNE5Qd7gIjIbDk6OsLb21vnUalSJeD+8NTs2bPRtWtXODs7o3bt2li7dq3O548cOYKnnnoKzs7OqFKlCl577TVkZWXp3LNo0SI0btwYjo6OqF69OkaNGqXz/rVr1/D888+jQoUKqFu3LjZu3Kh578aNG+jfvz+qVq0KZ2dn1K1bt0hgIyLzxABERBZr3Lhx6NWrFw4dOoT+/fujb9++OH78OAAgOzsbnTt3RqVKlbBv3z6sWbMGv/76q07AmT17NkaOHInXXnsNR44cwcaNG/H444/r1PHhhx+id+/eOHz4MLp164b+/fvj+vXrmvqPHTuGzZs34/jx45g9ezY8PT1N/FMgojIRRERmKCIiQtja2goXFxedxyeffCKEEAKAeOONN3Q+ExISIoYPHy6EEGLevHmiUqVKIisrS/P+jz/+KGxsbERqaqoQQggfHx/xwQcfPLQNAMT//vc/zeusrCwBQGzevFkIIUSPHj3E4MGDDfzNicgUOAeIiMxWhw4dMHv2bJ1rlStX1jwPDQ3VeS80NBTJyckAgOPHjyMgIAAuLi6a99u2bQu1Wo2TJ09CpVLh8uXLePrppx/ZhmbNmmmeu7i4wN3dHenp6QCA4cOHo1evXjhw4AA6deqEnj17ok2bNnp+ayIyBQYgIjJbLi4uRYakDMXZ2blE99nb2+u8VqlUUKvVAICuXbviwoUL+Omnn7B161Y8/fTTGDlyJKZOnWqUNhOR4XAOEBFZrMTExCKvGzZsCABo2LAhDh06hOzsbM37u3fvho2NDerXrw83Nzf4+fkhISFBrzZUrVoVERER+PbbbzF9+nTMmzdPr/KIyDTYA0REZis3Nxepqak61+zs7DQTjdesWYOWLVviiSeewLJly7B3714sXLgQANC/f3/ExsYiIiICEyZMwNWrVzF69GgMGDAAXl5eAIAJEybgjTfeQLVq1dC1a1fcunULu3fvxujRo0vUvvHjxyMoKAiNGzdGbm4uNm3apAlgRGTeGICIyGxt2bIF1atX17lWv359nDhxAri/QmvlypUYMWIEqlevjhUrVqBRo0YAgAoVKuDnn3/GW2+9heDgYFSoUAG9evXC559/rikrIiICd+7cwRdffIF3330Xnp6eePHFF0vcPgcHB8TExOD8+fNwdnZGu3btsHLlSoN9fyIyHpWQKx2IiCyKSqXC+vXr0bNnT6WbQkQWiHOAiIiIyOowABEREZHV4RwgIrJIHL0nIn2wB4iIiIisDgMQERERWR0GICIiIrI6DEBERERkdRiAiIiIyOowABEREZHVYQAiIiIiq8MARERERFbn/xwXfxJ9aWXFAAAAAElFTkSuQmCC", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHgCAYAAABZ+0ykAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA97ElEQVR4nO3deXxU1f3/8feEkEkgC2DIAoRFQVRQoCAQaAVrEAKlYlGRokTEBQGFUtuvaAXbfm1UiktdWL4tUquIwk9RqcsjBYGCgGyx4IILslRIEJFsSAKZ8/tjmEmGhJjInTnJ8Ho+HueRzL3nznzufVDz7rnnnnEZY4wAAADCRITtAgAAAJxEuAEAAGGFcAMAAMIK4QYAAIQVwg0AAAgrhBsAABBWCDcAACCsEG4AAEBYIdwAAICwQrgBgCByuVyaPHmy7TKAswrhBmjAFi5cKJfLJZfLpbVr11bZb4xRWlqaXC6XfvaznwXsKy4u1syZM9W1a1c1bdpU55xzjrp3764pU6Zo//79/n4PPPCA/zOqa3l5eSE519OpqbYJEyZYrQ2AHZG2CwBw5qKjo7Vo0SL9+Mc/Dti+evVq/fe//5Xb7Q7Yfvz4cV122WX65JNPlJWVpTvvvFPFxcX68MMPtWjRIl199dVq1apVwDFz5sxRbGxslc9u1qxZkM6q9gYNGqSxY8dW2X7++edbqQeAXYQbIAwMHTpUS5Ys0V/+8hdFRlb8z3rRokXq2bOnDh06FNB/2bJl2rZtm1544QX98pe/DNh37NgxlZWVVfmMa665RomJiUE8ix/u/PPP1w033GC7DAD1BLelgDAwevRoffPNN8rJyfFvKysr09KlS6uEF0n64osvJEn9+/evsi86Olrx8fGO1NW1a1ddfvnlVbZ7PB61bt1a11xzjX/b4sWL1bNnT8XFxSk+Pl4XX3yxnnjiCUfqkKSBAweqa9eu2rJli/r166eYmBh16NBBc+fOrdL34MGDGj9+vJKTkxUdHa1u3brp73//e7Xn8cQTT+jiiy9WdHS0WrZsqSFDhmjz5s1V+i5btkxdu3aV2+1Wly5d9PbbbwfsLyoq0tSpU9W+fXu53W4lJSVp0KBB2rp1q2PXADhbEG6AMNC+fXulp6frxRdf9G976623VFBQoOuvv75K/3bt2kmSnnvuORljavUZhw8f1qFDhwLakSNHajxm1KhRWrNmTZV5OWvXrtX+/fv9teXk5Gj06NFq3ry5Hn74YT300EMaOHCg1q1bV6vajh07VqW2Q4cOVRmB+vbbbzV06FD17NlTjzzyiNq0aaM77rhDCxYs8Pf57rvvNHDgQP3jH//QmDFjNGvWLCUkJOimm26qErbGjx+vqVOnKi0tTQ8//LDuueceRUdHa8OGDVXOd+LEibr++uv1yCOP6NixYxo5cqS++eYbf58JEyZozpw5GjlypJ555hndfffdiomJ0ccff1yrawCgEgOgwXr22WeNJLNp0ybz1FNPmbi4OHP06FFjjDHXXnutufzyy40xxrRr184MGzbMf9zRo0dN586djSTTrl07c9NNN5m//e1vJj8/v8pnzJw500iqtnXu3LnG+nbu3GkkmSeffDJg+8SJE01sbKy/1ilTppj4+Hhz4sSJOl+D09Umybz44ov+fgMGDDCSzOzZs/3bSktLTffu3U1SUpIpKyszxhjz+OOPG0nm+eef9/crKysz6enpJjY21hQWFhpjjFm5cqWRZO66664qNXk8noD6oqKizOeff+7f9sEHH1S5LgkJCWbSpEl1Pn8AVTFyA4SJ6667Tt99952WL1+uoqIiLV++vNpbUpIUExOjjRs36je/+Y108qmr8ePHKzU1VXfeeadKS0urHPP//t//U05OTkB79tlna6zp/PPPV/fu3fXSSy/5t5WXl2vp0qUaPny4YmJipJOTkktKSgJuq9XFVVddVaW2nJycKrfEIiMjdfvtt/tfR0VF6fbbb9fBgwe1ZcsWSdKbb76plJQUjR492t+vcePGuuuuu1RcXKzVq1f7r4fL5dLMmTOr1ONyuQJeZ2Rk6LzzzvO/vuSSSxQfH69du3b5tzVr1kwbN24MeFINwA/DhGIgTLRs2VIZGRlatGiRjh49qvLy8oA5LadKSEjQI488okceeUR79uzRihUr9Oc//1lPPfWUEhIS9L//+78B/S+77LIfNKF41KhRuvfee/XVV1+pdevWWrVqlQ4ePKhRo0b5+0ycOFEvv/yyMjMz1bp1a1155ZW67rrrNGTIkFp9Rps2bZSRkfG9/Vq1aqWmTZsGbPM9UbV792717dtXe/bsUadOnRQREfj//S688EJJ0p49e6ST85ZatWqlFi1afO/ntm3btsq25s2b69tvv/W/fuSRR5SVlaW0tDT17NlT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G7nWdXT06FFFRAT+mWvUqJE8Ho/EtQ6q2lzb9PR0HTlyRFu2bPH3WblypTwej/r06XNmBZzRdGQYc/JRcLfbbRYuXGg++ugjc9ttt5lmzZqZvLw826U1aHfccYdJSEgwq1atMgcOHPC3o0eP+vtMmDDBtG3b1qxcudJs3rzZpKenm/T0dKt1h4vKT0sZrrVj3n//fRMZGWkefPBB89lnn5kXXnjBNGnSxDz//PP+Pg899JBp1qyZee2118x//vMfc9VVV/F48g+QlZVlWrdu7X8U/JVXXjGJiYnmt7/9rb8P1/qHKyoqMtu2bTPbtm0zksyjjz5qtm3bZvbs2WNMLa/tkCFDTI8ePczGjRvN2rVrTadOnXgUvD558sknTdu2bU1UVJTp3bu32bBhg+2SGjxJ1bZnn33W3+e7774zEydONM2bNzdNmjQxV199tTlw4IDVusPFqeGGa+2cN954w3Tt2tW43W5zwQUXmPnz5wfs93g85v777zfJycnG7XabK664wuzcudNavQ1VYWGhmTJlimnbtq2Jjo425557rrnvvvtMaWmpvw/X+od79913q/1vdFZWljG1vLbffPONGT16tImNjTXx8fFm3Lhxpqio6Ixrc5nKSzUCAAA0cMy5AQAAYYVwAwAAwgrhBgAAhBXCDQAACCuEGwAAEFYINwAAIKwQbgAAQFgh3AAAgLBCuAFwVnK5XFq2bJntMgAEAeEGQMjddNNNcrlcVdqQIUNslwYgDETaLgDA2WnIkCF69tlnA7a53W5r9QAIH4zcALDC7XYrJSUloDVv3lw6ectozpw5yszMVExMjM4991wtXbo04Pjt27frpz/9qWJiYnTOOefotttuU3FxcUCfBQsWqEuXLnK73UpNTdXkyZMD9h86dEhXX321mjRpok6dOun111/37/v22281ZswYtWzZUjExMerUqVOVMAagfiLcAKiX7r//fo0cOVIffPCBxowZo+uvv14ff/yxJKmkpESDBw9W8+bNtWnTJi1ZskT/+te/AsLLnDlzNGnSJN12223avn27Xn/9dXXs2DHgM37/+9/ruuuu03/+8x8NHTpUY8aM0eHDh/2f/9FHH+mtt97Sxx9/rDlz5igxMTHEVwHAD3LG3ysOAHWUlZVlGjVqZJo2bRrQHnzwQWOMMZLMhAkTAo7p06ePueOOO4wxxsyfP980b97cFBcX+/f/85//NBERESYvL88YY0yrVq3Mfffdd9oaJJnf/e53/tfFxcVGknnrrbeMMcYMHz7cjBs3zuEzBxAKzLkBYMXll1+uOXPmBGxr0aKF//f09PSAfenp6crNzZUkffzxx+rWrZuaNm3q39+/f395PB7t3LlTLpdL+/fv1xVXXFFjDZdccon/96ZNmyo+Pl4HDx6UJN1xxx0aOXKktm7dqiuvvFIjRoxQv379zvCsAYQC4QaAFU2bNq1ym8gpMTExterXuHHjgNcul0sej0eSlJmZqT179ujNN99UTk6OrrjiCk2aNEl//vOfg1IzAOcw5wZAvbRhw4Yqry+88EJJ0oUXXqgPPvhAJSUl/v3r1q1TRESEOnfurLi4OLVv314rVqw4oxpatmyprKwsPf/883r88cc1f/78M3o/AKHByA0AK0pLS5WXlxewLTIy0j9pd8mSJerVq5d+/OMf64UXXtD777+vv/3tb5KkMWPGaObMmcrKytIDDzygr7/+WnfeeaduvPFGJScnS5IeeOABTZgwQUlJScrMzFRRUZHWrVunO++8s1b1zZgxQz179lSXLl1UWlqq5cuX+8MVgPqNcAPAirffflupqakB2zp37qxPPvlEOvkk0+LFizVx4kSlpqbqxRdf1EUXXSRJatKkid555x1NmTJFl156qZo0aaKRI0fq0Ucf9b9XVlaWjh07pscee0x33323EhMTdc0119S6vqioKE2fPl27d+9WTEyMfvKTn2jx4sWOnT+A4HEZ71MDAFBvuFwuvfrqqxoxYoTtUgA0QMy5AQAAYYVwAwAAwgpzbgDUO9wtB3AmGLkBAABhhXADAADCCuEGAACEFcINAAAIK4QbAAAQVgg3AAAgrBBuAABAWCHcAACAsPL/AR7PgkVWvPS6AAAAAElFTkSuQmCC", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] @@ -2442,51 +1240,77 @@ "source": [ "plt.suptitle('MSE vs Epochs')\n", "plt.plot(tune_train_err, label='Train', color='blue')\n", - "plt.plot(tune_test_err, label='Test', color='red')\n", "plt.xlabel('Epochs')\n", "plt.ylabel('MSE')\n", - "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 26, + "execution_state": "idle", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(array([[156., 353., 404., ..., 0., 0., 0.],\n", - " [ 0., 0., 0., ..., 0., 0., 0.],\n", - " [ 0., 0., 0., ..., 0., 0., 0.],\n", + "0.0189208984375" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tune_evaluate()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "execution_state": "idle", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([[2.6100e+02, 8.9530e+03, 8.2329e+04, ..., 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., 0., 0., ..., 0., 0., 0.],\n", - " [ 0., 0., 0., ..., 0., 0., 0.],\n", - " [ 0., 0., 0., ..., 0., 0., 4.]]),\n", - " array([1. , 1.06 , 1.12 , 1.18 , 1.24 , 1.3 , 1.359, 1.42 , 1.48 ,\n", - " 1.54 , 1.6 , 1.66 , 1.72 , 1.779, 1.84 , 1.9 , 1.96 , 2.02 ,\n", - " 2.08 , 2.14 , 2.2 , 2.26 , 2.32 , 2.379, 2.44 , 2.5 , 2.559,\n", - " 2.621, 2.68 , 2.74 , 2.8 , 2.86 , 2.92 , 2.98 , 3.04 , 3.1 ,\n", - " 3.16 , 3.22 , 3.28 , 3.34 , 3.4 , 3.459, 3.52 , 3.58 , 3.64 ,\n", - " 3.7 , 3.76 , 3.82 , 3.879, 3.94 , 4. ], dtype=float16),\n", - " array([0.879 , 0.9287, 0.9785, 1.028 , 1.078 , 1.129 , 1.179 , 1.229 ,\n", - " 1.278 , 1.328 , 1.378 , 1.428 , 1.479 , 1.527 , 1.578 , 1.628 ,\n", - " 1.678 , 1.728 , 1.777 , 1.828 , 1.877 , 1.928 , 1.978 , 2.027 ,\n", - " 2.078 , 2.127 , 2.176 , 2.227 , 2.277 , 2.328 , 2.377 , 2.426 ,\n", - " 2.477 , 2.527 , 2.576 , 2.625 , 2.676 , 2.727 , 2.777 , 2.826 ,\n", - " 2.875 , 2.926 , 2.977 , 3.025 , 3.076 , 3.125 , 3.176 , 3.225 ,\n", - " 3.275 , 3.326 , 3.375 ], dtype=float16),\n", - " <matplotlib.collections.QuadMesh at 0x7f9dc16ae2a0>)" + " [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, 1.0000e+00,\n", + " 0.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.8477, 0.913 , 0.9785, 1.044 , 1.109 , 1.176 , 1.241 , 1.307 ,\n", + " 1.372 , 1.4375, 1.503 , 1.568 , 1.635 , 1.699 , 1.766 , 1.831 ,\n", + " 1.896 , 1.962 , 2.027 , 2.094 , 2.158 , 2.225 , 2.29 , 2.355 ,\n", + " 2.422 , 2.486 , 2.55 , 2.617 , 2.684 , 2.75 , 2.814 , 2.879 ,\n", + " 2.945 , 3.012 , 3.076 , 3.143 , 3.207 , 3.273 , 3.338 , 3.404 ,\n", + " 3.469 , 3.535 , 3.602 , 3.666 , 3.732 , 3.797 , 3.863 , 3.928 ,\n", + " 3.994 , 4.062 , 4.125 ], dtype=float16),\n", + " <matplotlib.collections.QuadMesh at 0x7fe6040e22a0>)" ] }, - "execution_count": 30, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi4AAAGdCAYAAAA1/PiZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAcy0lEQVR4nO3df3DV5Z0v8E8QOOBKTsvekqAElxYbf5Uf2romzgq2Iku5XfOP6zo7hW51Z+vCDIw77ZXObnu3ndnoqGWdqQM6TmXaHYaWdsEdrKVRClwVu4BkFmjrrRSF2iT2zrg5kkpE8r1/dM0STQ458SQnD3m9Zr5/nG+e53w/55lnct558v1RlWVZFgAACRhX6QIAAAZLcAEAkiG4AADJEFwAgGQILgBAMgQXACAZggsAkAzBBQBIxvhKFzAYPT098Zvf/CamTJkSVVVVlS4HABiELMvijTfeiAsvvDDGjSvPWkkSweU3v/lN1NXVVboMAGAIjh8/HjNmzCjLeyURXKZMmRLxXx+8urq60uUAwJj3p7c+eNY2b799MvY+9U+93+PlkERweeffQ9XV1YILAIwC4ydMGnTbcp7m4eRcACAZggsAkAzBBQBIhuACACSjKsuyrNJFnE2hUIh8Ph+dnZ1OzgWARAzH97cVFwAgGYILAJAMwQUASIbgAgAkQ3ABAJIhuAAAyRBcAIBkCC4AQDIEFwAgGYILAJAMwQUASIbgAgAkQ3ABAJIhuAAAyRhf6QIAgPQsGnfLWdu8nZ0q+3GtuAAAyRBcAIBkCC4AQDIEFwAgGYILAJAMwQUASIbLoQEStuTyLw+q3ZM/+6dhr4WxpaVn81nbFAqFyOfzZT2uFRcAIBmCCwCQDMEFAEiG4AIAJENwAQCSIbgAAMkQXACAZLiPC0DC3v7FLytdAowoKy4AQDIEFwAgGYILAJAMwQUASIbgAgAkQ3ABAJIhuAAAyRBcAIBkCC4AQDIEFwAgGYILAJAMwQUASIbgAgAko6SnQ69bty7WrVsXL7/8ckREXHHFFfGVr3wllixZMmCfzZs3xz/8wz/Eyy+/HJdccknce++98elPf/r9Vw5AdC5rqHQJMKJKWnGZMWNG3HPPPbF///7Yt29ffPKTn4ybb745Dh8+3G/75557Lm677ba4/fbb48CBA9HU1BRNTU1x6NChctUPAIwhVVmWZe/nDaZOnRr33Xdf3H777e/52a233hpdXV2xbdu23n3XXnttzJs3L9avXz/oYxQKhcjn89HZ2RnV1dXvp1yAc8o1n/vGoNr9+4a7hr0WeLfh+P4e8jkup0+fjk2bNkVXV1c0NPS/VLlnz5648cYb++xbvHhx7Nmzp+h7d3d3R6FQ6LMBAJQcXA4ePBgXXHBB5HK5+MIXvhBbtmyJyy+/vN+27e3tUVNT02dfTU1NtLe3Fz1Gc3Nz5PP53q2urq7UMgGAc1DJwaW+vj5aW1vjpz/9adx5552xfPny+NnPflbWotasWROdnZ292/Hjx8v6/gBAmkq6qigiYuLEiTF79uyIiLj66qtj79698eCDD8bDDz/8nra1tbXR0dHRZ19HR0fU1tYWPUYul4tcLldqaQDAOe5938elp6cnuru7+/1ZQ0NDPP300332tbS0DHhODABAMSWtuKxZsyaWLFkSM2fOjDfeeCM2btwYO3fujO3bt0dExLJly+Kiiy6K5ubmiIhYtWpVLFiwIB544IFYunRpbNq0Kfbt2xePPPLI8HwagDHmD//9/1W6BBhRJQWX1157LZYtWxZtbW2Rz+djzpw5sX379li0aFFERBw7dizGjfvvRZzGxsbYuHFj/P3f/318+ctfjksuuSS2bt0aV155Zfk/CQBwznvf93EZCe7jAtC/JZd/eVDtnvzZPw17LfBuo+o+LgAAI01wAQCSIbgAAMkQXACAZJR8AzoARo+OP/lQpUuAEWXFBQBIhuACACRDcAEAkiG4AADJEFwAgGQILgBAMgQXACAZ7uMCkLCeCZWuAEaWFRcAIBmCCwCQDMEFAEiG4AIAJENwAQCSIbgAAMlwOTRAwlwOzVhjxQUASIbgAgAkQ3ABAJIhuAAAyRBcAIBkCC4AQDJcDg2QsJP/o9IVMFYtGnfLWdu8nZ0q+3GtuAAAyRBcAIBkCC4AQDIEFwAgGYILAJAMwQUASIbgAgAkw31cABJ2wbFKV8BYNf7SS87e6HR3xP8t73GtuAAAyRBcAIBkCC4AQDIEFwAgGYILAJAMwQUASIbLoaGIwTy2PSKipWfzsNcC/Tn5oUpXwFj19i9+efY22amyH9eKCwCQDMEFAEiG4AIAJENwAQCSIbgAAMkQXACAZAguAEAy3McFiuj+n9dUugQo6gO/7Kl0CYxRg7l/VaFQiHw+X9bjWnEBAJIhuAAAyRBcAIBkCC4AQDIEFwAgGYILAJAMl0NDEbv/7YuVLgGK+oPNzw+u4XeHuxIYGVZcAIBkCC4AQDIEFwAgGYILAJAMwQUASIbgAgAko6TLoZubm+Nf//Vf4xe/+EVMnjw5Ghsb49577436+voB+2zYsCH+6q/+qs++XC4XJ0+eHHrVAER4gjljUEkrLrt27YoVK1bE888/Hy0tLXHq1Km46aaboqurq2i/6urqaGtr691eeeWV91s3ADAGlbTi8qMf/ajP6w0bNsS0adNi//79cf311w/Yr6qqKmpra4deJQDA+z3HpbOzMyIipk6dWrTdiRMn4uKLL466urq4+eab4/Dhw0Xbd3d3R6FQ6LMBAAw5uPT09MTq1avjuuuuiyuvvHLAdvX19fGtb30rHn/88fiXf/mX6OnpicbGxvj1r389YJ/m5ubI5/O9W11d3VDLBADOIVVZlmVD6XjnnXfGk08+Gc8880zMmDFj0P1OnToVl112Wdx2223x9a9/vd823d3d0d3d3fu6UChEXV1ddHZ2RnV19VDKBTgnXf9n9w2qneduUQmFQiHy+XxZv7+H9JDFlStXxrZt22L37t0lhZaIiAkTJsT8+fPjpZdeGrBNLpeLXC43lNIAgHNYSf8qyrIsVq5cGVu2bIkdO3bErFmzSj7g6dOn4+DBgzF9+vSS+wIAY1tJKy4rVqyIjRs3xuOPPx5TpkyJ9vb2iIjI5/MxefLkiIhYtmxZXHTRRdHc3BwREV/72tfi2muvjdmzZ8d//ud/xn333RevvPJK3HHHHcPxeaCsFo27ZVDtWno2D3stAJQYXNatWxcREQsXLuyz/7HHHovPfe5zERFx7NixGDfuvxdyXn/99fjrv/7raG9vjw9+8INx9dVXx3PPPReXX355eT4BADBmlBRcBnMe786dO/u8Xrt2baxdu7b0ygAA3sWzigCAZAguAEAyBBcAIBmCCwCQjCHdgA7Git/+bWOlS4Cictv+vdIlwIiy4gIAJENwAQCSIbgAAMkQXACAZAguAEAyBBcAIBkuh4YiTk2pdAUAnMmKCwCQDMEFAEiG4AIAJENwAQCSIbgAAMkQXACAZAguAEAy3McFiui67K1KlwBFtfRsrnQJMKKsuAAAyRBcAIBkCC4AQDIEFwAgGYILAJAMwQUASIbLoaGIca9PqHQJUNSicbcMqp3LpjlXWHEBAJIhuAAAyRBcAIBkCC4AQDIEFwAgGYILAJAMwQUASIb7uEARPVPfqnQJUJT7szDWWHEBAJIhuAAAyRBcAIBkCC4AQDIEFwAgGYILAJAMl0NDEdlbsj2j26JxtwyqncumOVf4rQwAJENwAQCSIbgAAMkQXACAZAguAEAyBBcAIBkuh4YiqkR7RjmXOTPW+LUMACRDcAEAkiG4AADJEFwAgGQILgBAMgQXACAZggsAkAz3cYFizuupdAUAnMGKCwCQDMEFAEiG4AIAJENwAQCSIbgAAMkQXACAZJQUXJqbm+MTn/hETJkyJaZNmxZNTU3x4osvnrXf5s2b49JLL41JkybFxz72sfjhD3/4fmqGkdNTNbgNgBFRUnDZtWtXrFixIp5//vloaWmJU6dOxU033RRdXV0D9nnuuefitttui9tvvz0OHDgQTU1N0dTUFIcOHSpH/QDAGFKVZVk21M6//e1vY9q0abFr1664/vrr+21z6623RldXV2zbtq1337XXXhvz5s2L9evXD+o4hUIh8vl8dHZ2RnV19VDLhZL90YZ7B9Xu5c/9r2GvBSA1w/H9/b7Ocens7IyIiKlTpw7YZs+ePXHjjTf22bd48eLYs2fPgH26u7ujUCj02QAAhhxcenp6YvXq1XHdddfFlVdeOWC79vb2qKmp6bOvpqYm2tvbB+zT3Nwc+Xy+d6urqxtqmQDAOWTIwWXFihVx6NCh2LRpU3kriog1a9ZEZ2dn73b8+PGyHwMASM+QHrK4cuXK2LZtW+zevTtmzJhRtG1tbW10dHT02dfR0RG1tbUD9snlcpHL5YZSGgBwDitpxSXLsli5cmVs2bIlduzYEbNmzTprn4aGhnj66af77GtpaYmGhobSqwUAxrSSVlxWrFgRGzdujMcffzymTJnSe55KPp+PyZMnR0TEsmXL4qKLLorm5uaIiFi1alUsWLAgHnjggVi6dGls2rQp9u3bF4888shwfB4oq6oTQ1qUBGCYlLTism7duujs7IyFCxfG9OnTe7fvfve7vW2OHTsWbW1tva8bGxtj48aN8cgjj8TcuXPj+9//fmzdurXoCb0AAP0p6c/JwdzyZefOne/Zd8stt8Qtt9xSWmUAAO/iWUUAQDIEFwAgGYILAJAMwQUASIZrPaGIqj/srnQJAJzBigsAkAzBBQBIhuACACRDcAEAkiG4AADJEFwAgGS4HBqKOfvjuQAYQVZcAIBkCC4AQDIEFwAgGYILAJAMwQUASIbgAgAkQ3ABAJLhPi5QxOSDkytdAgBnsOICACRDcAEAkiG4AADJEFwAgGQILgBAMgQXACAZLoeGIk5dUOkKADiTFRcAIBmCCwCQDMEFAEiG4AIAJENwAQCSIbgAAMkQXACAZLiPCxTx9vlZpUsA4AxWXACAZAguAEAyBBcAIBmCCwCQDMEFAEiG4AIAJMPl0FDE+N9VVboEAM5gxQUASIbgAgAkQ3ABAJIhuAAAyRBcAIBkCC4AQDJcDg1FTDhR6QoAOJMVFwAgGYILAJAMwQUASIbgAgAkQ3ABAJIhuAAAyRBcAIBkuI8LFHE6V+kKADiTFRcAIBmCCwCQDMEFAEiG4AIAJENwAQCSIbgAAMko+XLo3bt3x3333Rf79++Ptra22LJlSzQ1NQ3YfufOnXHDDTe8Z39bW1vU1taWdOw/W3J/jB8/qWibp3Z9uaT3hGJm/OTNwTX838NdCQAxlBWXrq6umDt3bjz00EMl9XvxxRejra2td5s2bVqphwYAxriSV1yWLFkSS5YsKflA06ZNiw984AMl9wMAeMeIneMyb968mD59eixatCieffbZom27u7ujUCj02QAAhj24TJ8+PdavXx8/+MEP4gc/+EHU1dXFwoUL44UXXhiwT3Nzc+Tz+d6trq5uuMsEABIw7M8qqq+vj/r6+t7XjY2NceTIkVi7dm185zvf6bfPmjVr4q677up9XSgUhBcAoDIPWbzmmmvimWeeGfDnuVwucjlPtwMA+qpIcGltbY3p06eX3O+t6gnRM2HCsNQE/an6PwcqXQIAZyg5uJw4cSJeeuml3tdHjx6N1tbWmDp1asycOTPWrFkTr776anz729+OiIh//ud/jlmzZsUVV1wRJ0+ejEcffTR27NgRP/7xj8v7SQCAc17JwWXfvn19bij3zrkoy5cvjw0bNkRbW1scO3as9+dvvfVW/N3f/V28+uqrcf7558ecOXPiqaee6vemdAAAxVRlWZZVuoizKRQKkc/no+FPvxbjJxS/c+7uf/viiNXFuW/RuFsG1a6lZ/Ow1wKQmne+vzs7O6O6uros7+lZRQBAMgQXACAZggsAkAzBBQBIRkXu4zJUEwunYvz48ypdBmOIk24BRhcrLgBAMgQXACAZggsAkAzBBQBIhuACACRDcAEAkpHU5dC/Xjg5zptU/FlFUE6eVQQwulhxAQCSIbgAAMkQXACAZAguAEAyBBcAIBmCCwCQDMEFAEhGUvdxmfzbiPMmVroKxpLsT+ZXugQAzmDFBQBIhuACACRDcAEAkiG4AADJEFwAgGQILgBAMpK6HLrz6u4YN7mq0mUwhvyuNlfpEgA4gxUXACAZggsAkAzBBQBIhuACACRDcAEAkiG4AADJEFwAgGQkdR+XObNejQl/MLHSZTCGnLhQtgcYTfxWBgCSIbgAAMkQXACAZAguAEAyBBcAIBmCCwCQjKQuh54y/mRMnNBT6TIYQ7qnVroCAM5kxQUASIbgAgAkQ3ABAJIhuAAAyRBcAIBkCC4AQDKSuhz6oxe0x6QLJlS6DMaQmr1vV7oEAM5gxQUASIbgAgAkQ3ABAJIhuAAAyRBcAIBkCC4AQDIEFwAgGUndx6Vh8pH4g/NlLUbO7n/7YqVLAOAMUgAAkAzBBQBIhuACACRDcAEAkiG4AADJEFwAgGSUHFx2794dn/nMZ+LCCy+Mqqqq2Lp161n77Ny5M6666qrI5XIxe/bs2LBhw5CKvXZSVVw3aVzRDQA4d5X8Td/V1RVz586Nhx56aFDtjx49GkuXLo0bbrghWltbY/Xq1XHHHXfE9u3bh1IvADCGlXwDuiVLlsSSJUsG3X79+vUxa9aseOCBByIi4rLLLotnnnkm1q5dG4sXLy718ADAGDbs/1vZs2dP3HjjjX32LV68OPbs2TNgn+7u7igUCn02AIBhDy7t7e1RU1PTZ19NTU0UCoV48803++3T3Nwc+Xy+d6urqxvuMgGABIzKs1nXrFkTnZ2dvdvx48crXRIAMAoM+0MWa2tro6Ojo8++jo6OqK6ujsmTJ/fbJ5fLRS6XG+7SAIDEDPuKS0NDQzz99NN99rW0tERDQ8NwHxoAOMeUvOJy4sSJeOmll3pfHz16NFpbW2Pq1Kkxc+bMWLNmTbz66qvx7W9/OyIivvCFL8Q3v/nN+NKXvhSf//znY8eOHfG9730vnnjiiZKLPdHTHeN6imet6pLfFQBIRckrLvv27Yv58+fH/PnzIyLirrvuivnz58dXvvKViIhoa2uLY8eO9bafNWtWPPHEE9HS0hJz586NBx54IB599FGXQgMAJavKsiyrdBFnUygUIp/Px/FfXBTVU86y4nLhsaI/BwBGxjvf352dnVFdXZ7/iYzKq4oAAPojuAAAyRBcAIBkCC4AQDKG/QZ05fTdE7Ni8llK/tsRqwYAGGlWXACAZAguAEAyBBcAIBmCCwCQDMEFAEhGElcVvfNUgpMn3j5r20KhMAIVAQBn8853cjmfLpTEs4p+9atfxUc+8pFKlwEADMGRI0fiwx/+cFneK4kVl6lTp0ZExLFjxyKfz1e6nGQVCoWoq6uL48ePl+1hV2OVsSwfY1kexrF8jGX5dHZ2xsyZM3u/x8shieAybtzvT8XJ5/MmURlUV1cbxzIxluVjLMvDOJaPsSyfd77Hy/JeZXsnAIBhJrgAAMlIIrjkcrn46le/GrlcrtKlJM04lo+xLB9jWR7GsXyMZfkMx1gmcVURAECksuICABCCCwCQEsEFAEiG4AIAJKPiwWX37t3xmc98Ji688MKoqqqKrVu3nrXPzp0746qrropcLhezZ8+ODRs2jEito12pY7lz586oqqp6z9be3j5iNY9Gzc3N8YlPfCKmTJkS06ZNi6ampnjxxRfP2m/z5s1x6aWXxqRJk+JjH/tY/PCHPxyRekezoYzlhg0b3jMnJ02aNGI1j1br1q2LOXPm9N4UraGhIZ588smifczJ9yp1HM3HwbnnnnuiqqoqVq9eXbRdOeZkxYNLV1dXzJ07Nx566KFBtT969GgsXbo0brjhhmhtbY3Vq1fHHXfcEdu3bx/2Wke7UsfyHS+++GK0tbX1btOmTRu2GlOwa9euWLFiRTz//PPR0tISp06diptuuim6uroG7PPcc8/FbbfdFrfffnscOHAgmpqaoqmpKQ4dOjSitY82QxnL+K87lp45J1955ZURq3m0mjFjRtxzzz2xf//+2LdvX3zyk5+Mm2++OQ4fPtxve3Oyf6WOY5iPZ7V37954+OGHY86cOUXblW1OZqNIRGRbtmwp2uZLX/pSdsUVV/TZd+utt2aLFy8e5urSMpix/MlPfpJFRPb666+PWF0peu2117KIyHbt2jVgmz//8z/Pli5d2mffH//xH2d/8zd/MwIVpmMwY/nYY49l+Xx+ROtK1Qc/+MHs0Ucf7fdn5uTgFRtH87G4N954I7vkkkuylpaWbMGCBdmqVasGbFuuOVnxFZdS7dmzJ2688cY++xYvXhx79uypWE2pmzdvXkyfPj0WLVoUzz77bKXLGXU6OzsjznjYZ3/My8EZzFhGRJw4cSIuvvjiqKurO+tfw2PR6dOnY9OmTdHV1RUNDQ39tjEnz24w4xjmY1ErVqyIpUuXvmeu9adcczKJhyyeqb29PWpqavrsq6mpiUKhEG+++WZMnjy5YrWlZvr06bF+/fr4+Mc/Ht3d3fHoo4/GwoUL46c//WlcddVVlS5vVOjp6YnVq1fHddddF1deeeWA7Qaal2P9fKEzDXYs6+vr41vf+lbMmTMnOjs74/7774/GxsY4fPhwzJgxY0RrHm0OHjwYDQ0NcfLkybjgggtiy5Ytcfnll/fb1pwcWCnjaD4ObNOmTfHCCy/E3r17B9W+XHMyueBC+dTX10d9fX3v68bGxjhy5EisXbs2vvOd71S0ttFixYoVcejQoXjmmWcqXUryBjuWDQ0Nff76bWxsjMsuuywefvjh+PrXvz4ClY5e9fX10draGp2dnfH9738/li9fHrt27RrwS5f+lTKO5mP/jh8/HqtWrYqWlpYRP1k5ueBSW1sbHR0dffZ1dHREdXW11ZYyuOaaa3xJ/5eVK1fGtm3bYvfu3Wf9y2qgeVlbWzvMVaahlLF8twkTJsT8+fPjpZdeGrb6UjFx4sSYPXt2RERcffXVsXfv3njwwQfj4Ycffk9bc3JgpYzju5mPv7d///547bXX+qzOnz59Onbv3h3f/OY3o7u7O84777w+fco1J5M7x6WhoSGefvrpPvtaWlqK/n+SwWttbY3p06dXuoyKyrIsVq5cGVu2bIkdO3bErFmzztrHvOzfUMby3U6fPh0HDx4c8/OyPz09PdHd3d3vz8zJwSs2ju9mPv7epz71qTh48GC0trb2bh//+MfjL//yL6O1tfU9oSXKOSeHfCpxmbzxxhvZgQMHsgMHDmQRkX3jG9/IDhw4kL3yyitZlmXZ3XffnX32s5/tbf+rX/0qO//887MvfvGL2c9//vPsoYceys4777zsRz/6UQU/xehQ6liuXbs227p1a/bLX/4yO3jwYLZq1aps3Lhx2VNPPVXBT1F5d955Z5bP57OdO3dmbW1tvdvvfve73jaf/exns7vvvrv39bPPPpuNHz8+u//++7Of//zn2Ve/+tVswoQJ2cGDByv0KUaHoYzlP/7jP2bbt2/Pjhw5ku3fvz/7i7/4i2zSpEnZ4cOHK/QpRoe7774727VrV3b06NHsP/7jP7K77747q6qqyn784x9nmTk5aKWOo/k4eO++qmi45mTFg8s7l+S+e1u+fHmWZVm2fPnybMGCBe/pM2/evGzixInZhz/84eyxxx6rUPWjS6ljee+992Yf+chHskmTJmVTp07NFi5cmO3YsaOCn2B06G8MI6LPPFuwYEHvuL7je9/7XvbRj340mzhxYnbFFVdkTzzxRAWqH12GMparV6/OZs6cmU2cODGrqanJPv3pT2cvvPBChT7B6PH5z38+u/jii7OJEydmH/rQh7JPfepTvV+2mTk5aKWOo/k4eO8OLsM1J6uy3/9yAQAY9ZI7xwUAGLsEFwAgGYILAJAMwQUASIbgAgAkQ3ABAJIhuAAAyRBcAIBkCC4AQDIEFwAgGYILAJAMwQUASMb/ByhxjawVIMzxAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] @@ -2496,7 +1320,7 @@ } ], "source": [ - "batch_src, batch_labels, batch_padding_mask = mktunebatch(2048)\n", + "batch_src, batch_labels, batch_padding_mask = mktunebatch(BSZ)\n", "model.eval()\n", "with torch.no_grad():\n", " output = model(batch_src, batch_padding_mask)\n", @@ -2513,6 +1337,72 @@ "source": [ "# Step 6: Test generalization" ] + }, + { + "cell_type": "code", + "execution_count": 28, + "execution_state": "idle", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.1767578125\n" + ] + }, + { + "data": { + "text/plain": [ + "(array([[ 241., 824., 9690., ..., 0., 0., 0.],\n", + " [ 0., 0., 0., ..., 0., 0., 0.],\n", + " [ 0., 0., 0., ..., 0., 0., 0.],\n", + " ...,\n", + " [ 0., 0., 0., ..., 0., 0., 0.],\n", + " [ 0., 0., 0., ..., 0., 0., 0.],\n", + " [ 0., 0., 0., ..., 0., 0., 0.]]),\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.7344, 0.818 , 0.9014, 0.9844, 1.068 , 1.151 , 1.234 , 1.318 ,\n", + " 1.402 , 1.485 , 1.568 , 1.652 , 1.735 , 1.819 , 1.902 , 1.986 ,\n", + " 2.07 , 2.152 , 2.236 , 2.32 , 2.402 , 2.486 , 2.57 , 2.652 ,\n", + " 2.736 , 2.82 , 2.904 , 2.986 , 3.07 , 3.154 , 3.238 , 3.32 ,\n", + " 3.404 , 3.488 , 3.57 , 3.654 , 3.738 , 3.822 , 3.904 , 3.988 ,\n", + " 4.07 , 4.156 , 4.24 , 4.32 , 4.406 , 4.49 , 4.57 , 4.656 ,\n", + " 4.74 , 4.824 , 4.906 ], dtype=float16),\n", + " <matplotlib.collections.QuadMesh at 0x7fe607ee0110>)" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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7ty5+vDDD01HC8vNXquffvppff/739fmzZv11ltvadCgQZo/f74u9+EDjXtwXEKSs3PnTtMxBsTZs2cdSc7+/ftNRxkwQ4YMcZ577jnTMaLi4sWLzrhx45za2lpn1qxZzsqVK01HioonnnjCmTp1qukYA+IrX/mK85nPfMZ0jJhYuXKlc+eddzqhUMh0lIgtWLDAWbZsWY99f/zHf+wsWbLEWKZouXTpkuP1ep3XXnutx/7p06c7X//6143litT//1odCoWc3Nxc55lnnuned/78ecfn8zk//vGPw/reVl9hSRQXLlyQfu9DHuNJMBjU9u3b1dHRIb/fbzpOVJSXl2vBggWaO3eu6ShR984772jYsGEaM2aMlixZoubmZtORouKf//mfdc8996i0tFTZ2dmaNm2ann32WdOxou7KlSt6+eWXtWzZMnk8HtNxIlZUVKR9+/bpN7/5jSTp3//933Xw4EEVFxebjhaxq1evKhgMKi0trcf+9PT0uLmyKUnvv/++Wltbe/y+zMrK0n333af6+vqwvpcrPvwwnoVCIVVUVGjmzJmaPHmy6ThR09TUJL/fr8uXL2vw4MHauXOnJk6caDpWxLZv3663337ble8z38x9992nbdu2qaCgQC0tLfrWt76lP/qjP9Lx48eVkZFhOl5E3nvvPW3atEmVlZX62te+poaGBv3VX/2VUlNTtXTpUtPxombXrl06f/68vvjFL5qOEhVf/epXFQgENH78eHm9XgWDQT311FNasmSJ6WgRy8jIkN/v1+rVqzVhwgTl5OToxz/+serr6zV27FjT8aKmtbVVkpSTk9Njf05OTvfX+orCYlh5ebmOHz8eV41akgoKCtTY2KgLFy7o1Vdf1dKlS7V//35Xl5YzZ85o5cqVqq2tveavonjw+3+1FhYW6r777tOoUaP0yiuv6OGHHzaaLVKhUEj33HOPvvOd70iSpk2bpuPHj2vz5s1xVVief/55FRcXa9iwYaajRMUrr7yiH/3oR6qpqdGkSZPU2NioiooKDRs2LC5+bi+99JKWLVum4cOHy+v1avr06Vq8eLGOHj1qOpqVeEvIoBUrVui1117TL37xC40YMcJ0nKhKTU3V2LFjNWPGDFVXV2vq1Klav3696VgROXr0qM6ePavp06crOTlZycnJ2r9/v77//e8rOTlZwWDQdMSouvXWW3XXXXfp1KlTpqNELC8v75qyPGHChLh5y0uSTp8+rZ///Odavny56ShRs2rVKn31q1/Vn/7pn2rKlCn68z//cz366KOqrq42HS0q7rzzTu3fv1/t7e06c+aMfvnLX6qrq0tjxowxHS1qcnNzJUltbW099re1tXV/ra8oLAY4jqMVK1Zo586devPNNzV69GjTkQZcKBRSZ2en6RgRmTNnjpqamtTY2Ni93XPPPVqyZIkaGxvl9XpNR4yq9vZ2vfvuu8rLyzMdJWIzZ868ZumA3/zmNxo1apSxTNH24osvKjs7WwsWLDAdJWouXbqkpKSeL1Ner1ehUMhYpoEwaNAg5eXl6dy5c9q7d68WLVpkOlLUjB49Wrm5udq3b1/3vkAgoLfeeivs+xqtfkuovb29x19377//vhobGzV06FCNHDnSaLZIlJeXq6amRrt371ZGRkb3+3hZWVlKT083HS9iVVVVKi4u1siRI3Xx4kXV1NSorq5Oe/fuNR0tIhkZGdfcZzRo0CDddtttcXH/0d/8zd9o4cKFGjVqlD766CM98cQT8nq9Wrx4seloEXv00UdVVFSk73znO/qTP/kT/fKXv9TWrVu1detW09GiIhQK6cUXX9TSpUuVnGz1r/WwLFy4UE899ZRGjhypSZMm6dixY/q7v/s7LVu2zHS0qNi7d68cx1FBQYFOnTqlVatWafz48frSl75kOlpYbvZaXVFRoW9/+9saN26cRo8erccff1zDhg1TSUlJeE8U1flMUfaLX/zCkXTNtnTpUtPRInK9c5LkvPjii6ajRcWyZcucUaNGOampqc7tt9/uzJkzx/nZz35mOtaAiKdpzV/4whecvLw8JzU11Rk+fLjzhS98wTl16pTpWFHzL//yL87kyZMdn8/njB8/3tm6davpSFGzd+9eR5Jz8uRJ01GiKhAIOCtXrnRGjhzppKWlOWPGjHG+/vWvO52dnaajRcVPfvITZ8yYMU5qaqqTm5vrlJeXO+fPnzcdK2w3e60OhULO448/7uTk5Dg+n8+ZM2dOv/6tepx4WTIQAADELe5hAQAA1qOwAAAA61FYAACA9SgsAADAehQWAABgPQoLAACwHoUFAABYj8ICAACsR2EBAADWo7AAAADrUVgAAID1KCwAAMB6/w/wFoD82D83ywAAAABJRU5ErkJggg==", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "batch_src, batch_labels, batch_padding_mask = mktunebatch(BSZ, test=True)\n", + "model.eval()\n", + "with torch.no_grad():\n", + " output = model(batch_src, batch_padding_mask)\n", + "print(criterion(output.squeeze(1), batch_labels).item())\n", + "x = batch_labels.detach().to(torch.float16).cpu().numpy().flatten()\n", + "y = output.detach().to(torch.float16).cpu().numpy().flatten()\n", + "plt.hist2d(x, y, bins=50, norm=mpl.colors.LogNorm())" + ] } ], "metadata": { @@ -2535,7 +1425,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.3" + "version": "3.12.7" } }, "nbformat": 4, |