diff options
-rw-r--r-- | transformer_shortest_paths.ipynb | 1317 |
1 files changed, 343 insertions, 974 deletions
diff --git a/transformer_shortest_paths.ipynb b/transformer_shortest_paths.ipynb index 63f89ff..c2164ac 100644 --- a/transformer_shortest_paths.ipynb +++ b/transformer_shortest_paths.ipynb @@ -67,10 +67,11 @@ "# VTXS numbers here are inclusive\n", "MIN_VTXS = 3\n", "MAX_VTXS = 15\n", - "MAX_TUNE_VTXS = 7 # 15\n", + "MAX_TUNE_VTXS = 7\n", "AVG_DEG = 2\n", "SEQ_LEN = MAX_VTXS + 1 # means 32 edges, final token is the target vertex\n", "PAD_TOKEN = 0\n", + "EPOCH_SIZE = 2**20\n", "# vertices are labelled 1,2,...,63\n", "# we also have a padding token which is 0." ] @@ -88,13 +89,7 @@ "cell_type": "code", "execution_count": 3, "execution_state": "idle", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "1IbzGIWseK3E", - "outputId": "a3cbc233-358c-4e17-ea6e-f4e9349d886b" - }, + "metadata": {}, "outputs": [], "source": [ "# original task data\n", @@ -121,11 +116,9 @@ " edge_list += [PAD_TOKEN]*(2*SEQ_LEN-1-len(edge_list))\n", " return edge_list, adjacencies\n", "\n", - "\"\"\"\n", - "input: G, represented as an adjacency list\n", - "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", + "# input: G, represented as an adjacency list\n", + "# 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", "def SSSP(G, target=2):\n", " dist = [MAX_VTXS for _ in G]\n", " dist[1] = 0\n", @@ -157,7 +150,7 @@ " distance1.append(dist)\n", " \n", " data = torch.tensor(graphs1)\n", - " labels = torch.tensor(distance1, dtype=torch.bfloat16)\n", + " labels = torch.tensor(distance1, dtype=torch.float32)\n", " padding = data == PAD_TOKEN\n", " return data, labels, padding\n", "\n", @@ -169,7 +162,7 @@ " \"padding\": padding,\n", " }\n", " \n", - " with open(f'data/{idx}.pickle', 'wb') as file:\n", + " with open(f'data31/{idx}.pickle', 'wb') as file:\n", " pickle.dump(everything, file)\n", "\n", "def vertices_on_shortest_12_path(G, target=2):\n", @@ -205,13 +198,15 @@ " if len(path) > 1:\n", " target_vtx_idx = random.randrange(1, len(path))\n", " target_vtx = path[target_vtx_idx]\n", + " if target_vtx > MAX_TUNE_VTXS:\n", + " continue\n", " edge_list[-1] = target_vtx\n", " graphs.append(edge_list)\n", " distance.append(target_vtx_idx)\n", " break\n", " \n", - " data = torch.tensor(graphs, device=device)\n", - " labels = torch.tensor(distance, dtype=torch.bfloat16, device=device)\n", + " data = torch.tensor(graphs)\n", + " labels = torch.tensor(distance, dtype=torch.float32)\n", " padding = data == PAD_TOKEN\n", " return data, labels, padding" ] @@ -229,13 +224,13 @@ "\n", "# with ProcessPoolExecutor() as executor:\n", "# for i in range(1000):\n", - "# executor.submit(savebatch, 2**20, i)\n", + "# executor.submit(savebatch, EPOCH_SIZE, i)\n", "# executor.shutdown()" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "execution_state": "idle", "metadata": {}, "outputs": [ @@ -252,7 +247,7 @@ " 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([ 1., 5., 1., 15., 2.]),\n", " tensor([[False, False, False, False, False, False, False, False, False, False,\n", " False, False, False, False, False, False, False, False, False, False,\n", " False, False, True, True, True, True, True, True, True, True,\n", @@ -275,7 +270,7 @@ " False]]))" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -286,7 +281,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "execution_state": "idle", "metadata": {}, "outputs": [ @@ -313,7 +308,7 @@ " <BarContainer object of 64 artists>)" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, @@ -334,7 +329,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "execution_state": "idle", "metadata": {}, "outputs": [ @@ -361,7 +356,7 @@ " <BarContainer object of 64 artists>)" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, @@ -391,7 +386,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 4, "execution_state": "idle", "metadata": { "id": "tLOWhg_CeWzH" @@ -402,16 +397,12 @@ " def __init__(self, input_dim, model_dim, output_dim, num_heads, num_layers, seq_len, dropout):\n", " super().__init__()\n", " self.model_dim = model_dim\n", - " self.embedding = nn.Embedding(input_dim, model_dim // 2, dtype=torch.bfloat16)\n", - " # # seq_len is odd\n", - " # self.fancy_encoding = torch.repeat_interleave(torch.rand((1, seq_len // 2 + 1, model_dim // 2), device=device, dtype=torch.bfloat16), 2, dim=1)\n", - " # # cut off last element since the target vertex is not repeated\n", - " # self.fancy_encoding = self.fancy_encoding[:, :seq_len, :]\n", + " self.embedding = nn.Embedding(input_dim, model_dim // 2)\n", " encoder_layer = nn.TransformerEncoderLayer(d_model=model_dim, nhead=num_heads,\n", " dim_feedforward=model_dim*4,\n", - " dropout=dropout, batch_first=True, dtype=torch.bfloat16)\n", + " dropout=dropout, batch_first=True)\n", " self.transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers)\n", - " self.fc_out = nn.Linear(model_dim, output_dim, dtype=torch.bfloat16)\n", + " self.fc_out = nn.Linear(model_dim, output_dim)\n", "\n", " def forward(self, src, key_padding_mask):\n", " batch_sz = src.size(0)\n", @@ -432,7 +423,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "execution_state": "idle", "metadata": { "colab": { @@ -446,8 +437,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Training data: 104M\n", - "Trainable parameters in the model: 200545\n" + "Training data: 1048576K\n", + "Trainable parameters in the model: 500449\n" ] } ], @@ -455,11 +446,10 @@ "# PARAMS\n", "VOCAB_SIZE = 1 + MAX_VTXS + 1 # pad plus max number of vertices plus target token\n", "MODEL_DIM = 64 # Dimension of model (embedding and transformer)\n", - "NEPOCHS = 100\n", - "BSZ = 2**17 # Batch size\n", - "BPE = 8 # Batches per epoch\n", + "NEPOCHS = 1000\n", + "BSZ = 2**15 # Batch size\n", "NHEADS = 2\n", - "NLAYERS = 4\n", + "NLAYERS = 10\n", "DROPOUT = 0 # 0.2\n", "model = TransformerModel(input_dim=VOCAB_SIZE, model_dim=MODEL_DIM,\n", " output_dim=1, num_heads=NHEADS,\n", @@ -468,14 +458,14 @@ "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*BPE*BSZ//10**6}M\")\n", + "print(f\"Training data: {NEPOCHS*EPOCH_SIZE//10**3}K\")\n", "print(f\"Trainable parameters in the model: {trainable_params}\")\n", "\n", "train_err = []\n", "len1 = []\n", "len2 = []\n", "len3 = []\n", - "len15 = []\n", + "leninf = []\n", "epoch = 0\n", "\n", "# clear loss file\n", @@ -483,23 +473,8 @@ ] }, { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "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", - "LR of 8e-4 for 1000 epochs to get down to 0.35546875" - ] - }, - { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "execution_state": "idle", "metadata": {}, "outputs": [], @@ -511,12 +486,10 @@ "# model = torch.compile(model)\n", "# model.load_state_dict(torch.load('model.pth', weights_only=True))\n", "\n", - "LR = 8e-4\n", - "WD = 0 # 1e-5\n", + "LR = 5e-4\n", "\n", "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)" + "optimizer = torch.optim.Adam(model.parameters(), lr=LR)" ] }, { @@ -530,35 +503,7 @@ }, { "cell_type": "code", - "execution_count": 11, - "execution_state": "idle", - "metadata": {}, - "outputs": [], - "source": [ - "def evaluate():\n", - " model.eval()\n", - " test_loss = 0\n", - " with torch.no_grad():\n", - " batch_src, batch_labels, batch_padding_mask = map(lambda x: x.to(device), mkbatch(BSZ))\n", - " output = model(batch_src, batch_padding_mask)\n", - " loss = criterion(output.squeeze(1), batch_labels)\n", - " return loss.item()\n", - "\n", - "# figure out if it's doing better on short paths\n", - "def evaluate_short():\n", - " model.eval()\n", - " test_loss = 0\n", - " with torch.no_grad():\n", - " batch_src, batch_labels, batch_padding_mask = map(lambda x: x.to(device), 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()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "execution_state": "idle", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -567,814 +512,38 @@ "id": "pvTfzGmCeXU4", "outputId": "0d3a20f3-23be-4c19-9eb6-46bfe11a48b1" }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/sipb/.venv/lib64/python3.12/site-packages/torch/nn/functional.py:6278: UserWarning: Memory Efficient attention on Navi31 GPU is still experimental. Enable it with TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1. (Triggered internally at ../aten/src/ATen/native/transformers/hip/sdp_utils.cpp:269.)\n", - " attn_output = scaled_dot_product_attention(\n", - "/tmp/torchinductor_sipb/bn/cbngaobakjqlwlijvkqph5lgddb2z2kzjaln3b2g2j75b6snskdn.py:859: 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, (2097152, 64), (64, 1), 0), reinterpret_tensor(primals_5, (64, 192), (1, 64), 0), out=buf2)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 0/100 \t Train Err: 87.5000 0.62109375 3.28125 8.125 222.0\n", - "Epoch 0/100 \t Train Err: 70.5000 0.5078125 0.173828125 1.953125 182.0\n", - "Epoch 0/100 \t Train Err: 59.7500 2.828125 0.4140625 0.134765625 154.0\n", - "Epoch 0/100 \t Train Err: 54.0000 5.5 1.734375 0.1279296875 137.0\n", - "Epoch 0/100 \t Train Err: 50.7500 7.9375 3.21875 0.6953125 126.0\n", - "Epoch 0/100 \t Train Err: 48.5000 10.0 4.625 1.40625 118.0\n", - "Epoch 0/100 \t Train Err: 46.7500 11.75 5.84375 2.109375 111.5\n", - "Epoch 0/100 \t Train Err: 45.7500 13.125 6.90625 2.75 107.5\n", - "Epoch 1/100 \t Train Err: 44.7500 14.25 7.75 3.28125 104.0\n", - "Epoch 1/100 \t Train Err: 44.5000 15.1875 8.4375 3.71875 102.0\n", - "Epoch 1/100 \t Train Err: 44.2500 15.875 9.0 4.09375 100.0\n", - "Epoch 1/100 \t Train Err: 43.7500 16.5 9.4375 4.34375 98.5\n", - "Epoch 1/100 \t Train Err: 43.7500 16.875 9.8125 4.59375 97.5\n", - "Epoch 1/100 \t Train Err: 43.5000 17.25 10.1875 4.8125 96.5\n", - "Epoch 1/100 \t Train Err: 43.2500 17.625 10.4375 5.0 95.0\n", - "Epoch 1/100 \t Train Err: 43.2500 18.0 10.6875 5.1875 95.0\n", - "Epoch 2/100 \t Train Err: 43.0000 18.5 11.0 5.34375 94.0\n", - "Epoch 2/100 \t Train Err: 42.5000 18.75 11.25 5.5625 92.5\n", - "Epoch 2/100 \t Train Err: 42.7500 19.125 11.5625 5.75 92.5\n", - "Epoch 2/100 \t Train Err: 42.5000 19.5 11.8125 5.9375 91.5\n", - "Epoch 2/100 \t Train Err: 42.0000 19.875 12.1875 6.1875 90.0\n", - "Epoch 2/100 \t Train Err: 42.2500 20.25 12.5 6.40625 90.0\n", - "Epoch 2/100 \t Train Err: 42.0000 20.625 12.6875 6.59375 89.0\n", - "Epoch 2/100 \t Train Err: 41.7500 21.0 13.0625 6.84375 88.0\n", - "Epoch 3/100 \t Train Err: 42.2500 21.375 13.375 7.0625 88.0\n", - "Epoch 3/100 \t Train Err: 41.7500 21.75 13.6875 7.28125 86.0\n", - "Epoch 3/100 \t Train Err: 41.5000 22.125 14.0 7.5625 85.5\n", - "Epoch 3/100 \t Train Err: 41.7500 22.5 14.3125 7.75 85.5\n", - "Epoch 3/100 \t Train Err: 41.2500 22.875 14.5625 7.9375 84.5\n", - "Epoch 3/100 \t Train Err: 41.2500 23.25 14.875 8.1875 83.5\n", - "Epoch 3/100 \t Train Err: 41.5000 23.5 15.1875 8.4375 83.5\n", - "Epoch 3/100 \t Train Err: 41.2500 23.75 15.4375 8.625 82.0\n", - "Epoch 4/100 \t Train Err: 41.0000 24.125 15.75 8.8125 81.0\n", - "Epoch 4/100 \t Train Err: 40.7500 24.375 16.0 9.0625 81.0\n", - "Epoch 4/100 \t Train Err: 40.7500 24.5 16.25 9.25 80.5\n", - "Epoch 4/100 \t Train Err: 40.7500 24.625 16.5 9.4375 79.5\n", - "Epoch 4/100 \t Train Err: 40.5000 24.75 16.75 9.625 79.0\n", - "Epoch 4/100 \t Train Err: 40.5000 24.625 16.875 9.75 79.0\n", - "Epoch 4/100 \t Train Err: 40.2500 24.375 17.125 9.875 78.5\n", - "Epoch 4/100 \t Train Err: 40.0000 23.75 17.125 10.0 78.0\n", - "Epoch 5/100 \t Train Err: 39.7500 23.0 17.125 10.0625 77.5\n", - "Epoch 5/100 \t Train Err: 39.5000 21.5 17.0 10.0 78.0\n", - "Epoch 5/100 \t Train Err: 38.7500 19.375 16.75 9.875 78.0\n", - "Epoch 5/100 \t Train Err: 38.5000 16.5 16.25 9.6875 78.5\n", - "Epoch 5/100 \t Train Err: 37.5000 12.9375 15.625 9.375 79.0\n", - "Epoch 5/100 \t Train Err: 36.5000 8.875 14.9375 9.125 80.0\n", - "Epoch 5/100 \t Train Err: 35.5000 5.09375 14.6875 9.25 79.5\n", - "Epoch 5/100 \t Train Err: 34.5000 2.390625 15.5 10.0 78.0\n", - "Epoch 6/100 \t Train Err: 33.5000 0.9140625 17.5 11.3125 75.0\n", - "Epoch 6/100 \t Train Err: 33.0000 0.38671875 19.875 12.4375 72.5\n", - "Epoch 6/100 \t Train Err: 32.7500 0.4921875 21.0 12.9375 71.5\n", - "Epoch 6/100 \t Train Err: 33.0000 0.85546875 21.375 13.0 71.0\n", - "Epoch 6/100 \t Train Err: 33.0000 1.1328125 21.5 13.125 70.5\n", - "Epoch 6/100 \t Train Err: 32.7500 1.1875 21.875 13.4375 69.5\n", - "Epoch 6/100 \t Train Err: 32.5000 1.0234375 22.5 13.9375 68.5\n", - "Epoch 6/100 \t Train Err: 32.2500 0.73828125 23.125 14.5 67.5\n", - "Epoch 7/100 \t Train Err: 31.8750 0.451171875 23.875 15.0625 66.0\n", - "Epoch 7/100 \t Train Err: 31.6250 0.251953125 24.625 15.625 64.5\n", - "Epoch 7/100 \t Train Err: 31.5000 0.2060546875 25.25 16.125 63.75\n", - "Epoch 7/100 \t Train Err: 31.2500 0.2734375 25.625 16.5 63.0\n", - "Epoch 7/100 \t Train Err: 31.1250 0.37109375 26.125 17.0 62.25\n", - "Epoch 7/100 \t Train Err: 30.8750 0.400390625 26.625 17.25 61.5\n", - "Epoch 7/100 \t Train Err: 30.8750 0.353515625 26.875 17.5 61.0\n", - "Epoch 7/100 \t Train Err: 30.7500 0.275390625 27.25 17.75 60.5\n", - "Epoch 8/100 \t Train Err: 30.6250 0.18359375 27.625 18.125 59.75\n", - "Epoch 8/100 \t Train Err: 30.5000 0.10986328125 28.125 18.625 59.0\n", - "Epoch 8/100 \t Train Err: 30.3750 0.06640625 28.625 19.0 58.5\n", - "Epoch 8/100 \t Train Err: 30.3750 0.04931640625 29.125 19.375 57.75\n", - "Epoch 8/100 \t Train Err: 30.1250 0.048583984375 29.75 19.875 57.0\n", - "Epoch 8/100 \t Train Err: 30.0000 0.054443359375 30.25 20.25 56.0\n", - "Epoch 8/100 \t Train Err: 29.8750 0.0576171875 30.875 20.875 55.25\n", - "Epoch 8/100 \t Train Err: 29.8750 0.056884765625 31.5 21.25 54.5\n", - "Epoch 9/100 \t Train Err: 29.7500 0.051025390625 32.0 21.75 53.75\n", - "Epoch 9/100 \t Train Err: 29.5000 0.04296875 32.75 22.25 53.0\n", - "Epoch 9/100 \t Train Err: 29.5000 0.03369140625 33.0 22.625 52.25\n", - "Epoch 9/100 \t Train Err: 29.5000 0.0260009765625 33.75 23.125 51.75\n", - "Epoch 9/100 \t Train Err: 29.3750 0.02197265625 34.25 23.5 51.25\n", - "Epoch 9/100 \t Train Err: 29.3750 0.0216064453125 35.0 24.125 50.25\n", - "Epoch 9/100 \t Train Err: 29.2500 0.0238037109375 35.25 24.375 50.0\n", - "Epoch 9/100 \t Train Err: 29.1250 0.02734375 35.75 24.75 49.5\n", - "Epoch 10/100 \t Train Err: 29.1250 0.0301513671875 36.0 25.0 49.0\n", - "Epoch 10/100 \t Train Err: 29.1250 0.032470703125 36.75 25.625 48.25\n", - "Epoch 10/100 \t Train Err: 29.0000 0.03271484375 37.25 26.125 47.5\n", - "Epoch 10/100 \t Train Err: 28.8750 0.03125 37.5 26.25 47.25\n", - "Epoch 10/100 \t Train Err: 29.0000 0.027587890625 38.0 26.75 46.5\n", - "Epoch 10/100 \t Train Err: 28.8750 0.023193359375 38.25 26.875 46.5\n", - "Epoch 10/100 \t Train Err: 28.8750 0.0196533203125 38.25 26.875 46.5\n", - "Epoch 10/100 \t Train Err: 28.7500 0.0172119140625 38.75 27.375 45.75\n", - "Epoch 11/100 \t Train Err: 28.7500 0.0166015625 39.0 27.5 45.5\n", - "Epoch 11/100 \t Train Err: 28.8750 0.0169677734375 39.0 27.5 45.5\n", - "Epoch 11/100 \t Train Err: 28.7500 0.0172119140625 39.0 27.5 45.5\n", - "Epoch 11/100 \t Train Err: 28.7500 0.017578125 39.75 28.25 44.75\n", - "Epoch 11/100 \t Train Err: 28.7500 0.017578125 39.75 28.25 44.75\n", - "Epoch 11/100 \t Train Err: 28.7500 0.017333984375 39.75 28.25 44.75\n", - "Epoch 11/100 \t Train Err: 28.7500 0.016845703125 39.75 28.25 44.75\n", - "Epoch 11/100 \t Train Err: 28.7500 0.016357421875 39.75 28.25 44.75\n", - "Epoch 12/100 \t Train Err: 28.7500 0.015869140625 40.0 28.5 44.25\n", - "Epoch 12/100 \t Train Err: 28.7500 0.01513671875 40.75 28.875 44.0\n", - "Epoch 12/100 \t Train Err: 28.7500 0.01483154296875 40.75 28.875 44.0\n", - "Epoch 12/100 \t Train Err: 28.8750 0.01416015625 40.75 28.875 44.0\n", - "Epoch 12/100 \t Train Err: 28.7500 0.0140380859375 40.75 28.875 44.0\n", - "Epoch 12/100 \t Train Err: 28.7500 0.01397705078125 40.75 28.875 44.0\n", - "Epoch 12/100 \t Train Err: 28.7500 0.0140380859375 40.75 28.875 44.0\n", - "Epoch 12/100 \t Train Err: 28.6250 0.01422119140625 40.75 29.0 43.75\n", - "Epoch 13/100 \t Train Err: 28.6250 0.01422119140625 41.0 29.375 43.25\n", - "Epoch 13/100 \t Train Err: 28.7500 0.01416015625 41.5 29.5 43.0\n", - "Epoch 13/100 \t Train Err: 28.7500 0.0142822265625 41.5 29.625 43.0\n", - "Epoch 13/100 \t Train Err: 28.6250 0.01446533203125 41.5 29.625 43.0\n", - "Epoch 13/100 \t Train Err: 28.6250 0.01422119140625 41.5 29.625 43.0\n", - "Epoch 13/100 \t Train Err: 28.6250 0.013916015625 41.5 29.625 43.0\n", - "Epoch 13/100 \t Train Err: 28.6250 0.01373291015625 41.5 29.625 43.0\n", - "Epoch 13/100 \t Train Err: 28.6250 0.0135498046875 41.5 29.625 43.0\n", - "Epoch 14/100 \t Train Err: 28.6250 0.01318359375 41.5 29.625 43.0\n", - "Epoch 14/100 \t Train Err: 28.5000 0.012939453125 41.5 29.625 42.75\n", - "Epoch 14/100 \t Train Err: 28.6250 0.01275634765625 41.75 29.875 42.5\n", - "Epoch 14/100 \t Train Err: 28.6250 0.012451171875 42.0 30.125 42.5\n", - "Epoch 14/100 \t Train Err: 28.6250 0.01220703125 42.25 30.25 42.25\n", - "Epoch 14/100 \t Train Err: 28.6250 0.01226806640625 42.25 30.25 42.25\n", - "Epoch 14/100 \t Train Err: 28.6250 0.01190185546875 42.25 30.25 42.25\n", - "Epoch 14/100 \t Train Err: 28.6250 0.01190185546875 42.25 30.25 42.25\n", - "Epoch 15/100 \t Train Err: 28.7500 0.0118408203125 42.25 30.25 42.25\n", - "Epoch 15/100 \t Train Err: 28.6250 0.0115966796875 42.25 30.25 42.25\n", - "Epoch 15/100 \t Train Err: 28.6250 0.0115966796875 42.25 30.25 42.25\n", - "Epoch 15/100 \t Train Err: 28.6250 0.01141357421875 42.25 30.25 42.25\n", - "Epoch 15/100 \t Train Err: 28.6250 0.011474609375 42.25 30.25 42.0\n", - "Epoch 15/100 \t Train Err: 28.6250 0.01123046875 42.25 30.375 42.0\n", - "Epoch 15/100 \t Train Err: 28.5000 0.0111083984375 42.5 30.625 41.75\n", - "Epoch 15/100 \t Train Err: 28.6250 0.010986328125 42.5 30.75 41.75\n", - "Epoch 16/100 \t Train Err: 28.6250 0.01104736328125 42.75 30.875 41.5\n", - "Epoch 16/100 \t Train Err: 28.6250 0.01092529296875 42.75 30.875 41.5\n", - "Epoch 16/100 \t Train Err: 28.6250 0.0107421875 43.0 31.0 41.5\n", - "Epoch 16/100 \t Train Err: 28.6250 0.0107421875 43.0 31.0 41.5\n", - "Epoch 16/100 \t Train Err: 28.6250 0.01068115234375 43.0 31.0 41.5\n", - "Epoch 16/100 \t Train Err: 28.6250 0.01043701171875 43.0 31.0 41.5\n", - "Epoch 16/100 \t Train Err: 28.6250 0.0103759765625 43.0 31.0 41.5\n", - "Epoch 16/100 \t Train Err: 28.6250 0.01025390625 43.0 31.0 41.5\n", - "Epoch 17/100 \t Train Err: 28.6250 0.0101318359375 43.0 31.0 41.5\n", - "Epoch 17/100 \t Train Err: 28.6250 0.0098876953125 43.0 31.0 41.5\n", - "Epoch 17/100 \t Train Err: 28.6250 0.00982666015625 43.0 31.0 41.5\n", - "Epoch 17/100 \t Train Err: 28.6250 0.009765625 43.0 31.0 41.5\n", - "Epoch 17/100 \t Train Err: 28.6250 0.00958251953125 43.0 31.0 41.5\n", - "Epoch 17/100 \t Train Err: 28.6250 0.00946044921875 43.0 31.0 41.5\n", - "Epoch 17/100 \t Train Err: 28.5000 0.0093994140625 43.0 31.0 41.5\n", - "Epoch 17/100 \t Train Err: 28.6250 0.0091552734375 43.0 31.0 41.5\n", - "Epoch 18/100 \t Train Err: 28.6250 0.00897216796875 43.0 31.0 41.25\n", - "Epoch 18/100 \t Train Err: 28.5000 0.0089111328125 43.0 31.0 41.25\n", - "Epoch 18/100 \t Train Err: 28.3750 0.00885009765625 43.0 31.0 41.25\n", - "Epoch 18/100 \t Train Err: 28.3750 0.0087890625 43.0 31.125 41.25\n", - "Epoch 18/100 \t Train Err: 28.6250 0.0086669921875 43.0 31.125 41.25\n", - "Epoch 18/100 \t Train Err: 28.5000 0.008544921875 43.0 31.125 41.25\n", - "Epoch 18/100 \t Train Err: 28.5000 0.00836181640625 43.0 31.125 41.25\n", - "Epoch 18/100 \t Train Err: 28.5000 0.0081787109375 43.0 31.125 41.25\n", - "Epoch 19/100 \t Train Err: 28.3750 0.0079345703125 43.0 31.125 41.25\n", - "Epoch 19/100 \t Train Err: 28.5000 0.0078125 43.0 31.125 41.25\n", - "Epoch 19/100 \t Train Err: 28.5000 0.007781982421875 43.0 31.0 41.25\n", - "Epoch 19/100 \t Train Err: 28.5000 0.00750732421875 43.0 31.0 41.25\n", - "Epoch 19/100 \t Train Err: 28.5000 0.00738525390625 42.75 30.875 41.25\n", - "Epoch 19/100 \t Train Err: 28.5000 0.00714111328125 42.5 30.75 41.5\n", - "Epoch 19/100 \t Train Err: 28.3750 0.006866455078125 42.25 30.5 41.5\n", - "Epoch 19/100 \t Train Err: 28.3750 0.0067138671875 41.75 30.125 42.0\n", - "Epoch 20/100 \t Train Err: 28.2500 0.006591796875 40.5 29.25 42.5\n", - "Epoch 20/100 \t Train Err: 28.1250 0.00634765625 37.5 27.125 44.5\n", - "Epoch 20/100 \t Train Err: 27.8750 0.0067138671875 27.75 19.875 52.0\n", - "Epoch 20/100 \t Train Err: 27.8750 0.0040283203125 25.875 18.5 53.5\n", - "Epoch 20/100 \t Train Err: 27.7500 0.011962890625 34.0 24.5 46.5\n", - "Epoch 20/100 \t Train Err: 27.8750 0.0240478515625 36.5 26.125 44.75\n", - "Epoch 20/100 \t Train Err: 27.6250 0.0267333984375 35.5 25.5 45.0\n", - "Epoch 20/100 \t Train Err: 27.2500 0.016357421875 30.125 21.5 48.5\n", - "Epoch 21/100 \t Train Err: 27.5000 0.005279541015625 19.5 13.5 57.5\n", - "Epoch 21/100 \t Train Err: 26.8750 0.00982666015625 28.875 20.875 48.25\n", - "Epoch 21/100 \t Train Err: 26.7500 0.01019287109375 32.5 23.875 45.0\n", - "Epoch 21/100 \t Train Err: 26.5000 0.0057373046875 27.75 20.625 47.5\n", - "Epoch 21/100 \t Train Err: 26.5000 0.0111083984375 14.0 10.375 58.5\n", - "Epoch 21/100 \t Train Err: 25.7500 0.007110595703125 27.625 21.875 45.0\n", - "Epoch 21/100 \t Train Err: 25.3750 0.0081787109375 27.625 22.25 44.25\n", - "Epoch 21/100 \t Train Err: 24.7500 0.0101318359375 11.4375 9.5 55.5\n", - "Epoch 22/100 \t Train Err: 23.7500 0.0091552734375 14.8125 12.625 50.0\n", - "Epoch 22/100 \t Train Err: 23.3750 0.0196533203125 18.5 16.5 45.5\n", - "Epoch 22/100 \t Train Err: 22.8750 0.0205078125 9.5625 8.25 52.0\n", - "Epoch 22/100 \t Train Err: 22.3750 0.045654296875 9.1875 7.90625 50.75\n", - "Epoch 22/100 \t Train Err: 22.2500 0.1318359375 15.375 13.8125 45.0\n", - "Epoch 22/100 \t Train Err: 21.6250 0.150390625 11.4375 9.5625 47.25\n", - "Epoch 22/100 \t Train Err: 21.3750 0.126953125 8.4375 6.34375 49.75\n", - "Epoch 22/100 \t Train Err: 20.8750 0.1455078125 11.0625 8.75 46.0\n", - "Epoch 23/100 \t Train Err: 20.6250 0.125 13.6875 11.4375 43.0\n", - "Epoch 23/100 \t Train Err: 20.3750 0.04931640625 11.625 9.625 44.0\n", - "Epoch 23/100 \t Train Err: 20.0000 0.033935546875 9.3125 7.6875 45.25\n", - "Epoch 23/100 \t Train Err: 19.6250 0.07275390625 10.0625 8.875 43.25\n", - "Epoch 23/100 \t Train Err: 19.5000 0.1181640625 11.5625 10.9375 41.0\n", - "Epoch 23/100 \t Train Err: 19.0000 0.1787109375 11.0 11.1875 40.25\n", - "Epoch 23/100 \t Train Err: 18.7500 0.25 8.1875 8.9375 41.75\n", - "Epoch 23/100 \t Train Err: 18.5000 0.2216796875 8.1875 9.9375 40.25\n", - "Epoch 24/100 \t Train Err: 18.1250 0.1513671875 10.0625 13.4375 37.0\n", - "Epoch 24/100 \t Train Err: 17.6250 0.12890625 7.6875 11.6875 37.75\n", - "Epoch 24/100 \t Train Err: 17.3750 0.1201171875 6.28125 10.875 38.0\n", - "Epoch 24/100 \t Train Err: 17.0000 0.126953125 7.53125 14.5625 35.0\n", - "Epoch 24/100 \t Train Err: 16.7500 0.11181640625 7.3125 15.6875 33.75\n", - "Epoch 24/100 \t Train Err: 16.5000 0.08203125 4.75 13.3125 35.5\n", - "Epoch 24/100 \t Train Err: 16.3750 0.068359375 5.75 17.125 32.75\n", - "Epoch 24/100 \t Train Err: 15.9375 0.057861328125 6.34375 19.25 30.75\n", - "Epoch 25/100 \t Train Err: 15.7500 0.051025390625 3.578125 14.5 33.5\n", - "Epoch 25/100 \t Train Err: 15.2500 0.04248046875 5.0 18.625 29.625\n", - "Epoch 25/100 \t Train Err: 15.0000 0.040771484375 5.53125 21.125 27.875\n", - "Epoch 25/100 \t Train Err: 14.8125 0.033935546875 3.171875 16.0 30.375\n", - "Epoch 25/100 \t Train Err: 14.6250 0.0322265625 3.734375 18.875 28.5\n", - "Epoch 25/100 \t Train Err: 14.3750 0.03369140625 5.09375 23.0 25.5\n", - "Epoch 25/100 \t Train Err: 14.1250 0.028076171875 2.046875 14.3125 30.125\n", - "Epoch 25/100 \t Train Err: 13.8125 0.023681640625 3.234375 19.375 26.625\n", - "Epoch 26/100 \t Train Err: 13.6875 0.023681640625 4.75 24.875 23.125\n", - "Epoch 26/100 \t Train Err: 13.5625 0.0245361328125 1.515625 13.6875 29.0\n", - "Epoch 26/100 \t Train Err: 13.0625 0.0179443359375 2.875 20.5 24.25\n", - "Epoch 26/100 \t Train Err: 13.0000 0.016845703125 3.5 24.0 22.25\n", - "Epoch 26/100 \t Train Err: 12.8750 0.02197265625 1.46875 15.625 26.5\n", - "Epoch 26/100 \t Train Err: 12.5000 0.0174560546875 2.03125 19.5 23.5\n", - "Epoch 26/100 \t Train Err: 12.4375 0.014404296875 3.0 24.75 20.625\n", - "Epoch 26/100 \t Train Err: 12.1250 0.0230712890625 1.46875 17.625 23.875\n", - "Epoch 27/100 \t Train Err: 11.9375 0.022705078125 1.421875 17.75 23.125\n", - "Epoch 27/100 \t Train Err: 11.7500 0.0150146484375 2.09375 22.625 20.0\n", - "Epoch 27/100 \t Train Err: 11.6250 0.01531982421875 1.6796875 20.875 20.75\n", - "Epoch 27/100 \t Train Err: 11.3750 0.0177001953125 1.0546875 17.25 22.0\n", - "Epoch 27/100 \t Train Err: 11.0625 0.0128173828125 1.359375 20.375 19.875\n", - "Epoch 27/100 \t Train Err: 11.0000 0.0128173828125 1.5078125 22.0 18.875\n", - "Epoch 27/100 \t Train Err: 10.8125 0.01190185546875 1.03125 18.125 20.125\n", - "Epoch 27/100 \t Train Err: 10.7500 0.01165771484375 0.99609375 18.125 20.25\n", - "Epoch 28/100 \t Train Err: 10.5625 0.012451171875 1.328125 21.125 18.125\n", - "Epoch 28/100 \t Train Err: 10.3750 0.01104736328125 1.15625 19.375 18.625\n", - "Epoch 28/100 \t Train Err: 10.3125 0.01025390625 0.953125 17.25 19.5\n", - "Epoch 28/100 \t Train Err: 10.1250 0.010498046875 1.171875 19.875 17.75\n", - "Epoch 28/100 \t Train Err: 10.0625 0.0101318359375 1.109375 20.0 17.5\n", - "Epoch 28/100 \t Train Err: 10.0000 0.0111083984375 0.7578125 16.75 18.875\n", - "Epoch 28/100 \t Train Err: 9.8125 0.0093994140625 0.87109375 18.375 17.5\n", - "Epoch 28/100 \t Train Err: 9.7500 0.01043701171875 1.0390625 20.625 16.375\n", - "Epoch 29/100 \t Train Err: 9.4375 0.00921630859375 0.828125 18.5 16.75\n", - "Epoch 29/100 \t Train Err: 9.5000 0.00836181640625 0.59375 16.5 17.75\n", - "Epoch 29/100 \t Train Err: 9.4375 0.0115966796875 0.796875 20.375 15.8125\n", - "Epoch 29/100 \t Train Err: 9.3125 0.010986328125 0.72265625 20.25 15.625\n", - "Epoch 29/100 \t Train Err: 9.1875 0.00762939453125 0.51953125 16.75 16.875\n", - "Epoch 29/100 \t Train Err: 9.0625 0.00799560546875 0.56640625 18.375 15.8125\n", - "Epoch 29/100 \t Train Err: 9.0625 0.00946044921875 0.66796875 20.625 14.625\n", - "Epoch 29/100 \t Train Err: 9.0000 0.00665283203125 0.46484375 16.125 16.5\n", - "Epoch 30/100 \t Train Err: 8.8750 0.008056640625 0.5234375 18.25 15.3125\n", - "Epoch 30/100 \t Train Err: 8.7500 0.0111083984375 0.59375 20.0 14.1875\n", - "Epoch 36/100 \t Train Err: 7.3750 0.00799560546875 0.302734375 13.5 12.9375\n", - "Epoch 36/100 \t Train Err: 7.2188 0.00799560546875 0.369140625 15.5625 11.375\n", - "Epoch 36/100 \t Train Err: 7.2188 0.00823974609375 0.4296875 17.375 10.375\n", - "Epoch 36/100 \t Train Err: 7.2500 0.00860595703125 0.412109375 18.0 10.125\n", - "Epoch 36/100 \t Train Err: 7.1875 0.01171875 0.33984375 15.625 11.1875\n", - "Epoch 36/100 \t Train Err: 7.0625 0.0177001953125 0.2890625 12.875 12.1875\n", - "Epoch 36/100 \t Train Err: 7.1562 0.01806640625 0.271484375 11.8125 13.0\n", - "Epoch 36/100 \t Train Err: 7.1875 0.0120849609375 0.24609375 11.5625 13.0625\n", - "Epoch 37/100 \t Train Err: 7.0625 0.007171630859375 0.2431640625 12.375 12.3125\n", - "Epoch 37/100 \t Train Err: 7.0625 0.0101318359375 0.2490234375 14.0 11.5\n", - "Epoch 37/100 \t Train Err: 7.0625 0.0181884765625 0.28125 15.4375 10.875\n", - "Epoch 37/100 \t Train Err: 7.0938 0.0244140625 0.287109375 15.8125 10.6875\n", - "Epoch 37/100 \t Train Err: 6.9375 0.0230712890625 0.27734375 15.1875 10.625\n", - "Epoch 37/100 \t Train Err: 6.8750 0.01556396484375 0.255859375 13.5625 11.4375\n", - "Epoch 37/100 \t Train Err: 6.9375 0.0091552734375 0.220703125 12.4375 12.0625\n", - "Epoch 37/100 \t Train Err: 6.9375 0.006011962890625 0.2158203125 12.4375 12.0625\n", - "Epoch 38/100 \t Train Err: 6.8438 0.004791259765625 0.232421875 12.9375 11.625\n", - "Epoch 38/100 \t Train Err: 6.8750 0.004486083984375 0.2421875 14.3125 10.875\n", - "Epoch 38/100 \t Train Err: 6.8438 0.00433349609375 0.28125 15.0625 10.1875\n", - "Epoch 38/100 \t Train Err: 6.9375 0.004241943359375 0.25 14.9375 10.4375\n", - "Epoch 38/100 \t Train Err: 6.7500 0.004241943359375 0.23828125 13.75 10.625\n", - "Epoch 38/100 \t Train Err: 6.7812 0.0042724609375 0.2109375 12.25 11.5625\n", - "Epoch 38/100 \t Train Err: 6.8438 0.003692626953125 0.1943359375 11.9375 11.875\n", - "Epoch 38/100 \t Train Err: 6.6875 0.004119873046875 0.197265625 11.5 11.5\n", - "Epoch 39/100 \t Train Err: 6.6562 0.007720947265625 0.193359375 12.1875 11.0625\n", - "Epoch 39/100 \t Train Err: 6.6250 0.01318359375 0.2080078125 13.25 10.4375\n", - "Epoch 39/100 \t Train Err: 6.6562 0.016357421875 0.224609375 13.9375 10.3125\n", - "Epoch 39/100 \t Train Err: 6.6562 0.0159912109375 0.2021484375 13.75 10.375\n", - "Epoch 39/100 \t Train Err: 6.5312 0.0126953125 0.19140625 12.9375 10.5\n", - "Epoch 39/100 \t Train Err: 6.5938 0.0081787109375 0.1796875 11.9375 11.0625\n", - "Epoch 39/100 \t Train Err: 6.6250 0.005401611328125 0.1796875 11.875 11.375\n", - "Epoch 39/100 \t Train Err: 6.5000 0.0040283203125 0.1787109375 12.125 10.9375\n", - "Epoch 40/100 \t Train Err: 6.5312 0.0031890869140625 0.1962890625 12.8125 10.5625\n", - "Epoch 40/100 \t Train Err: 6.5625 0.0029296875 0.2080078125 13.25 10.3125\n", - "Epoch 40/100 \t Train Err: 6.5625 0.0026702880859375 0.189453125 13.5 10.25\n", - "Epoch 40/100 \t Train Err: 6.5312 0.002685546875 0.177734375 12.5625 10.4375\n", - "Epoch 40/100 \t Train Err: 6.4375 0.0027008056640625 0.169921875 11.625 10.8125\n", - "Epoch 40/100 \t Train Err: 6.5000 0.0026092529296875 0.1630859375 11.6875 11.0625\n", - "Epoch 40/100 \t Train Err: 6.5000 0.0030670166015625 0.162109375 11.9375 10.875\n", - "Epoch 40/100 \t Train Err: 6.5000 0.004486083984375 0.1630859375 12.4375 10.5625\n", - "Epoch 41/100 \t Train Err: 6.4375 0.006011962890625 0.1875 13.3125 9.9375\n", - "Epoch 41/100 \t Train Err: 6.4688 0.005706787109375 0.1708984375 12.75 10.25\n", - "Epoch 41/100 \t Train Err: 6.4688 0.00445556640625 0.15234375 12.25 10.625\n", - "Epoch 41/100 \t Train Err: 6.4688 0.0032501220703125 0.166015625 11.8125 10.875\n", - "Epoch 41/100 \t Train Err: 6.3750 0.0027008056640625 0.166015625 12.0625 10.5\n", - "Epoch 41/100 \t Train Err: 6.3125 0.0023040771484375 0.158203125 12.0 10.25\n", - "Epoch 41/100 \t Train Err: 6.4062 0.002227783203125 0.1640625 12.4375 10.125\n", - "Epoch 41/100 \t Train Err: 6.3438 0.002227783203125 0.171875 12.6875 9.9375\n", - "Epoch 42/100 \t Train Err: 6.3125 0.002197265625 0.1591796875 12.0625 10.1875\n", - "Epoch 42/100 \t Train Err: 6.2500 0.0021209716796875 0.1513671875 11.4375 10.3125\n", - "Epoch 42/100 \t Train Err: 6.2812 0.0022430419921875 0.1396484375 11.5 10.5\n", - "Epoch 42/100 \t Train Err: 6.1875 0.002838134765625 0.146484375 11.8125 9.9375\n", - "Epoch 42/100 \t Train Err: 6.3125 0.0037078857421875 0.150390625 12.125 10.0625\n", - "Epoch 42/100 \t Train Err: 6.2812 0.004425048828125 0.1591796875 12.375 9.875\n", - "Epoch 42/100 \t Train Err: 6.2188 0.004150390625 0.1357421875 11.625 10.0625\n", - "Epoch 42/100 \t Train Err: 6.2188 0.0035858154296875 0.1416015625 11.4375 10.25\n", - "Epoch 43/100 \t Train Err: 6.2500 0.0028839111328125 0.1328125 11.1875 10.4375\n", - "Epoch 43/100 \t Train Err: 6.1562 0.0025482177734375 0.13671875 11.1875 10.125\n", - "Epoch 43/100 \t Train Err: 6.0938 0.002227783203125 0.142578125 11.625 9.75\n", - "Epoch 43/100 \t Train Err: 6.1875 0.002105712890625 0.1435546875 12.0625 9.8125\n", - "Epoch 43/100 \t Train Err: 6.2812 0.001983642578125 0.150390625 12.125 9.9375\n", - "Epoch 43/100 \t Train Err: 6.0938 0.0019683837890625 0.1396484375 11.5 9.8125\n", - "Epoch 43/100 \t Train Err: 6.2188 0.00191497802734375 0.1337890625 11.5 10.125\n", - "Epoch 43/100 \t Train Err: 6.0938 0.00201416015625 0.1337890625 11.4375 9.875\n", - "Epoch 44/100 \t Train Err: 6.0938 0.0023040771484375 0.140625 11.375 9.9375\n", - "Epoch 44/100 \t Train Err: 6.0938 0.002960205078125 0.1298828125 11.125 10.0\n", - "Epoch 44/100 \t Train Err: 6.1562 0.003662109375 0.1357421875 11.375 10.0\n", - "Epoch 44/100 \t Train Err: 6.0625 0.003997802734375 0.130859375 11.4375 9.75\n", - "Epoch 44/100 \t Train Err: 6.0312 0.003997802734375 0.134765625 11.4375 9.5625\n", - "Epoch 44/100 \t Train Err: 6.0000 0.003265380859375 0.1337890625 11.4375 9.625\n", - "Epoch 44/100 \t Train Err: 6.0000 0.0024871826171875 0.1337890625 11.5 9.625\n", - "Epoch 44/100 \t Train Err: 6.0312 0.0020904541015625 0.1376953125 11.0625 9.8125\n", - "Epoch 45/100 \t Train Err: 5.9688 0.0020294189453125 0.125 10.8125 9.6875\n", - "Epoch 45/100 \t Train Err: 6.0000 0.0019683837890625 0.1318359375 10.75 9.75\n", - "Epoch 45/100 \t Train Err: 6.0312 0.002044677734375 0.12890625 11.0625 9.6875\n", - "Epoch 45/100 \t Train Err: 5.9688 0.002197265625 0.12353515625 11.0625 9.6875\n", - "Epoch 45/100 \t Train Err: 5.8750 0.0026397705078125 0.1318359375 11.3125 9.375\n", - "Epoch 45/100 \t Train Err: 5.9375 0.003204345703125 0.1201171875 11.25 9.4375\n", - "Epoch 45/100 \t Train Err: 5.8125 0.003326416015625 0.115234375 11.0 9.375\n", - "Epoch 45/100 \t Train Err: 5.9062 0.0030975341796875 0.111328125 11.0 9.5625\n", - "Epoch 46/100 \t Train Err: 5.9062 0.0026702880859375 0.10498046875 10.5 9.75\n", - "Epoch 46/100 \t Train Err: 5.8125 0.0024566650390625 0.1044921875 10.375 9.625\n", - "Epoch 46/100 \t Train Err: 5.8438 0.0024566650390625 0.11474609375 10.875 9.5\n", - "Epoch 46/100 \t Train Err: 5.8438 0.0023956298828125 0.11962890625 11.375 9.1875\n", - "Epoch 46/100 \t Train Err: 5.7812 0.0023651123046875 0.12060546875 11.125 9.125\n", - "Epoch 46/100 \t Train Err: 5.9062 0.0023193359375 0.11767578125 10.875 9.5625\n", - "Epoch 46/100 \t Train Err: 5.7500 0.002349853515625 0.09912109375 10.25 9.5625\n", - "Epoch 46/100 \t Train Err: 5.7812 0.0024871826171875 0.10986328125 9.9375 9.8125\n", - "Epoch 47/100 \t Train Err: 5.7812 0.002960205078125 0.107421875 10.5 9.375\n", - "Epoch 47/100 \t Train Err: 5.7812 0.0032501220703125 0.1123046875 10.875 9.1875\n", - "Epoch 47/100 \t Train Err: 5.7188 0.0033111572265625 0.11767578125 10.5625 9.125\n", - "Epoch 47/100 \t Train Err: 5.7812 0.0030517578125 0.10986328125 10.4375 9.5\n", - "Epoch 47/100 \t Train Err: 5.6562 0.002899169921875 0.1181640625 10.625 9.0\n", - "Epoch 47/100 \t Train Err: 5.6562 0.0026702880859375 0.12109375 11.0 8.875\n", - "Epoch 47/100 \t Train Err: 5.7812 0.00262451171875 0.10302734375 10.4375 9.375\n", - "Epoch 47/100 \t Train Err: 5.7812 0.0026702880859375 0.1015625 9.8125 9.75\n", - "Epoch 48/100 \t Train Err: 5.7188 0.002655029296875 0.09814453125 9.9375 9.4375\n", - "Epoch 48/100 \t Train Err: 5.6562 0.003143310546875 0.111328125 10.75 8.875\n", - "Epoch 48/100 \t Train Err: 5.5625 0.00335693359375 0.111328125 10.6875 8.75\n", - "Epoch 48/100 \t Train Err: 5.5625 0.003326416015625 0.1044921875 9.8125 9.1875\n", - "Epoch 48/100 \t Train Err: 5.6562 0.003265380859375 0.099609375 10.125 9.25\n", - "Epoch 48/100 \t Train Err: 5.6875 0.0030670166015625 0.10888671875 10.875 8.875\n", - "Epoch 48/100 \t Train Err: 5.5938 0.0027923583984375 0.09619140625 10.25 8.9375\n", - "Epoch 48/100 \t Train Err: 5.5938 0.0027313232421875 0.10400390625 9.4375 9.4375\n", - "Epoch 49/100 \t Train Err: 5.5312 0.002777099609375 0.09326171875 10.0 8.9375\n", - "Epoch 49/100 \t Train Err: 5.5938 0.0031890869140625 0.1015625 10.9375 8.5\n", - "Epoch 49/100 \t Train Err: 5.5000 0.00341796875 0.08984375 10.25 8.8125\n", - "Epoch 49/100 \t Train Err: 5.5938 0.003662109375 0.07666015625 8.8125 9.75\n", - "Epoch 49/100 \t Train Err: 5.5312 0.004547119140625 0.09375 9.6875 9.0625\n", - "Epoch 49/100 \t Train Err: 5.5000 0.004638671875 0.1103515625 11.125 8.125\n", - "Epoch 49/100 \t Train Err: 5.4375 0.0031890869140625 0.08447265625 8.875 9.3125\n", - "Epoch 49/100 \t Train Err: 5.5312 0.0031890869140625 0.0908203125 9.3125 9.375\n", - "Epoch 50/100 \t Train Err: 5.5625 0.003265380859375 0.10693359375 11.75 7.625\n", - "Epoch 50/100 \t Train Err: 5.5000 0.00341796875 0.07763671875 7.5625 10.1875\n", - "Epoch 50/100 \t Train Err: 5.3750 0.00323486328125 0.08056640625 8.8125 9.125\n", - "Epoch 50/100 \t Train Err: 5.4688 0.00433349609375 0.11767578125 11.875 7.46875\n", - "Epoch 50/100 \t Train Err: 5.5312 0.00433349609375 0.09130859375 8.625 9.75\n", - "Epoch 50/100 \t Train Err: 5.4062 0.0047607421875 0.087890625 9.3125 9.0\n", - "Epoch 50/100 \t Train Err: 5.4375 0.00457763671875 0.11767578125 11.875 7.4375\n", - "Epoch 50/100 \t Train Err: 5.5312 0.003387451171875 0.06640625 6.75 10.8125\n", - "Epoch 51/100 \t Train Err: 5.4062 0.003448486328125 0.08984375 9.5 8.75\n", - "Epoch 51/100 \t Train Err: 5.4062 0.003662109375 0.11279296875 12.0 7.40625\n", - "Epoch 51/100 \t Train Err: 5.3125 0.003692626953125 0.087890625 8.4375 9.1875\n", - "Epoch 51/100 \t Train Err: 5.3750 0.003692626953125 0.08349609375 8.5625 9.3125\n", - "Epoch 51/100 \t Train Err: 5.3125 0.0037994384765625 0.09765625 10.8125 7.9375\n", - "Epoch 51/100 \t Train Err: 5.3750 0.0036773681640625 0.0791015625 9.6875 8.4375\n", - "Epoch 51/100 \t Train Err: 5.3125 0.0037078857421875 0.06787109375 8.375 9.25\n", - "Epoch 51/100 \t Train Err: 5.2500 0.003936767578125 0.076171875 9.25 8.625\n", - "Epoch 52/100 \t Train Err: 5.3125 0.00433349609375 0.08349609375 10.375 8.0\n", - "Epoch 52/100 \t Train Err: 5.1875 0.00457763671875 0.0732421875 8.8125 8.6875\n", - "Epoch 52/100 \t Train Err: 5.2188 0.0047607421875 0.06787109375 8.25 8.9375\n", - "Epoch 52/100 \t Train Err: 5.2812 0.00518798828125 0.08056640625 9.5 8.3125\n", - "Epoch 52/100 \t Train Err: 5.0938 0.0047607421875 0.08154296875 9.5 7.9375\n", - "Epoch 52/100 \t Train Err: 5.2188 0.00396728515625 0.06591796875 8.0625 9.1875\n", - "Epoch 52/100 \t Train Err: 5.1250 0.004180908203125 0.07421875 9.5 8.0\n", - "Epoch 52/100 \t Train Err: 5.1250 0.004150390625 0.078125 9.5 8.0625\n", - "Epoch 53/100 \t Train Err: 5.1562 0.004180908203125 0.064453125 8.0 8.875\n", - "Epoch 53/100 \t Train Err: 5.0312 0.004608154296875 0.0703125 8.3125 8.4375\n", - "Epoch 53/100 \t Train Err: 5.0625 0.00531005859375 0.07861328125 8.625 8.1875\n", - "Epoch 53/100 \t Train Err: 5.0312 0.005340576171875 0.07763671875 9.0 8.0625\n", - "Epoch 53/100 \t Train Err: 5.0312 0.004791259765625 0.07421875 8.4375 8.25\n", - "Epoch 53/100 \t Train Err: 5.0312 0.00445556640625 0.0673828125 8.3125 8.375\n", - "Epoch 53/100 \t Train Err: 4.9688 0.004486083984375 0.06591796875 8.625 8.0\n", - "Epoch 53/100 \t Train Err: 5.0312 0.004486083984375 0.06396484375 8.25 8.4375\n", - "Epoch 54/100 \t Train Err: 4.9688 0.004425048828125 0.06689453125 8.3125 8.3125\n", - "Epoch 54/100 \t Train Err: 5.0000 0.00457763671875 0.07470703125 8.75 7.96875\n", - "Epoch 54/100 \t Train Err: 4.9375 0.004669189453125 0.07080078125 7.96875 8.25\n", - "Epoch 54/100 \t Train Err: 4.8750 0.004852294921875 0.07275390625 7.90625 8.1875\n", - "Epoch 54/100 \t Train Err: 4.9062 0.00494384765625 0.0791015625 8.5625 7.8125\n", - "Epoch 54/100 \t Train Err: 4.9688 0.0045166015625 0.0732421875 7.90625 8.3125\n", - "Epoch 54/100 \t Train Err: 4.9375 0.0045166015625 0.06689453125 7.625 8.4375\n", - "Epoch 54/100 \t Train Err: 4.8438 0.004608154296875 0.0791015625 8.625 7.5\n", - "Epoch 55/100 \t Train Err: 4.9062 0.0045166015625 0.0693359375 7.3125 8.5625\n", - "Epoch 55/100 \t Train Err: 4.9062 0.00494384765625 0.07958984375 8.3125 7.875\n", - "Epoch 55/100 \t Train Err: 4.8750 0.00531005859375 0.0849609375 8.6875 7.6875\n", - "Epoch 55/100 \t Train Err: 4.7812 0.004638671875 0.06494140625 6.8125 8.5625\n", - "Epoch 55/100 \t Train Err: 4.8438 0.004791259765625 0.08203125 9.0 7.1875\n", - "Epoch 55/100 \t Train Err: 4.9688 0.004241943359375 0.055419921875 5.40625 10.0\n", - "Epoch 55/100 \t Train Err: 6.1562 0.005401611328125 0.19140625 20.125 4.1875\n", - "Epoch 55/100 \t Train Err: 14.0000 0.005706787109375 0.107421875 0.53515625 36.0\n", - "Epoch 56/100 \t Train Err: 11.1875 0.314453125 0.1689453125 0.56640625 29.0\n", - "Epoch 56/100 \t Train Err: 7.6250 1.75 3.984375 17.0 9.1875\n", - "Epoch 56/100 \t Train Err: 12.3125 2.03125 11.1875 47.25 3.21875\n", - "Epoch 56/100 \t Train Err: 7.0625 0.88671875 1.78125 10.1875 12.5625\n", - "Epoch 56/100 \t Train Err: 8.7500 0.05078125 0.1953125 2.484375 21.875\n", - "Epoch 56/100 \t Train Err: 8.8750 0.1328125 0.0419921875 2.5625 22.0\n", - "Epoch 56/100 \t Train Err: 6.6562 0.32421875 0.0888671875 9.6875 12.8125\n", - "Epoch 56/100 \t Train Err: 7.5000 0.349609375 0.51171875 28.375 5.90625\n", - "Epoch 57/100 \t Train Err: 8.4375 0.337890625 0.66796875 35.75 4.53125\n", - "Epoch 57/100 \t Train Err: 7.1562 0.3125 0.265625 25.375 6.375\n", - "Epoch 57/100 \t Train Err: 6.3750 0.259765625 0.095703125 10.75 11.5\n", - "Epoch 57/100 \t Train Err: 7.0625 0.125 0.08837890625 5.75 15.75\n", - "Epoch 57/100 \t Train Err: 7.1562 0.022705078125 0.06005859375 5.75 16.0\n", - "Epoch 57/100 \t Train Err: 6.5625 0.1787109375 0.2412109375 8.625 13.0625\n", - "Epoch 57/100 \t Train Err: 6.4375 0.443359375 0.59765625 14.5 9.375\n", - "Epoch 57/100 \t Train Err: 6.5625 0.408203125 0.6484375 18.875 7.34375\n", - "Epoch 58/100 \t Train Err: 6.4062 0.150390625 0.337890625 19.25 6.9375\n", - "Epoch 58/100 \t Train Err: 6.1875 0.0218505859375 0.11865234375 16.5 7.65625\n", - "Epoch 58/100 \t Train Err: 5.9688 0.1796875 0.30078125 11.4375 9.4375\n", - "Epoch 58/100 \t Train Err: 6.1562 0.35546875 0.5703125 8.625 11.0625\n", - "Epoch 58/100 \t Train Err: 6.0312 0.31640625 0.55859375 8.125 11.375\n", - "Epoch 58/100 \t Train Err: 5.8125 0.130859375 0.333984375 9.375 10.125\n", - "Epoch 58/100 \t Train Err: 5.5938 0.01422119140625 0.138671875 12.125 8.4375\n", - "Epoch 58/100 \t Train Err: 5.6562 0.06884765625 0.1396484375 14.4375 7.28125\n", - "Epoch 59/100 \t Train Err: 5.6875 0.1884765625 0.20703125 14.5625 7.28125\n", - "Epoch 59/100 \t Train Err: 5.6562 0.24609375 0.216796875 12.9375 7.96875\n", - "Epoch 59/100 \t Train Err: 5.4688 0.2109375 0.162109375 10.3125 9.0\n", - "Epoch 59/100 \t Train Err: 5.4688 0.134765625 0.10888671875 8.6875 9.9375\n", - "Epoch 59/100 \t Train Err: 5.4375 0.06689453125 0.0966796875 8.125 10.25\n", - "Epoch 59/100 \t Train Err: 5.2812 0.0262451171875 0.11279296875 8.3125 9.6875\n", - "Epoch 59/100 \t Train Err: 5.2812 0.0106201171875 0.1416015625 10.375 8.5\n", - "Epoch 59/100 \t Train Err: 5.3125 0.0084228515625 0.177734375 12.5 7.46875\n", - "Epoch 60/100 \t Train Err: 5.3125 0.0126953125 0.1875 12.1875 7.28125\n", - "Epoch 60/100 \t Train Err: 5.2188 0.019775390625 0.1982421875 11.1875 7.5625\n", - "Epoch 60/100 \t Train Err: 5.1250 0.0240478515625 0.203125 9.3125 8.375\n", - "Epoch 60/100 \t Train Err: 5.1250 0.019775390625 0.1875 8.25 9.1875\n", - "Epoch 60/100 \t Train Err: 5.1250 0.010986328125 0.1572265625 7.71875 9.1875\n", - "Epoch 60/100 \t Train Err: 5.0312 0.007171630859375 0.1259765625 8.375 8.625\n", - "Epoch 60/100 \t Train Err: 4.9688 0.0150146484375 0.10400390625 9.125 8.0\n", - "Epoch 60/100 \t Train Err: 4.9375 0.0308837890625 0.09033203125 9.625 7.625\n", - "Epoch 61/100 \t Train Err: 4.9688 0.046630859375 0.08447265625 9.5625 7.65625\n", - "Epoch 61/100 \t Train Err: 4.9688 0.0546875 0.08154296875 9.125 7.875\n", - "Epoch 61/100 \t Train Err: 4.9688 0.054443359375 0.0712890625 8.1875 8.5\n", - "Epoch 61/100 \t Train Err: 4.9062 0.049072265625 0.07275390625 7.875 8.4375\n", - "Epoch 61/100 \t Train Err: 4.8125 0.040771484375 0.0693359375 7.71875 8.25\n", - "Epoch 61/100 \t Train Err: 4.8750 0.031494140625 0.06884765625 7.9375 8.4375\n", - "Epoch 61/100 \t Train Err: 4.8125 0.0228271484375 0.072265625 8.5625 7.8125\n", - "Epoch 61/100 \t Train Err: 4.8125 0.01611328125 0.07568359375 9.0 7.59375\n", - "Epoch 62/100 \t Train Err: 4.7500 0.010986328125 0.07861328125 8.5625 7.625\n", - "Epoch 62/100 \t Train Err: 4.6875 0.0079345703125 0.08203125 7.9375 7.625\n", - "Epoch 62/100 \t Train Err: 4.7500 0.00665283203125 0.0810546875 7.5 8.3125\n", - "Epoch 62/100 \t Train Err: 4.7188 0.00634765625 0.07861328125 7.09375 8.3125\n", - "Epoch 62/100 \t Train Err: 4.6562 0.006317138671875 0.08349609375 7.40625 8.0\n", - "Epoch 62/100 \t Train Err: 4.6562 0.006500244140625 0.0791015625 7.9375 7.625\n", - "Epoch 62/100 \t Train Err: 4.7188 0.006500244140625 0.0732421875 8.1875 7.6875\n", - "Epoch 62/100 \t Train Err: 4.6875 0.00677490234375 0.0771484375 8.5 7.53125\n", - "Epoch 63/100 \t Train Err: 4.6875 0.00732421875 0.07421875 7.9375 7.78125\n", - "Epoch 63/100 \t Train Err: 4.6562 0.00836181640625 0.0703125 7.84375 7.8125\n", - "Epoch 63/100 \t Train Err: 4.6875 0.0093994140625 0.0654296875 7.65625 7.90625\n", - "Epoch 63/100 \t Train Err: 4.6875 0.010498046875 0.0654296875 7.75 7.96875\n", - "Epoch 63/100 \t Train Err: 4.6250 0.01116943359375 0.0634765625 7.6875 7.71875\n", - "Epoch 63/100 \t Train Err: 4.6562 0.01153564453125 0.064453125 7.75 7.78125\n", - "Epoch 63/100 \t Train Err: 4.6562 0.0118408203125 0.060302734375 7.875 7.78125\n", - "Epoch 63/100 \t Train Err: 4.5938 0.01171875 0.0634765625 7.625 7.71875\n", - "Epoch 64/100 \t Train Err: 4.6562 0.010986328125 0.060791015625 7.53125 7.90625\n", - "Epoch 64/100 \t Train Err: 4.5312 0.01019287109375 0.05908203125 7.15625 7.6875\n", - "Epoch 64/100 \t Train Err: 4.5312 0.009033203125 0.064453125 7.28125 7.75\n", - "Epoch 64/100 \t Train Err: 4.5625 0.00836181640625 0.06298828125 7.5 7.75\n", - "Epoch 64/100 \t Train Err: 4.5625 0.007598876953125 0.059326171875 7.5625 7.6875\n", - "Epoch 64/100 \t Train Err: 4.5938 0.007110595703125 0.0654296875 7.5625 7.75\n", - "Epoch 64/100 \t Train Err: 4.5312 0.00689697265625 0.06396484375 7.53125 7.625\n", - "Epoch 64/100 \t Train Err: 4.5625 0.006591796875 0.06494140625 7.59375 7.59375\n", - "Epoch 65/100 \t Train Err: 4.5000 0.0064697265625 0.061767578125 7.40625 7.625\n", - "Epoch 65/100 \t Train Err: 4.5938 0.006439208984375 0.061767578125 7.625 7.71875\n", - "Epoch 65/100 \t Train Err: 4.5625 0.006500244140625 0.0615234375 7.5 7.6875\n", - "Epoch 65/100 \t Train Err: 4.5625 0.0064697265625 0.055908203125 7.25 7.75\n", - "Epoch 65/100 \t Train Err: 4.5625 0.00640869140625 0.056640625 7.34375 7.75\n", - "Epoch 65/100 \t Train Err: 4.4688 0.0064697265625 0.0625 7.375 7.5625\n", - "Epoch 65/100 \t Train Err: 4.4688 0.00640869140625 0.060302734375 7.34375 7.53125\n", - "Epoch 65/100 \t Train Err: 4.4375 0.00640869140625 0.059814453125 7.03125 7.6875\n", - "Epoch 66/100 \t Train Err: 4.5000 0.00628662109375 0.06005859375 6.96875 7.71875\n", - "Epoch 66/100 \t Train Err: 4.5312 0.006622314453125 0.058349609375 7.125 7.71875\n", - "Epoch 66/100 \t Train Err: 4.4688 0.006500244140625 0.05908203125 7.34375 7.53125\n", - "Epoch 66/100 \t Train Err: 4.5000 0.006683349609375 0.06298828125 7.46875 7.4375\n", - "Epoch 66/100 \t Train Err: 4.3750 0.006744384765625 0.057861328125 7.0625 7.3125\n", - "Epoch 66/100 \t Train Err: 4.4688 0.006683349609375 0.060791015625 7.125 7.5625\n", - "Epoch 66/100 \t Train Err: 4.5000 0.006744384765625 0.060302734375 7.25 7.65625\n", - "Epoch 66/100 \t Train Err: 4.5000 0.006744384765625 0.056884765625 7.125 7.625\n", - "Epoch 67/100 \t Train Err: 4.4688 0.006683349609375 0.05712890625 6.96875 7.65625\n", - "Epoch 67/100 \t Train Err: 4.3750 0.006683349609375 0.060546875 6.875 7.4375\n", - "Epoch 67/100 \t Train Err: 4.3438 0.0067138671875 0.06298828125 7.21875 7.25\n", - "Epoch 67/100 \t Train Err: 4.4688 0.00665283203125 0.06201171875 7.25 7.5625\n", - "Epoch 67/100 \t Train Err: 4.4375 0.00628662109375 0.057861328125 6.96875 7.5625\n", - "Epoch 67/100 \t Train Err: 4.2500 0.00640869140625 0.055419921875 6.53125 7.4375\n", - "Epoch 67/100 \t Train Err: 4.3750 0.0062255859375 0.051513671875 6.96875 7.46875\n", - "Epoch 67/100 \t Train Err: 4.4062 0.006195068359375 0.055419921875 6.96875 7.46875\n", - "Epoch 68/100 \t Train Err: 4.3438 0.00604248046875 0.052734375 6.71875 7.34375\n", - "Epoch 68/100 \t Train Err: 4.4062 0.005950927734375 0.055419921875 6.65625 7.59375\n", - "Epoch 68/100 \t Train Err: 4.3750 0.005859375 0.0546875 6.90625 7.34375\n", - "Epoch 68/100 \t Train Err: 4.3125 0.005950927734375 0.057373046875 6.6875 7.375\n", - "Epoch 68/100 \t Train Err: 4.3750 0.005889892578125 0.05517578125 6.53125 7.625\n", - "Epoch 68/100 \t Train Err: 4.3438 0.00592041015625 0.053955078125 6.53125 7.65625\n", - "Epoch 68/100 \t Train Err: 4.3438 0.005889892578125 0.056640625 6.65625 7.34375\n", - "Epoch 68/100 \t Train Err: 4.3125 0.005950927734375 0.05419921875 7.21875 7.25\n", - "Epoch 69/100 \t Train Err: 4.3438 0.005859375 0.057373046875 6.9375 7.25\n", - "Epoch 69/100 \t Train Err: 4.4062 0.00592041015625 0.0576171875 6.875 7.4375\n", - "Epoch 69/100 \t Train Err: 4.3125 0.00592041015625 0.0556640625 6.65625 7.375\n", - "Epoch 69/100 \t Train Err: 4.3438 0.00592041015625 0.0556640625 7.03125 7.40625\n", - "Epoch 69/100 \t Train Err: 4.2812 0.005889892578125 0.058837890625 6.53125 7.34375\n", - "Epoch 69/100 \t Train Err: 4.2500 0.00579833984375 0.05419921875 6.46875 7.25\n", - "Epoch 69/100 \t Train Err: 4.3125 0.005828857421875 0.051513671875 6.625 7.34375\n", - "Epoch 69/100 \t Train Err: 4.3125 0.005859375 0.052978515625 6.78125 7.21875\n", - "Epoch 70/100 \t Train Err: 4.2812 0.005859375 0.04931640625 6.625 7.25\n", - "Epoch 70/100 \t Train Err: 4.1875 0.005767822265625 0.051025390625 6.21875 7.1875\n", - "Epoch 70/100 \t Train Err: 4.2500 0.005828857421875 0.05126953125 6.34375 7.4375\n", - "Epoch 70/100 \t Train Err: 4.2812 0.005706787109375 0.05126953125 6.28125 7.5\n", - "Epoch 70/100 \t Train Err: 4.3438 0.0057373046875 0.05078125 6.40625 7.5\n", - "Epoch 70/100 \t Train Err: 4.3125 0.0057373046875 0.05517578125 6.875 7.1875\n", - "Epoch 70/100 \t Train Err: 4.1562 0.005828857421875 0.052734375 6.78125 6.875\n", - "Epoch 70/100 \t Train Err: 4.2188 0.00579833984375 0.05419921875 6.59375 7.15625\n", - "Epoch 71/100 \t Train Err: 4.3125 0.00567626953125 0.052490234375 6.5 7.46875\n", - "Epoch 71/100 \t Train Err: 4.2500 0.00567626953125 0.05126953125 6.125 7.5\n", - "Epoch 71/100 \t Train Err: 4.2500 0.005706787109375 0.05224609375 6.5 7.4375\n", - "Epoch 71/100 \t Train Err: 4.1875 0.0057373046875 0.053466796875 6.65625 6.96875\n", - "Epoch 71/100 \t Train Err: 4.2812 0.005767822265625 0.0546875 6.875 7.09375\n", - "Epoch 71/100 \t Train Err: 4.1562 0.005645751953125 0.054443359375 6.40625 6.96875\n", - "Epoch 71/100 \t Train Err: 4.2188 0.005615234375 0.0498046875 6.3125 7.4375\n", - "Epoch 71/100 \t Train Err: 4.2500 0.00555419921875 0.05224609375 6.40625 7.40625\n", - "Epoch 72/100 \t Train Err: 4.2500 0.005615234375 0.052978515625 6.15625 7.375\n", - "Epoch 72/100 \t Train Err: 4.2500 0.00537109375 0.0517578125 6.5 7.25\n", - "Epoch 72/100 \t Train Err: 4.1562 0.00543212890625 0.05029296875 6.4375 7.0\n", - "Epoch 72/100 \t Train Err: 4.1875 0.005401611328125 0.04638671875 6.3125 7.09375\n", - "Epoch 72/100 \t Train Err: 4.1562 0.00537109375 0.048828125 6.34375 7.09375\n", - "Epoch 72/100 \t Train Err: 4.2500 0.00537109375 0.0498046875 6.21875 7.3125\n", - "Epoch 72/100 \t Train Err: 4.2188 0.00531005859375 0.05078125 6.46875 7.21875\n", - "Epoch 72/100 \t Train Err: 4.1250 0.00537109375 0.05078125 6.46875 6.90625\n", - "Epoch 73/100 \t Train Err: 4.2500 0.005340576171875 0.053955078125 6.40625 7.1875\n", - "Epoch 73/100 \t Train Err: 4.1875 0.005279541015625 0.0517578125 6.59375 6.96875\n", - "Epoch 73/100 \t Train Err: 4.2500 0.00537109375 0.0556640625 6.40625 7.21875\n", - "Epoch 73/100 \t Train Err: 4.1250 0.00531005859375 0.051513671875 6.34375 6.96875\n", - "Epoch 73/100 \t Train Err: 4.2188 0.005279541015625 0.04833984375 6.0 7.46875\n", - "Epoch 73/100 \t Train Err: 4.1250 0.00537109375 0.050537109375 6.0625 7.1875\n", - "Epoch 73/100 \t Train Err: 4.1250 0.00531005859375 0.048095703125 5.90625 7.09375\n", - "Epoch 73/100 \t Train Err: 4.1562 0.0052490234375 0.05029296875 6.375 6.90625\n", - "Epoch 74/100 \t Train Err: 4.0625 0.005523681640625 0.049560546875 6.4375 6.8125\n", - "Epoch 74/100 \t Train Err: 4.1875 0.005279541015625 0.049072265625 5.90625 7.34375\n", - "Epoch 74/100 \t Train Err: 4.2188 0.00531005859375 0.04931640625 6.09375 7.375\n", - "Epoch 74/100 \t Train Err: 4.0938 0.00531005859375 0.05029296875 6.21875 6.96875\n", - "Epoch 74/100 \t Train Err: 4.1562 0.0052490234375 0.053955078125 6.3125 7.09375\n", - "Epoch 74/100 \t Train Err: 4.1250 0.00518798828125 0.05126953125 6.3125 7.0625\n", - "Epoch 74/100 \t Train Err: 4.1562 0.0052490234375 0.051513671875 6.21875 7.0625\n", - "Epoch 74/100 \t Train Err: 4.0938 0.005218505859375 0.049560546875 6.1875 7.0\n", - "Epoch 75/100 \t Train Err: 4.1250 0.005218505859375 0.0517578125 6.3125 7.0625\n", - "Epoch 75/100 \t Train Err: 4.0312 0.005218505859375 0.050048828125 6.03125 6.875\n", - "Epoch 75/100 \t Train Err: 4.0938 0.005157470703125 0.0498046875 5.84375 7.15625\n", - "Epoch 75/100 \t Train Err: 4.1250 0.005126953125 0.04541015625 5.875 7.21875\n", - "Epoch 75/100 \t Train Err: 4.0625 0.005126953125 0.05126953125 6.09375 6.9375\n", - "Epoch 75/100 \t Train Err: 4.0000 0.005218505859375 0.050537109375 6.40625 6.53125\n", - "Epoch 75/100 \t Train Err: 4.1250 0.00518798828125 0.049560546875 6.09375 6.9375\n", - "Epoch 75/100 \t Train Err: 4.0625 0.005126953125 0.046875 5.59375 7.1875\n", - "Epoch 76/100 \t Train Err: 4.0000 0.00506591796875 0.045654296875 5.5 7.15625\n", - "Epoch 76/100 \t Train Err: 4.1562 0.005157470703125 0.0458984375 6.0 7.25\n", - "Epoch 76/100 \t Train Err: 4.0625 0.00518798828125 0.048095703125 6.5 6.59375\n", - "Epoch 76/100 \t Train Err: 4.0625 0.005096435546875 0.0458984375 6.0 6.875\n", - "Epoch 76/100 \t Train Err: 4.0312 0.0052490234375 0.044921875 5.75 7.03125\n", - "Epoch 76/100 \t Train Err: 4.1562 0.00518798828125 0.043701171875 5.75 7.28125\n", - "Epoch 76/100 \t Train Err: 4.0625 0.005096435546875 0.0498046875 5.84375 7.09375\n", - "Epoch 76/100 \t Train Err: 4.0625 0.005126953125 0.044189453125 6.25 6.8125\n", - "Epoch 77/100 \t Train Err: 3.9688 0.005126953125 0.0478515625 6.15625 6.59375\n", - "Epoch 77/100 \t Train Err: 4.0312 0.005126953125 0.046142578125 5.84375 6.90625\n", - "Epoch 77/100 \t Train Err: 4.0000 0.00506591796875 0.04541015625 5.71875 6.96875\n", - "Epoch 77/100 \t Train Err: 3.9531 0.004974365234375 0.046142578125 5.46875 7.0\n", - "Epoch 77/100 \t Train Err: 4.0312 0.004974365234375 0.044677734375 6.0625 6.8125\n", - "Epoch 77/100 \t Train Err: 4.0312 0.005035400390625 0.047607421875 6.125 6.6875\n", - "Epoch 77/100 \t Train Err: 4.0312 0.004852294921875 0.047607421875 6.09375 6.84375\n", - "Epoch 77/100 \t Train Err: 3.9844 0.0048828125 0.043701171875 5.53125 6.96875\n", - "Epoch 78/100 \t Train Err: 3.9844 0.004852294921875 0.045654296875 5.875 6.875\n", - "Epoch 78/100 \t Train Err: 3.9844 0.004913330078125 0.0458984375 5.8125 6.78125\n", - "Epoch 78/100 \t Train Err: 3.9375 0.0048828125 0.046142578125 5.6875 6.65625\n", - "Epoch 78/100 \t Train Err: 3.9531 0.004974365234375 0.04541015625 5.71875 6.78125\n", - "Epoch 78/100 \t Train Err: 4.0000 0.004913330078125 0.0458984375 5.5625 7.0\n", - "Epoch 78/100 \t Train Err: 3.9375 0.0048828125 0.041748046875 5.46875 6.90625\n", - "Epoch 78/100 \t Train Err: 3.9688 0.00494384765625 0.043701171875 5.71875 6.875\n", - "Epoch 78/100 \t Train Err: 3.9375 0.005035400390625 0.048095703125 5.96875 6.46875\n", - "Epoch 79/100 \t Train Err: 3.9844 0.0050048828125 0.049072265625 6.03125 6.625\n", - "Epoch 79/100 \t Train Err: 3.9688 0.0050048828125 0.040283203125 4.90625 7.25\n", - "Epoch 79/100 \t Train Err: 4.0312 0.004974365234375 0.04345703125 5.4375 7.1875\n", - "Epoch 79/100 \t Train Err: 3.9688 0.005035400390625 0.045166015625 6.03125 6.5625\n", - "Epoch 79/100 \t Train Err: 4.0000 0.005035400390625 0.0478515625 6.46875 6.28125\n", - "Epoch 79/100 \t Train Err: 3.9219 0.005035400390625 0.043701171875 5.03125 7.03125\n", - "Epoch 79/100 \t Train Err: 4.0312 0.004974365234375 0.044921875 4.90625 7.375\n", - "Epoch 79/100 \t Train Err: 3.9062 0.004974365234375 0.04296875 5.8125 6.625\n", - "Epoch 80/100 \t Train Err: 3.9219 0.0050048828125 0.04638671875 6.40625 6.25\n", - "Epoch 80/100 \t Train Err: 3.8750 0.004974365234375 0.045654296875 5.65625 6.5\n", - "Epoch 80/100 \t Train Err: 3.9531 0.0048828125 0.04345703125 5.15625 7.15625\n", - "Epoch 80/100 \t Train Err: 3.9688 0.004913330078125 0.043701171875 5.25 7.0\n", - "Epoch 80/100 \t Train Err: 3.8906 0.004974365234375 0.04345703125 5.875 6.53125\n", - "Epoch 80/100 \t Train Err: 3.8281 0.00494384765625 0.044677734375 5.65625 6.4375\n", - "Epoch 80/100 \t Train Err: 3.9531 0.004852294921875 0.041259765625 5.4375 6.96875\n", - "Epoch 80/100 \t Train Err: 3.9531 0.00494384765625 0.04345703125 5.15625 7.0\n", - "Epoch 81/100 \t Train Err: 3.9844 0.0048828125 0.0419921875 5.5625 6.8125\n", - "Epoch 81/100 \t Train Err: 3.9219 0.0048828125 0.04443359375 5.71875 6.46875\n", - "Epoch 81/100 \t Train Err: 3.9375 0.00482177734375 0.046630859375 5.71875 6.625\n", - "Epoch 81/100 \t Train Err: 3.9219 0.00469970703125 0.042236328125 5.03125 6.90625\n", - "Epoch 81/100 \t Train Err: 3.9219 0.0047607421875 0.042236328125 5.0625 7.03125\n", - "Epoch 81/100 \t Train Err: 3.9844 0.004791259765625 0.044189453125 5.5625 6.90625\n", - "Epoch 81/100 \t Train Err: 3.8750 0.0048828125 0.044677734375 5.875 6.375\n", - "Epoch 81/100 \t Train Err: 3.8438 0.00482177734375 0.045166015625 5.40625 6.5625\n", - "Epoch 82/100 \t Train Err: 3.8281 0.0048828125 0.044189453125 5.0625 6.8125\n", - "Epoch 82/100 \t Train Err: 3.8906 0.004913330078125 0.042724609375 5.15625 7.03125\n", - "Epoch 82/100 \t Train Err: 3.8750 0.00482177734375 0.048583984375 5.90625 6.34375\n", - "Epoch 82/100 \t Train Err: 3.8594 0.004913330078125 0.045166015625 5.6875 6.28125\n", - "Epoch 82/100 \t Train Err: 3.8594 0.004852294921875 0.043701171875 5.28125 6.78125\n", - "Epoch 82/100 \t Train Err: 3.8594 0.004852294921875 0.042236328125 4.84375 6.9375\n", - "Epoch 82/100 \t Train Err: 3.7969 0.0048828125 0.0400390625 5.15625 6.625\n", - "Epoch 82/100 \t Train Err: 3.8281 0.004730224609375 0.04736328125 5.53125 6.28125\n", - "Epoch 83/100 \t Train Err: 3.8438 0.0047607421875 0.044921875 5.3125 6.53125\n", - "Epoch 83/100 \t Train Err: 3.7969 0.00469970703125 0.043212890625 5.09375 6.625\n", - "Epoch 83/100 \t Train Err: 3.8125 0.004669189453125 0.043701171875 5.1875 6.71875\n", - "Epoch 83/100 \t Train Err: 3.8281 0.004669189453125 0.042236328125 5.09375 6.6875\n", - "Epoch 83/100 \t Train Err: 3.8125 0.0047607421875 0.042236328125 5.40625 6.46875\n", - "Epoch 83/100 \t Train Err: 3.8594 0.00482177734375 0.04150390625 5.34375 6.59375\n", - "Epoch 83/100 \t Train Err: 3.7500 0.00482177734375 0.041748046875 5.3125 6.375\n", - "Epoch 83/100 \t Train Err: 3.7812 0.004791259765625 0.040771484375 4.75 6.75\n", - "Epoch 84/100 \t Train Err: 3.7188 0.0047607421875 0.0390625 5.21875 6.34375\n", - "Epoch 84/100 \t Train Err: 3.7656 0.0047607421875 0.040771484375 5.09375 6.40625\n", - "Epoch 84/100 \t Train Err: 3.7969 0.004852294921875 0.04248046875 5.25 6.34375\n", - "Epoch 84/100 \t Train Err: 3.7344 0.0047607421875 0.03955078125 5.125 6.3125\n", - "Epoch 84/100 \t Train Err: 3.7500 0.004791259765625 0.03857421875 4.5 6.90625\n", - "Epoch 84/100 \t Train Err: 3.7656 0.00482177734375 0.04248046875 5.1875 6.40625\n", - "Epoch 84/100 \t Train Err: 3.7656 0.00482177734375 0.042724609375 5.3125 6.21875\n", - "Epoch 84/100 \t Train Err: 3.7188 0.004730224609375 0.04345703125 5.21875 6.28125\n", - "Epoch 85/100 \t Train Err: 3.7500 0.004608154296875 0.039794921875 4.65625 6.625\n", - "Epoch 85/100 \t Train Err: 3.7344 0.004608154296875 0.04150390625 4.71875 6.53125\n", - "Epoch 85/100 \t Train Err: 3.7344 0.004730224609375 0.042236328125 5.375 6.3125\n", - "Epoch 85/100 \t Train Err: 3.7656 0.004730224609375 0.040283203125 5.4375 6.28125\n", - "Epoch 85/100 \t Train Err: 3.6875 0.00469970703125 0.0400390625 5.0 6.28125\n", - "Epoch 85/100 \t Train Err: 3.7031 0.00469970703125 0.037109375 4.8125 6.53125\n", - "Epoch 85/100 \t Train Err: 3.7500 0.00469970703125 0.038330078125 4.78125 6.625\n", - "Epoch 85/100 \t Train Err: 3.6875 0.004669189453125 0.0400390625 5.34375 6.0625\n", - "Epoch 86/100 \t Train Err: 3.7344 0.004638671875 0.037841796875 5.40625 6.25\n", - "Epoch 86/100 \t Train Err: 3.7031 0.004638671875 0.0380859375 4.875 6.46875\n", - "Epoch 86/100 \t Train Err: 3.7344 0.00457763671875 0.0390625 4.59375 6.6875\n", - "Epoch 86/100 \t Train Err: 3.7031 0.004638671875 0.036865234375 5.09375 6.21875\n", - "Epoch 86/100 \t Train Err: 3.7031 0.004638671875 0.0390625 5.28125 6.15625\n", - "Epoch 86/100 \t Train Err: 3.7500 0.004669189453125 0.037841796875 4.875 6.59375\n", - "Epoch 86/100 \t Train Err: 3.7188 0.004638671875 0.0390625 4.625 6.5625\n", - "Epoch 86/100 \t Train Err: 3.6406 0.004730224609375 0.039306640625 5.125 5.9375\n", - "Epoch 87/100 \t Train Err: 3.6875 0.00469970703125 0.03759765625 4.9375 6.28125\n", - "Epoch 87/100 \t Train Err: 3.6875 0.004730224609375 0.039794921875 4.78125 6.25\n", - "Epoch 87/100 \t Train Err: 3.7031 0.004791259765625 0.0361328125 4.65625 6.53125\n", - "Epoch 87/100 \t Train Err: 3.6719 0.0047607421875 0.03662109375 4.625 6.5\n", - "Epoch 87/100 \t Train Err: 3.6094 0.004791259765625 0.037109375 5.125 6.0\n", - "Epoch 87/100 \t Train Err: 3.7344 0.00482177734375 0.036865234375 5.375 6.15625\n", - "Epoch 87/100 \t Train Err: 3.6719 0.0047607421875 0.037353515625 4.65625 6.53125\n", - "Epoch 87/100 \t Train Err: 3.6562 0.004791259765625 0.03662109375 4.59375 6.4375\n", - "Epoch 88/100 \t Train Err: 3.6562 0.004638671875 0.03857421875 5.28125 6.0\n", - "Epoch 88/100 \t Train Err: 3.5938 0.004730224609375 0.040283203125 4.875 6.03125\n", - "Epoch 88/100 \t Train Err: 3.6875 0.004608154296875 0.03955078125 4.5625 6.5\n", - "Epoch 88/100 \t Train Err: 3.6875 0.004730224609375 0.0380859375 4.71875 6.46875\n", - "Epoch 88/100 \t Train Err: 3.5469 0.004608154296875 0.037353515625 4.53125 6.21875\n", - "Epoch 88/100 \t Train Err: 3.6250 0.004608154296875 0.040771484375 4.9375 6.125\n", - "Epoch 88/100 \t Train Err: 3.6094 0.004486083984375 0.038330078125 4.8125 6.21875\n", - "Epoch 88/100 \t Train Err: 3.5938 0.0045166015625 0.0400390625 4.75 6.21875\n", - "Epoch 89/100 \t Train Err: 3.6406 0.0045166015625 0.038330078125 4.875 6.21875\n", - "Epoch 89/100 \t Train Err: 3.5469 0.00457763671875 0.041748046875 5.21875 5.6875\n", - "Epoch 89/100 \t Train Err: 3.6250 0.004608154296875 0.03759765625 4.46875 6.40625\n", - "Epoch 89/100 \t Train Err: 3.5469 0.004638671875 0.035400390625 4.625 6.15625\n", - "Epoch 89/100 \t Train Err: 3.6094 0.00469970703125 0.0341796875 4.40625 6.375\n", - "Epoch 89/100 \t Train Err: 3.5781 0.00469970703125 0.0361328125 4.75 6.0625\n", - "Epoch 89/100 \t Train Err: 3.4688 0.0047607421875 0.0341796875 4.53125 5.96875\n", - "Epoch 89/100 \t Train Err: 3.5781 0.00469970703125 0.033935546875 4.40625 6.34375\n", - "Epoch 90/100 \t Train Err: 3.5625 0.0047607421875 0.03369140625 4.53125 6.25\n", - "Epoch 90/100 \t Train Err: 3.6094 0.004791259765625 0.033447265625 4.875 6.0625\n", - "Epoch 90/100 \t Train Err: 3.6250 0.0048828125 0.034423828125 4.40625 6.34375\n", - "Epoch 90/100 \t Train Err: 3.5469 0.004913330078125 0.03662109375 4.71875 6.0\n", - "Epoch 90/100 \t Train Err: 3.5000 0.004913330078125 0.035400390625 4.40625 6.125\n", - "Epoch 90/100 \t Train Err: 3.5469 0.00494384765625 0.03369140625 4.125 6.375\n", - "Epoch 90/100 \t Train Err: 3.5156 0.004852294921875 0.035400390625 4.53125 5.96875\n", - "Epoch 90/100 \t Train Err: 3.5156 0.00469970703125 0.036376953125 4.71875 5.90625\n", - "Epoch 91/100 \t Train Err: 3.5312 0.0047607421875 0.033447265625 4.375 6.28125\n", - "Epoch 91/100 \t Train Err: 3.5469 0.004730224609375 0.032958984375 4.34375 6.3125\n", - "Epoch 91/100 \t Train Err: 3.6094 0.004669189453125 0.0390625 5.34375 5.65625\n", - "Epoch 91/100 \t Train Err: 3.5156 0.004608154296875 0.032958984375 4.28125 6.0625\n", - "Epoch 91/100 \t Train Err: 3.5469 0.00457763671875 0.03125 4.03125 6.4375\n", - "Epoch 91/100 \t Train Err: 3.5312 0.004608154296875 0.03564453125 4.84375 5.71875\n", - "Epoch 91/100 \t Train Err: 3.4844 0.004547119140625 0.0322265625 4.5 5.90625\n", - "Epoch 91/100 \t Train Err: 3.5312 0.004608154296875 0.0299072265625 3.953125 6.625\n", - "Epoch 92/100 \t Train Err: 3.5000 0.004547119140625 0.03515625 5.21875 5.46875\n", - "Epoch 92/100 \t Train Err: 3.4688 0.004486083984375 0.034423828125 4.53125 5.9375\n", - "Epoch 92/100 \t Train Err: 3.4531 0.00457763671875 0.032470703125 3.875 6.375\n", - "Epoch 92/100 \t Train Err: 3.5938 0.004669189453125 0.038330078125 4.9375 5.84375\n", - "Epoch 92/100 \t Train Err: 3.5156 0.004730224609375 0.03369140625 5.03125 5.6875\n", - "Epoch 92/100 \t Train Err: 3.5625 0.004791259765625 0.029052734375 3.890625 6.65625\n", - "Epoch 92/100 \t Train Err: 3.4531 0.004730224609375 0.032470703125 4.5 5.90625\n", - "Epoch 92/100 \t Train Err: 3.4531 0.0047607421875 0.030517578125 4.71875 5.6875\n", - "Epoch 93/100 \t Train Err: 3.5156 0.00482177734375 0.0281982421875 3.78125 6.53125\n", - "Epoch 93/100 \t Train Err: 3.4531 0.00482177734375 0.03173828125 4.6875 5.5625\n", - "Epoch 93/100 \t Train Err: 3.4531 0.004791259765625 0.03271484375 4.6875 5.6875\n", - "Epoch 93/100 \t Train Err: 3.4375 0.00469970703125 0.0279541015625 3.96875 6.25\n", - "Epoch 93/100 \t Train Err: 3.3594 0.004730224609375 0.03076171875 4.125 5.9375\n", - "Epoch 93/100 \t Train Err: 3.4688 0.004730224609375 0.0301513671875 4.96875 5.625\n", - "Epoch 93/100 \t Train Err: 3.3906 0.004730224609375 0.0296630859375 4.03125 6.0625\n", - "Epoch 93/100 \t Train Err: 3.4688 0.0047607421875 0.0294189453125 4.25 6.0625\n", - "Epoch 94/100 \t Train Err: 3.3906 0.0047607421875 0.031005859375 4.375 5.6875\n", - "Epoch 94/100 \t Train Err: 3.4219 0.004791259765625 0.031494140625 4.53125 5.8125\n", - "Epoch 94/100 \t Train Err: 3.4375 0.004791259765625 0.0281982421875 4.25 6.03125\n", - "Epoch 94/100 \t Train Err: 3.4219 0.004791259765625 0.02978515625 4.34375 5.8125\n", - "Epoch 94/100 \t Train Err: 3.4219 0.00469970703125 0.0308837890625 4.375 5.78125\n", - "Epoch 94/100 \t Train Err: 3.4375 0.004669189453125 0.028564453125 4.25 6.0\n", - "Epoch 94/100 \t Train Err: 3.3594 0.00469970703125 0.0283203125 4.25 5.875\n", - "Epoch 94/100 \t Train Err: 3.3594 0.004852294921875 0.03125 4.28125 5.6875\n", - "Epoch 95/100 \t Train Err: 3.3750 0.004791259765625 0.0284423828125 4.25 5.6875\n", - "Epoch 95/100 \t Train Err: 3.3750 0.0047607421875 0.0279541015625 3.90625 5.96875\n", - "Epoch 95/100 \t Train Err: 3.3594 0.004730224609375 0.029052734375 4.28125 5.71875\n", - "Epoch 95/100 \t Train Err: 3.3906 0.004791259765625 0.0296630859375 4.3125 5.78125\n", - "Epoch 95/100 \t Train Err: 3.3750 0.004791259765625 0.03076171875 4.125 5.78125\n", - "Epoch 95/100 \t Train Err: 3.3594 0.0047607421875 0.0291748046875 4.25 5.8125\n", - "Epoch 95/100 \t Train Err: 3.3438 0.004669189453125 0.02783203125 4.15625 5.875\n", - "Epoch 95/100 \t Train Err: 3.3281 0.0047607421875 0.0299072265625 4.375 5.5\n", - "Epoch 96/100 \t Train Err: 3.3438 0.0048828125 0.02880859375 3.84375 5.90625\n", - "Epoch 96/100 \t Train Err: 3.3750 0.0047607421875 0.030029296875 4.0625 5.8125\n", - "Epoch 96/100 \t Train Err: 3.3438 0.00482177734375 0.0308837890625 3.9375 5.71875\n", - "Epoch 96/100 \t Train Err: 3.3125 0.004730224609375 0.028564453125 4.21875 5.59375\n", - "Epoch 96/100 \t Train Err: 3.2969 0.004638671875 0.0291748046875 3.765625 5.90625\n", - "Epoch 96/100 \t Train Err: 3.3750 0.004638671875 0.034912109375 4.375 5.75\n", - "Epoch 96/100 \t Train Err: 3.2656 0.004638671875 0.029296875 4.125 5.53125\n", - "Epoch 96/100 \t Train Err: 3.2500 0.004638671875 0.0286865234375 3.984375 5.625\n", - "Epoch 97/100 \t Train Err: 3.2656 0.00457763671875 0.028564453125 4.125 5.59375\n", - "Epoch 97/100 \t Train Err: 3.3438 0.004547119140625 0.02587890625 3.859375 5.9375\n", - "Epoch 97/100 \t Train Err: 3.3125 0.00457763671875 0.02783203125 4.03125 5.6875\n", - "Epoch 97/100 \t Train Err: 3.3438 0.004608154296875 0.02783203125 4.125 5.6875\n", - "Epoch 97/100 \t Train Err: 3.3125 0.004730224609375 0.0279541015625 3.875 5.75\n", - "Epoch 97/100 \t Train Err: 3.2500 0.004730224609375 0.0289306640625 3.78125 5.6875\n", - "Epoch 97/100 \t Train Err: 3.2812 0.004669189453125 0.030517578125 4.03125 5.5625\n", - "Epoch 97/100 \t Train Err: 3.3281 0.004638671875 0.029296875 4.1875 5.625\n", - "Epoch 98/100 \t Train Err: 3.2969 0.004669189453125 0.0264892578125 3.734375 6.0\n", - "Epoch 98/100 \t Train Err: 3.2031 0.0047607421875 0.0262451171875 3.921875 5.5\n", - "Epoch 98/100 \t Train Err: 3.2969 0.004791259765625 0.02685546875 4.59375 5.1875\n", - "Epoch 98/100 \t Train Err: 3.3750 0.0047607421875 0.02392578125 3.34375 6.5\n", - "Epoch 98/100 \t Train Err: 3.4688 0.004791259765625 0.033447265625 5.625 4.625\n", - "Epoch 98/100 \t Train Err: 4.5625 0.00482177734375 0.01953125 1.4296875 11.0625\n", - "Epoch 98/100 \t Train Err: 10.6875 0.00567626953125 0.44140625 46.5 1.109375\n", - "Epoch 98/100 \t Train Err: 11.5625 0.0096435546875 0.0252685546875 0.322265625 29.875\n", - "Epoch 99/100 \t Train Err: 12.5000 0.1318359375 0.0341796875 0.1640625 32.25\n", - "Epoch 99/100 \t Train Err: 7.3125 0.71484375 0.66796875 2.953125 17.125\n", - "Epoch 99/100 \t Train Err: 9.1250 1.265625 3.046875 38.0 3.265625\n", - "Epoch 99/100 \t Train Err: 9.4375 1.078125 3.578125 40.5 2.859375\n", - "Epoch 99/100 \t Train Err: 5.9688 0.419921875 1.484375 14.3125 8.125\n", - "Epoch 99/100 \t Train Err: 6.6250 0.01513671875 0.3125 4.5 15.25\n", - "Epoch 99/100 \t Train Err: 7.5000 0.326171875 0.042236328125 2.78125 18.0\n", - "Epoch 99/100 \t Train Err: 6.6250 0.765625 0.087890625 5.0 14.375\n" - ] - } - ], + "outputs": [], "source": [ "while epoch < NEPOCHS:\n", " model.train()\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", + " label = pickled_stuff[\"labels\"].to(device).to(torch.float32)\n", " padding = pickled_stuff[\"padding\"].to(device)\n", " dataset = TensorDataset(data, label, padding)\n", " loader = DataLoader(dataset, batch_size=BSZ)\n", - " for batch_src, batch_labels, batch_padding_mask in loader:\n", + " for batch_src, batch_labels, batch_padding_mask in tqdm(loader):\n", " optimizer.zero_grad()\n", " output = model(batch_src, batch_padding_mask)\n", " loss = criterion(output.squeeze(1), batch_labels)\n", " train_loss = loss.item()\n", " loss.backward()\n", " optimizer.step()\n", - " # scheduler.step(loss)\n", - " \n", - " # test_loss = evaluate()\n", - " # test_short_loss = evaluate_short()\n", " \n", - " # test_err.append(test_loss)\n", " train_err.append(train_loss)\n", - " len1.append(criterion(output[batch_labels == 1].squeeze(1), batch_labels[batch_labels==1]))\n", - " len2.append(criterion(output[batch_labels == 2].squeeze(1), batch_labels[batch_labels==2]))\n", - " len3.append(criterion(output[batch_labels == 3].squeeze(1), batch_labels[batch_labels==3]))\n", - " len15.append(criterion(output[batch_labels == 15].squeeze(1), batch_labels[batch_labels==15]))\n", + " len1.append(criterion(output[batch_labels == 1].squeeze(1), batch_labels[batch_labels == 1]).item())\n", + " len2.append(criterion(output[batch_labels == 2].squeeze(1), batch_labels[batch_labels == 2]).item())\n", + " len3.append(criterion(output[batch_labels == 3].squeeze(1), batch_labels[batch_labels == 3]).item())\n", + " leninf.append(criterion(output[batch_labels == MAX_VTXS].squeeze(1), batch_labels[batch_labels == MAX_VTXS]).item())\n", " \n", " with open('loss', 'a') as f:\n", - " f.write(f\"{train_loss}\\n\")\n", - " print(f\"Epoch {epoch}/{NEPOCHS} \\t Train Err: {train_loss:.4f} {len1[-1]} {len2[-1]} {len3[-1]} {len15[-1]}\")\n", + " f.write(f\"{train_loss} {len1[-1]} {len2[-1]} {len3[-1]} {leninf[-1]}\\n\")\n", + " print(f\"Epoch {epoch}/{NEPOCHS} \\t Train Err: {train_err[-1]} {len1[-1]} {len2[-1]} {len3[-1]} {leninf[-1]}\")\n", "\n", " epoch += 1\n", - " if epoch % 100 == 0:\n", - " torch.save(model.state_dict(), f\"model_weights_{epoch}.pth\")" + " if epoch % 10 == 0:\n", + " torch.save(model.state_dict(), f\"checkpoints/model_weights_{epoch}.pth\")" ] }, { @@ -1414,16 +583,29 @@ "metadata": {}, "outputs": [], "source": [ - "plt.suptitle('MSE vs Epochs')\n", - "plt.plot(train_err, label='Train', color='blue')\n", + "with open('training-loss') as f:\n", + " train_err = list(map(float, f.read().split()))\n", + " plt.suptitle('Log MSE vs Epochs')\n", + " plt.plot(torch.log(torch.tensor(train_err)[:500]), label='Train', color='blue')\n", + " plt.xlabel('Epochs')\n", + " plt.ylabel('Log MSE')\n", + " plt.show()\n", + "\n", + "plt.suptitle('Log MSE vs Epochs')\n", + "plt.plot(torch.log(torch.tensor(train_err)), label='Train', color='blue')\n", + "plt.plot(torch.log(torch.tensor(len1)).to(torch.float16), label='Len 1', color='red')\n", + "plt.plot(torch.log(torch.tensor(len2)).to(torch.float16), label='Len 2', color='green')\n", + "plt.plot(torch.log(torch.tensor(len3)).to(torch.float16), label='Len 3', color='yellow')\n", + "plt.plot(torch.log(torch.tensor(len15)).to(torch.float16), label='Len 15', color='magenta')\n", "plt.xlabel('Epochs')\n", - "plt.ylabel('MSE')\n", + "plt.ylabel('Log MSE')\n", + "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 11, "execution_state": "idle", "metadata": { "id": "LoGEmM5lH7_A" @@ -1431,7 +613,7 @@ "outputs": [ { "data": { - "image/png": "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Ho8n2qlERLw/n3jGuBDvzyeeEXEq5gZbAgCAwYMWCQAAEDIKCQAAEDIKCQAAEDIKCQAAELIhW0hUVFSosLBQqampGjNmjObNm6d9+/ZFO62Ievjhh+VyubR06dJop+KoDz/8UN/97nc1atQoDR8+XFOmTFFdXV2003KEz+fTypUrlZeXp+HDh+vLX/6yfvKTnwzqXQRramo0d+5cZWdny+VyaevWrf2+blmWVq1apbFjx2r48OEqLi7W/v37o5ZvKM70jL29vVq2bJmmTJmilJQUZWdn63vf+54OHToU1ZwH6mzfx8/7/ve/L5fLpcrKSqM5wowhW0i89tprKisr0+7du7Vjxw719vbqG9/4hjo7O6OdWkTU1tbqF7/4hS6++OJop+KoTz/9VDNnztSwYcP08ssv65133tFjjz2mkSNHRjs1R6xZs0br1q3Tk08+qb/85S9as2aNHnnkET3xxBPRTi1knZ2dys/PV1VVVdCvP/LII3r88ce1fv16vfnmm0pJSdGcOXPU1dVlPNdQnekZjx07poaGBq1cuVINDQ367W9/q3379unb3/52VHIN1dm+j322bNmi3bt3Kzs721huMMyCZVmW1dbWZkmyXnvttWin4rijR49a5513nrVjxw7r61//urVkyZJop+SYZcuWWVdccUW004iYq666yrrlllv6nbvmmmus+fPnRy0nJ0mytmzZEnjt9/utrKws69FHHw2cO3LkiOXxeKxf/epXUcoyPCc/YzBvvfWWJck6ePCgsbycdLpn/Otf/2p98YtftPbs2WONHz/e+tnPfhaV/BBZQ7ZF4mTt7e2SpIyMjGin4riysjJdddVVKi4ujnYqjnvxxRc1bdo0XXfddRozZowuueQSPfXUU9FOyzGXX365qqur9e6770qS3n77bb3xxhsqKSmJdmoR0dTUpJaWln4/q+np6ZoxY4Z27doV1dwiqb29XS6XS+eee260U3GM3+/XggULdNddd2nSpEnRTgcRFHObdkWD3+/X0qVLNXPmTE2ePDna6Tjq+eefV0NDg2pra6OdSkS89957WrduncrLy3X33XertrZWixcvVlJSkkpLS6OdXtiWL18ur9erCy+8UG63Wz6fT6tXr9b8+fOjnVpE9G3TnJmZ2e98ZmamI1s4x6Kuri4tW7ZMN910U1xt5LVmzRolJiZq8eLF0U4FEUYhceIT+549e/TGG29EOxVHNTc3a8mSJdqxY0fc7lrn9/s1bdo0PfTQQ5KkSy65RHv27NH69evjopD49a9/reeee06bNm3SpEmT1NjYqKVLlyo7Ozsunm+o6+3t1fXXXy/LsrRu3bpop+OY+vp6/fznP1dDQ4NcLle000GEDfmujUWLFumll17Szp07o7Z9eaTU19erra1Nl156qRITE5WYmKjXXntNjz/+uBITE+Xz+aKdYtjGjh2riRMn9jt30UUX6YMPPohaTk666667tHz5ct14442aMmWKFixYoDvuuEMVFRXRTi0isrKyJEmtra39zre2tga+Fi/6ioiDBw9qx44dcdUa8frrr6utrU25ubmBvz0HDx7UnXfeqQkTJkQ7PThsyLZIWJal22+/XVu2bNGrr76qvLy8aKfkuNmzZ+vPf/5zv3MLFy7UhRdeqGXLlsntdkctN6fMnDnzlGm77777rsaPHx+1nJx07NgxJST0r/fdbrf8fn/UcoqkvLw8ZWVlqbq6WgUFBZIkr9erN998Uz/4wQ+inZ5j+oqI/fv3a+fOnRo1alS0U3LUggULThmTNWfOHC1YsEALFy6MWl6IjCFbSJSVlWnTpk164YUXlJqaGuh/TU9P1/Dhw6OdniNSU1NPGfORkpKiUaNGxc1YkDvuuEOXX365HnroIV1//fV66623tGHDBm3YsCHaqTli7ty5Wr16tXJzczVp0iT96U9/0tq1a3XLLbdEO7WQdXR06MCBA4HXTU1NamxsVEZGhnJzc7V06VI9+OCDOu+885SXl6eVK1cqOztb8+bNi2reA3GmZxw7dqyuvfZaNTQ06KWXXpLP5wv8/cnIyFBSUlIUM7fvbN/Hk4ujYcOGKSsrSxdccEEUskVERXvaSLRICno888wz0U4touJt+qdlWdbvfvc7a/LkyZbH47EuvPBCa8OGDdFOyTFer9dasmSJlZubayUnJ1tf+tKXrB//+MdWd3d3tFML2c6dO4P+7pWWllrWiSmgK1eutDIzMy2Px2PNnj3b2rdvX7TTHpAzPWNTU9Np//7s3Lkz2qnbdrbv48mY/hm/2EYcAACEbMgPtgQAAKGjkAAAACGjkAAAACGjkAAAACGjkAAAACGjkAAAACGjkAAAACGjkAAAACGjkAAAACGjkAAAACGjkAAAACGjkAAAACH7/1iL6hoUmWwOAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "<Figure size 640x480 with 2 Axes>" ] @@ -1457,11 +639,43 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "execution_state": "idle", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/sipb/.venv/lib64/python3.12/site-packages/torch/nn/modules/transformer.py:871: UserWarning: Memory Efficient attention on Navi31 GPU is still experimental. Enable it with TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1. (Triggered internally at ../aten/src/ATen/native/transformers/hip/sdp_utils.cpp:269.)\n", + " return torch._transformer_encoder_layer_fwd(\n", + "/home/sipb/.venv/lib64/python3.12/site-packages/torch/nn/modules/transformer.py:871: UserWarning: Attempting to use hipBLASLt on an unsupported architecture! Overriding blas backend to hipblas (Triggered internally at ../aten/src/ATen/Context.cpp:296.)\n", + " return torch._transformer_encoder_layer_fwd(\n", + "/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" + ] + }, + { + "data": { + "text/plain": [ + "0.0005554668023250997" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ + "def evaluate():\n", + " model.eval()\n", + " test_loss = 0\n", + " with torch.no_grad():\n", + " batch_src, batch_labels, batch_padding_mask = map(lambda x: x.to(device), mkbatch(BSZ))\n", + " output = model(batch_src, batch_padding_mask)\n", + " loss = criterion(output.squeeze(1), batch_labels)\n", + " return loss.item()\n", + "\n", "evaluate()" ] }, @@ -1476,7 +690,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "execution_state": "idle", "metadata": {}, "outputs": [], @@ -1496,32 +710,122 @@ }, { "cell_type": "code", - "execution_count": null, - "execution_state": "idle", - "metadata": {}, - "outputs": [], - "source": [ - "def tune_evaluate():\n", - " model.eval()\n", - " test_loss = 0\n", - " with torch.no_grad():\n", - " batch_src, batch_labels, batch_padding_mask = mktunebatch(BSZ)\n", - " output = model(batch_src, batch_padding_mask)\n", - " loss = criterion(output.squeeze(1), batch_labels)\n", - " return loss.item()" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "execution_count": 15, "execution_state": "idle", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 0/100 \t Train Err: 0.4553\n", + "Epoch 1/100 \t Train Err: 0.2545\n", + "Epoch 2/100 \t Train Err: 0.2368\n", + "Epoch 3/100 \t Train Err: 0.2138\n", + "Epoch 4/100 \t Train Err: 0.1898\n", + "Epoch 5/100 \t Train Err: 0.1931\n", + "Epoch 6/100 \t Train Err: 0.1948\n", + "Epoch 7/100 \t Train Err: 0.1847\n", + "Epoch 8/100 \t Train Err: 0.1638\n", + "Epoch 9/100 \t Train Err: 0.1490\n", + "Epoch 10/100 \t Train Err: 0.1457\n", + "Epoch 11/100 \t Train Err: 0.1509\n", + "Epoch 12/100 \t Train Err: 0.1537\n", + "Epoch 13/100 \t Train Err: 0.1472\n", + "Epoch 14/100 \t Train Err: 0.1369\n", + "Epoch 15/100 \t Train Err: 0.1304\n", + "Epoch 16/100 \t Train Err: 0.1257\n", + "Epoch 17/100 \t Train Err: 0.1201\n", + "Epoch 18/100 \t Train Err: 0.1160\n", + "Epoch 19/100 \t Train Err: 0.1064\n", + "Epoch 20/100 \t Train Err: 0.1026\n", + "Epoch 21/100 \t Train Err: 0.0964\n", + "Epoch 22/100 \t Train Err: 0.1165\n", + "Epoch 23/100 \t Train Err: 0.0990\n", + "Epoch 24/100 \t Train Err: 0.0691\n", + "Epoch 25/100 \t Train Err: 0.0633\n", + "Epoch 26/100 \t Train Err: 0.0552\n", + "Epoch 27/100 \t Train Err: 0.0505\n", + "Epoch 28/100 \t Train Err: 0.0429\n", + "Epoch 29/100 \t Train Err: 0.0376\n", + "Epoch 30/100 \t Train Err: 0.0309\n", + "Epoch 31/100 \t Train Err: 0.0252\n", + "Epoch 32/100 \t Train Err: 0.0233\n", + "Epoch 33/100 \t Train Err: 0.0219\n", + "Epoch 34/100 \t Train Err: 0.0196\n", + "Epoch 35/100 \t Train Err: 0.0186\n", + "Epoch 36/100 \t Train Err: 0.0181\n", + "Epoch 37/100 \t Train Err: 0.0189\n", + "Epoch 38/100 \t Train Err: 0.0174\n", + "Epoch 39/100 \t Train Err: 0.0141\n", + "Epoch 40/100 \t Train Err: 0.0138\n", + "Epoch 41/100 \t Train Err: 0.0136\n", + "Epoch 42/100 \t Train Err: 0.0124\n", + "Epoch 43/100 \t Train Err: 0.0121\n", + "Epoch 44/100 \t Train Err: 0.0109\n", + "Epoch 45/100 \t Train Err: 0.0107\n", + "Epoch 46/100 \t Train Err: 0.0105\n", + "Epoch 47/100 \t Train Err: 0.0103\n", + "Epoch 48/100 \t Train Err: 0.0088\n", + "Epoch 49/100 \t Train Err: 0.0089\n", + "Epoch 50/100 \t Train Err: 0.0092\n", + "Epoch 51/100 \t Train Err: 0.0078\n", + "Epoch 52/100 \t Train Err: 0.0075\n", + "Epoch 53/100 \t Train Err: 0.0068\n", + "Epoch 54/100 \t Train Err: 0.0066\n", + "Epoch 55/100 \t Train Err: 0.0065\n", + "Epoch 56/100 \t Train Err: 0.0055\n", + "Epoch 57/100 \t Train Err: 0.0056\n", + "Epoch 58/100 \t Train Err: 0.0052\n", + "Epoch 59/100 \t Train Err: 0.0055\n", + "Epoch 60/100 \t Train Err: 0.0048\n", + "Epoch 61/100 \t Train Err: 0.0050\n", + "Epoch 62/100 \t Train Err: 0.0049\n", + "Epoch 63/100 \t Train Err: 0.0051\n", + "Epoch 64/100 \t Train Err: 0.0047\n", + "Epoch 65/100 \t Train Err: 0.0045\n", + "Epoch 66/100 \t Train Err: 0.0041\n", + "Epoch 67/100 \t Train Err: 0.0038\n", + "Epoch 68/100 \t Train Err: 0.0036\n", + "Epoch 69/100 \t Train Err: 0.0035\n", + "Epoch 70/100 \t Train Err: 0.0035\n", + "Epoch 71/100 \t Train Err: 0.0032\n", + "Epoch 72/100 \t Train Err: 0.0032\n", + "Epoch 73/100 \t Train Err: 0.0030\n", + "Epoch 74/100 \t Train Err: 0.0031\n", + "Epoch 75/100 \t Train Err: 0.0026\n", + "Epoch 76/100 \t Train Err: 0.0030\n", + "Epoch 77/100 \t Train Err: 0.0024\n", + "Epoch 78/100 \t Train Err: 0.0026\n", + "Epoch 79/100 \t Train Err: 0.0028\n", + "Epoch 80/100 \t Train Err: 0.0026\n", + "Epoch 81/100 \t Train Err: 0.0023\n", + "Epoch 82/100 \t Train Err: 0.0022\n", + "Epoch 83/100 \t Train Err: 0.0022\n", + "Epoch 84/100 \t Train Err: 0.0021\n", + "Epoch 85/100 \t Train Err: 0.0023\n", + "Epoch 86/100 \t Train Err: 0.0023\n", + "Epoch 87/100 \t Train Err: 0.0020\n", + "Epoch 88/100 \t Train Err: 0.0020\n", + "Epoch 89/100 \t Train Err: 0.0021\n", + "Epoch 90/100 \t Train Err: 0.0020\n", + "Epoch 91/100 \t Train Err: 0.0019\n", + "Epoch 92/100 \t Train Err: 0.0017\n", + "Epoch 93/100 \t Train Err: 0.0019\n", + "Epoch 94/100 \t Train Err: 0.0019\n", + "Epoch 95/100 \t Train Err: 0.0015\n", + "Epoch 96/100 \t Train Err: 0.0016\n", + "Epoch 97/100 \t Train Err: 0.0017\n", + "Epoch 98/100 \t Train Err: 0.0015\n", + "Epoch 99/100 \t Train Err: 0.0015\n" + ] + } + ], "source": [ "for epoch in range(N_TUNE_EPOCHS):\n", " model.train()\n", " train_loss = 0\n", - " batch_src, batch_labels, batch_padding_mask = mktunebatch(BSZ)\n", + " batch_src, batch_labels, batch_padding_mask = map(lambda x: x.to(device), mktunebatch(BSZ))\n", " optimizer.zero_grad()\n", " output = model(batch_src, batch_padding_mask)\n", " loss = criterion(output.squeeze(1), batch_labels)\n", @@ -1540,10 +844,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "execution_state": "idle", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHgCAYAAABZ+0ykAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCC0lEQVR4nO3deXRU9f3/8dckYZJAFpaQQCCsoih7g0BABTTIJlaLgpRKxBVQxPLTKlpB7ZeCuBQFBaXiziJWqVLBYsQFyhoMoCKuLIoJIJCELYHM5/fHZSaMAUxgZm5y83ycc8/M3Ll35j23al79bNdljDECAABwiDC7CwAAAAgkwg0AAHAUwg0AAHAUwg0AAHAUwg0AAHAUwg0AAHAUwg0AAHAUwg0AAHAUwg0AAHAUwg0ABJHL5dIdd9xhdxlAlUK4ASqxl156SS6XSy6XS8uXLy/1vjFGKSkpcrlcuuKKK/zeO3DggCZMmKDWrVurRo0aqlOnjtq3b68xY8Zo586dvuMeeugh33ecbMvJyQnJbz2V09U2YsQIW2sDYI8IuwsAcPaioqI0Z84cXXTRRX77P/74Y/3444+KjIz023/06FFdcskl+uqrr5SRkaHRo0frwIED+uKLLzRnzhxdffXVSk5O9jtnxowZiomJKfXdNWvWDNKvKrtevXpp2LBhpfafe+65ttQDwF6EG8AB+vXrpwULFujpp59WRETJv9Zz5sxRamqq9uzZ43f8woUL9dlnn+n111/XH//4R7/3jhw5oqKiolLfcc011yghISGIv+LMnXvuufrTn/5kdxkAKgi6pQAHGDJkiH755RctXbrUt6+oqEhvvvlmqfAiSd99950kqVu3bqXei4qKUlxcXEDqat26tXr27Flqv8fjUYMGDXTNNdf49s2bN0+pqamKjY1VXFyc2rRpo6eeeiogdUhSjx491Lp1a2VlZalr166Kjo5W06ZNNXPmzFLH7tq1SzfddJOSkpIUFRWldu3a6eWXXz7p73jqqafUpk0bRUVFqW7duurTp4/WrVtX6tiFCxeqdevWioyMVKtWrbRkyRK/9wsKCnTXXXepSZMmioyMVGJionr16qX169cH7BoAVQXhBnCAJk2aKC0tTXPnzvXtW7x4sfLy8nTdddeVOr5x48aSpFdeeUXGmDJ9x969e7Vnzx6/bf/+/ac9Z/Dgwfrkk09KjctZvny5du7c6att6dKlGjJkiGrVqqVHH31UkydPVo8ePbRixYoy1XbkyJFSte3Zs6dUC9S+ffvUr18/paamasqUKWrYsKFGjhyp2bNn+445fPiwevTooVdffVVDhw7VY489pvj4eN1www2lwtZNN92ku+66SykpKXr00Ud13333KSoqSqtWrSr1e0eNGqXrrrtOU6ZM0ZEjRzRw4ED98ssvvmNGjBihGTNmaODAgXr22Wd19913Kzo6Wps3by7TNQBwAgOg0nrxxReNJLN27Vozffp0Exsbaw4dOmSMMebaa681PXv2NMYY07hxY9O/f3/feYcOHTLnnXeekWQaN25sbrjhBvPCCy+Y3NzcUt8xYcIEI+mk23nnnXfa+rZs2WIkmWnTpvntHzVqlImJifHVOmbMGBMXF2eOHTtW7mtwqtokmblz5/qO6969u5FknnjiCd++wsJC0759e5OYmGiKioqMMcZMnTrVSDKvvfaa77iioiKTlpZmYmJiTH5+vjHGmA8//NBIMnfeeWepmjwej199brfbfPvtt759GzZsKHVd4uPjze23317u3w+gNFpuAIcYNGiQDh8+rEWLFqmgoECLFi06aZeUJEVHR2v16tW65557pOOzrm666SbVr19fo0ePVmFhYalz/vWvf2np0qV+24svvnjams4991y1b99e8+fP9+0rLi7Wm2++qQEDBig6Olo6Pij54MGDft1q5fH73/++VG1Lly4t1SUWERGh2267zffa7Xbrtttu065du5SVlSVJeu+991SvXj0NGTLEd1y1atV055136sCBA/r4449918PlcmnChAml6nG5XH6v09PT1bx5c9/rtm3bKi4uTt9//71vX82aNbV69Wq/mWoAzgwDigGHqFu3rtLT0zVnzhwdOnRIxcXFfmNafi0+Pl5TpkzRlClTtG3bNmVmZurxxx/X9OnTFR8fr//7v//zO/6SSy45owHFgwcP1v3336+ffvpJDRo00EcffaRdu3Zp8ODBvmNGjRqlN954Q3379lWDBg10+eWXa9CgQerTp0+ZvqNhw4ZKT0//zeOSk5NVo0YNv33eGVVbt25Vly5dtG3bNrVo0UJhYf7/3+/888+XJG3btk06Pm4pOTlZtWvX/s3vbdSoUal9tWrV0r59+3yvp0yZooyMDKWkpCg1NVX9+vXTsGHD1KxZs9/8fAD+aLkBHOSPf/yjFi9erJkzZ6pv375lnqbduHFj3XjjjVqxYoVq1qyp119/PWA1DR48WMYYLViwQJL0xhtvKD4+3i+4JCYmKjs7W++8846uvPJKLVu2TH379lVGRkbA6rBTeHj4SfefON5p0KBB+v777zVt2jQlJyfrscceU6tWrbR48eIQVgo4A+EGcJCrr75aYWFhWrVq1Sm7pE6nVq1aat68uX7++eeA1dS0aVN16tRJ8+fP17Fjx/TWW2/pqquuKrX2jtvt1oABA/Tss8/qu+++02233aZXXnlF3377bcBq2blzpw4ePOi37+uvv5aOD8rW8aD3zTffyOPx+B331Vdf+d6XpObNm2vnzp3au3dvwOqrX7++Ro0apYULF+qHH35QnTp1NHHixIB9PlBVEG4AB4mJidGMGTP00EMPacCAAac8bsOGDaXWvtHxLpcvv/xS5513XkDrGjx4sFatWqXZs2drz549fl1SkvxmDUlSWFiY2rZtK0knHf9zpo4dO6bnnnvO97qoqEjPPfec6tatq9TUVOn4mkE5OTl+44SOHTumadOmKSYmRt27d5ckDRw4UMYYPfzww6W+p6wz0LyKi4uVl5fnty8xMVHJyckB/f1AVcGYG8BhytKVs3TpUk2YMEFXXnmlunTpopiYGH3//feaPXu2CgsL9dBDD5U658033zzpCsW9evVSUlLSab9v0KBBuvvuu3X33Xerdu3apcbH3Hzzzdq7d68uvfRSNWzYUNu2bdO0adPUvn1731iX0/n666/12muvldqflJSkXr16+V4nJyfr0Ucf1datW3Xuuedq/vz5ys7O1vPPP69q1apJkm699VY999xzuuGGG5SVlaUmTZrozTff1IoVKzR16lTFxsZKknr27Knrr79eTz/9tL755hv16dNHHo9Hn376qXr27Fmu+0kVFBSoYcOGuuaaa9SuXTvFxMTogw8+0Nq1a/XEE0+U+XMAHGf3dC0AZ+7EqeCn8+up4N9//70ZP3686dKli0lMTDQRERGmbt26pn///ubDDz/0O/d0U8ElmWXLlpWp1m7duhlJ5uabby713ptvvmkuv/xyk5iYaNxut2nUqJG57bbbzM8///ybn3u62rp37+47rnv37qZVq1Zm3bp1Ji0tzURFRZnGjRub6dOnl/rM3NxcM3z4cJOQkGDcbrdp06aNefHF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+fbbb33HTJ482cTHx5uFCxeaDRs2mCuvvNI0bdrUHD582NbaK5uJEyeaOnXqmEWLFpkffvjBLFiwwMTExJinnnrKdwzX+sy999575oEHHjBvvfWWkWTefvttv/fLcm379Olj2rVrZ1atWmU+/fRTc84555ghQ4acdW2EmwDo1KmTuf32232vi4uLTXJyspk0aZKtdTnNrl27jCTz8ccfG2OM2b9/v6lWrZpZsGCB75jNmzcbSWblypU2Vlp5FRQUmBYtWpilS5ea7t27+8IN1zpw7r33XnPRRRed8n2Px2Pq1atnHnvsMd++/fv3m8jISDN37twQVekM/fv3NzfeeKPfvj/84Q9m6NChxnCtA+rX4aYs1/bLL780kszatWt9xyxevNi4XC7z008/nVU9dEudpaKiImVlZSk9Pd23LywsTOnp6Vq5cqWttTlNXl6eJKl27dqSpKysLB09etTv2rds2VKNGjXi2p+h22+/Xf379/e7puJaB9Q777yjjh076tprr1ViYqI6dOigWbNm+d7/4YcflJOT43et4+Pj1blzZ651OXXt2lWZmZn6+uuvJUkbNmzQ8uXL1bdvX4lrHVRlubYrV65UzZo11bFjR98x6enpCgsL0+rVq8/q+6vcjTMDbc+ePSouLlZSUpLf/qSkJH311Ve21eU0Ho9Hd911l7p166bWrVtLknJycuR2u1WzZk2/Y5OSkpSTk2NTpZXXvHnztH79eq1du7bUe1zrwPn+++81Y8YMjR07Vvfff7/Wrl2rO++8U263WxkZGb7rebL/pnCty+e+++5Tfn6+WrZsqfDwcBUXF2vixIkaOnSodPyfa3Gtg6Is1zYnJ0eJiYl+70dERKh27dpnff0JN6gUbr/9dn3++edavny53aU40o4dOzRmzBgtXbpUUVFRdpfjaB6PRx07dtTf//53SVKHDh30+eefa+bMmcrIyLC7PEd544039Prrr2vOnDlq1aqVsrOzdddddyk5OZlr7XB0S52lhIQEhYeHl5o1kpubq3r16tlWl5PccccdWrRokZYtW6aGDRv69terV09FRUXav3+/3/Fc+/LLysrSrl279Lvf/U4RERGKiIjQxx9/rKeffloRERFKSkriWgdI/fr1dcEFF/jtO//887V9+3bp+D/XOn5tT8S1Lr977rlH9913n6677jq1adNG119/vf785z9r0qRJEtc6qMpybevVq6ddu3b5vX/s2DHt3bv3rK8/4eYsud1upaamKjMz07fP4/EoMzNTaWlpttZW2RljdMcdd+jtt9/Whx9+qKZNm/q9n5qaqmrVqvld+y1btmj79u1c+3K67LLLtGnTJmVnZ/u2jh07aujQob7nXOvA6NatW6klDb7++ms1btxYktS0aVPVq1fP71rn5+dr9erVXOtyOnTokMLC/P/MhYeHy+PxSFzroCrLtU1LS9P+/fuVlZXlO+bDDz+Ux+NR586dz66AsxqODGOOTwWPjIw0L730kvnyyy/NrbfeamrWrGlycnLsLq1SGzlypImPjzcfffSR+fnnn33boUOHfMeMGDHCNGrUyHz44Ydm3bp1Ji0tzaSlpdlat1OcOFvKcK0DZs2aNSYiIsJMnDjRfPPNN+b111831atXN6+99prvmMmTJ5uaNWuaf//732bjxo3m97//PdOTz0BGRoZp0KCBbyr4W2+9ZRISEsxf/vIX3zFc6zNXUFBgPvvsM/PZZ58ZSebJJ580n332mdm2bZsxZby2ffr0MR06dDCrV682y5cvNy1atGAqeEUybdo006hRI+N2u02nTp3MqlWr7C6p0pN00u3FF1/0HXP48GEzatQoU6tWLVO9enVz9dVXm59//tnWup3i1+GGax047777rmndurWJjIw0LVu2NM8//7zf+x6Pxzz44IMmKSnJREZGmssuu8xs2bLFtnorq/z8fDNmzBjTqFEjExUVZZo1a2YeeOABU1hY6DuGa33mli1bdtL/RmdkZBhTxmv7yy+/mCFDhpiYmBgTFxdnhg8fbgoKCs66Npc5calGAACASo4xNwAAwFEINwAAwFEINwAAwFEINwAAwFEINwAAwFEINwAAwFEINwAAwFEINwAAwFEINwCqJJfLpYULF9pdBoAgINwACLkbbrhBLper1NanTx+7SwPgABF2FwCgaurTp49efPFFv32RkZG21QPAOWi5AWCLyMhI1atXz2+rVauWdLzLaMaMGerbt6+io6PVrFkzvfnmm37nb9q0SZdeeqmio6NVp04d3XrrrTpw4IDfMbNnz1arVq0UGRmp+vXr64477vB7f8+ePbr66qtVvXp1tWjRQu+8847vvX379mno0KGqW7euoqOj1aJFi1JhDEDFRLgBUCE9+OCDGjhwoDZs2KChQ4fquuuu0+bNmyVJBw8eVO/evVWrVi2tXbtWCxYs0AcffOAXXmbMmKHbb79dt956qzZt2qR33nlH55xzjt93PPzwwxo0aJA2btyofv36aejQodq7d6/v+7/88kstXrxYmzdv1owZM5SQkBDiqwDgjJz1fcUBoJwyMjJMeHi4qVGjht82ceJEY4wxksyIESP8zuncubMZOXKkMcaY559/3tSqVcscOHDA9/5//vMfExYWZnJycowxxiQnJ5sHHnjglDVIMn/96199rw8cOGAkmcWLFxtjjBkwYIAZPnx4gH85gFBgzA0AW/Ts2VMzZszw21e7dm3f87S0NL/30tLSlJ2dLUnavHmz2rVrpxo1avje79atmzwej7Zs2SKXy6WdO3fqsssuO20Nbdu29T2vUaOG4uLitGvXLknSyJEjNXDgQK1fv16XX365rrrqKnXt2vUsfzWAUCDcALBFjRo1SnUTBUp0dHSZjqtWrZrfa5fLJY/HI0nq27evtm3bpvfee09Lly7VZZddpttvv12PP/54UGoGEDiMuQFQIa1atarU6/PPP1+SdP7552vDhg06ePCg7/0VK1YoLCxM5513nmJjY9WkSRNlZmaeVQ1169ZVRkaGXnvtNU2dOlXPP//8WX0egNCg5QaALQoLC5WTk+O3LyIiwjdod8GCBerYsaMuuugivf7661qzZo1eeOEFSdLQoUM1YcIEZWRk6KGHHtLu3bs1evRoXX/99UpKSpIkPfTQQxoxYoQSExPVt29fFRQUaMWKFRo9enSZ6hs/frxSU1PVqlUrFRYWatGiRb5wBaBiI9wAsMWSJUtUv359v33nnXeevvrqK+n4TKZ58+Zp1KhRql+/vubOnasLLrhAklS9enW9//77GjNmjC688EJVr15dAwcO1JNPPun7rIyMDB05ckT/+Mc/dPfddyshIUHXXHNNmetzu90aN26ctm7dqujoaF188cWaN29ewH4/gOBxGWvWAABUGC6XS2+//bauuuoqu0sBUAkx5gYAADgK4QYAADgKY24AVDj0lgM4G7TcAAAARyHcAAAARyHcAAAARyHcAAAARyHcAAAARyHcAAAARyHcAAAARyHcAAAAR/n/66M0wFecaLoAAAAASUVORK5CYII=", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.suptitle('MSE vs Epochs')\n", "plt.plot(tune_train_err, label='Train', color='blue')\n", @@ -1554,22 +869,89 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "execution_state": "idle", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "0.001733972690999508" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ + "def tune_evaluate():\n", + " model.eval()\n", + " test_loss = 0\n", + " with torch.no_grad():\n", + " batch_src, batch_labels, batch_padding_mask = map(lambda x: x.to(device), mktunebatch(BSZ))\n", + " output = model(batch_src, batch_padding_mask)\n", + " loss = criterion(output.squeeze(1), batch_labels)\n", + " return loss.item()\n", + "\n", "tune_evaluate()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "execution_state": "idle", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(array([[6.0290e+03, 1.8597e+04, 8.4000e+01, ..., 0.0000e+00, 0.0000e+00,\n", + " 0.0000e+00],\n", + " [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n", + " 0.0000e+00],\n", + " [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n", + " 0.0000e+00],\n", + " ...,\n", + " [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n", + " 0.0000e+00],\n", + " [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n", + " 0.0000e+00],\n", + " [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n", + " 1.0000e+00]]),\n", + " array([1. , 1.1 , 1.2 , 1.3 , 1.4 , 1.5 , 1.6 , 1.699, 1.8 ,\n", + " 1.9 , 2. , 2.1 , 2.2 , 2.3 , 2.398, 2.5 , 2.6 , 2.7 ,\n", + " 2.8 , 2.898, 3. , 3.1 , 3.2 , 3.299, 3.398, 3.5 , 3.6 ,\n", + " 3.7 , 3.799, 3.898, 4. , 4.1 , 4.2 , 4.297, 4.4 , 4.5 ,\n", + " 4.6 , 4.7 , 4.797, 4.9 , 5. , 5.098, 5.2 , 5.3 , 5.4 ,\n", + " 5.5 , 5.598, 5.7 , 5.797, 5.9 , 6. ], dtype=float16),\n", + " array([0.9014, 0.998 , 1.094 , 1.19 , 1.287 , 1.384 , 1.48 , 1.576 ,\n", + " 1.673 , 1.77 , 1.865 , 1.962 , 2.059 , 2.156 , 2.25 , 2.348 ,\n", + " 2.445 , 2.541 , 2.637 , 2.734 , 2.83 , 2.926 , 3.023 , 3.121 ,\n", + " 3.215 , 3.312 , 3.41 , 3.504 , 3.602 , 3.7 , 3.793 , 3.89 ,\n", + " 3.988 , 4.082 , 4.18 , 4.277 , 4.375 , 4.47 , 4.566 , 4.664 ,\n", + " 4.758 , 4.855 , 4.953 , 5.05 , 5.145 , 5.242 , 5.34 , 5.434 ,\n", + " 5.53 , 5.63 , 5.723 ], dtype=float16),\n", + " <matplotlib.collections.QuadMesh at 0x7f201dae35c0>)" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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3/9+nHfeeVW9zoRdrryjoyM6Ojom6nCcxgsvvHDK840bN8bcuXOjr68vrr766sLmqlednZ2nPH/ooYeit7c39uzZE0uWLClsrno2NDQUq1evjqeeeiq+973vFT1O3Wpqaorzzz+/6DHq3iOPPBJtbW3x9NNPj/zsggsuqPp1fGejzg0MDET8xQ3yKM6JEydi8+bNcfz48Vi5cmXR49Strq6uuOmmm+L6668vepS69vrrr8f8+fPjwgsvjNWrV8dbb71V9Eh16Re/+EVcccUVccstt8TcuXPj0ksvjaeeeqrq15nwG7ExeQwPD8e6deti1apVsXTp0qLHqVsHDhyIlStXxp///Oc455xzYuvWrXHJJZcUPVZd2rx5c7z88suxd+/eokepaytWrIiNGzfGokWL4siRI7F+/fq46qqr4uDBg9Hc3Fz0eHXlD3/4Q/T29sa9994b3/3ud2Pv3r1xzz33xPTp02PNmjWjfh2xUce6urri4MGDPgst2KJFi2L//v0xMDAQP/vZz2LNmjWxa9cuwTHB+vv7Y+3atbFjx444++yzix6nrv3lR+7Lli2LFStWRHt7e/z0pz+NO++8s9DZ6s3w8HBcccUV8fDDD0dExKWXXhoHDx6MH/3oR1XFho9R6tRdd90Vzz//fLz44ouxYMGCosepa9OnT4+LLrooLr/88ujp6Ynly5fHo48+WvRYdaevry/ee++9uOyyy6KpqSmamppi165d8dhjj0VTU1OcOHGi6BHr1rnnnhsXX3xxHDp0qOhR6s68efM+8T8+n//856v+WMvORp2pVCpx9913x9atW2Pnzp1j+qIPuYaHh6NcLhc9Rt257rrr4sCBA6f87I477ojFixfH/fffH42NjYXNVu+GhobijTfeiG984xtFj1J3Vq1a9YnLI/z+97+P9vb2ql5nwmJjaGjolCp98803Y//+/TFr1qxYuHDhRI1R97q6umLTpk3x3HPPRXNzc7z77rsREdHa2hozZswoery6093dHR0dHbFw4cI4duxYbNq0KXbu3Bnbt28verS609zc/InvLs2cOTNmz57tO00T7L777ovOzs5ob2+Pw4cPxwMPPBCNjY1x2223FT1a3fnOd74TV155ZTz88MPxta99LV566aV48skn48knn6zuhSoT5MUXX6xExCcea9asmagR+M87/P7Vx9NPP130aHXpm9/8ZqW9vb0yffr0ypw5cyrXXXdd5Ve/+lXRY3HSl7/85cratWuLHqPu3HrrrZV58+ZVpk+fXvnc5z5XufXWWyuHDh0qeqy69ctf/rKydOnSSqlUqixevLjy5JNPVv0abjEPAKTyBVEAIJXYAABSiQ0AIJXYAABSiQ0AIJXYAABSiQ0AIJXYAABSiQ0AIJXYAABSiQ0AIJXYAABS/T/VxjQRzeYx5wAAAABJRU5ErkJggg==", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "batch_src, batch_labels, batch_padding_mask = mktunebatch(BSZ)\n", + "batch_src, batch_labels, batch_padding_mask = map(lambda x: x.to(device), mktunebatch(BSZ))\n", "model.eval()\n", "with torch.no_grad():\n", " output = model(batch_src, batch_padding_mask)\n", @@ -1589,68 +971,57 @@ }, { "cell_type": "code", - "execution_count": null, - "execution_state": "idle", - "metadata": {}, - "outputs": [], - "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())" - ] - }, - { - "cell_type": "code", - "execution_count": 14, + "execution_count": 27, "execution_state": "idle", "metadata": {}, "outputs": [ { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.20130713284015656\n" + ] + }, + { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHgCAYAAABZ+0ykAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABPsklEQVR4nO3dd3hUZf7+8XtCSAGSkFCSIKGX0BUQCM1CE1ABURFQUBF/KCCsnbWAohusq1/ZRViaigEFBVykCoKr9CbVAEqH0ElIgADJ+f3xkIEhEBKY5Ewm79d1zTVzSmY+c8Jubp/zFIdlWZYAAAC8hI/dBQAAALgT4QYAAHgVwg0AAPAqhBsAAOBVCDcAAMCrEG4AAIBXIdwAAACvQrgBAABehXADAAC8CuEGADzcrl275HA49OGHH9pdCpAvEG4Am0ycOFEOh0OrV6+2uxQNGzZMDodDPj4+2rt3b6bjSUlJCgwMlMPh0IABA1yOHTlyRIMGDVJ0dLQCAwNVunRpNWrUSK+88oqSk5Od5z3++ONyOBxXfQQEBOTJ97yWjPBwrceIESNsrQ9AzvjaXQAAz+Hv76/Jkyfr5Zdfdtn//fffX/X848ePq2HDhkpKStKTTz6p6OhoHTt2TBs2bNCoUaP0zDPPqFixYi7vP3bs2EzvU6hQoVz4NjnXvXt3dejQIdP+2267zZZ6ANwYwg0Apw4dOlw13MTFxaljx4767rvvXPaPGzdOe/bs0W+//aamTZu6HEtKSpKfn5/LPl9fXz366KO5+A1uTv369T26PgDZw20pwMOtW7dO7du3V3BwsIoVK6ZWrVpp+fLlmc7bsGGD7rjjDgUGBqps2bJ65513NGHCBDkcDu3atStbn9WjRw+tX79ef/zxh3NfQkKCFi1apB49emQ6/88//1ShQoXUpEmTTMeCg4Pdcrvp/PnzCgsL0xNPPJHpWFJSkgICAvTiiy8693322WeqVauWihQpotDQUDVs2FBxcXE3XUeGChUq6N5779X8+fN16623KiAgQDVr1rxq69Zff/2lhx56SGFhYSpSpIiaNGmiH3/8MdN5Z8+e1bBhw1StWjUFBAQoMjJSDzzwgP78889M544ZM0aVK1eWv7+/br/9dq1atcrleEJCgp544gmVLVtW/v7+ioyMVKdOnbL9bwDwBrTcAB5s8+bNatGihYKDg/Xyyy+rcOHCGj16tO68804tWbJEjRs3liTt379fd911lxwOh4YMGaKiRYtq7Nix8vf3z9HntWzZUmXLllVcXJzefvttSdI333yjYsWKqWPHjpnOL1++vNLS0vTVV1+pd+/e2fqMo0ePZtrn5+en4ODgq55fuHBhdenSRd9//71Gjx7t0ho0Y8YMpaam6pFHHpEk/ec//9Fzzz2nBx98UIMGDdLZs2e1YcMGrVix4qrh7EqnT5++an3FixeXr++l/7vcvn27unXrpn79+ql3796aMGGCHnroIc2dO1dt2rSRJB06dEhNmzbV6dOn9dxzz6lEiRL64osvdP/992vatGnq0qWLJCktLU333nuvFi5cqEceeUSDBg3SqVOntGDBAm3atEmVK1d2fm5cXJxOnTql//f//p8cDofef/99PfDAA/rrr79UuHBhSVLXrl21efNmDRw4UBUqVNDhw4e1YMEC7dmzRxUqVLjuNQC8ggXAFhMmTLAkWatWrbrmOZ07d7b8/PysP//807nvwIEDVlBQkNWyZUvnvoEDB1oOh8Nat26dc9+xY8essLAwS5K1c+fOLGsZOnSoJck6cuSI9eKLL1pVqlRxHrv99tutJ554wrIsy5Jk9e/f33ksISHBKlWqlCXJio6Otvr162fFxcVZJ0+ezPQZvXv3tiRd9dGuXbss65s3b54lyfrvf//rsr9Dhw5WpUqVnNudOnWyatWqleV7Xc3OnTuvWZska9myZc5zy5cvb0myvvvuO+e+xMREKzIy0rrtttuc+wYPHmxJsv73v/859506dcqqWLGiVaFCBSstLc2yLMsaP368Jcn6+OOPM9WVnp7uUl+JEiWs48ePO4/PnDnT5bqcOHHCkmR98MEHOb4GgDfhthTgodLS0jR//nx17txZlSpVcu6PjIxUjx499OuvvyopKUmSNHfuXMXExOjWW291nhcWFqaePXvm+HN79OihHTt2aNWqVc7na7V6hIeH6/fff1e/fv104sQJff755+rRo4dKly6t4cOHy+ShSwICArRgwYJMj+uNRrr77rtVsmRJffPNN859J06c0IIFC9StWzfnvuLFi2vfvn2ZbtVk19NPP33V+mrWrOlyXpkyZZwtL7p4C65Xr15at26dEhISJEmzZ89Wo0aN1Lx5c+d5xYoV09NPP61du3Zpy5YtkqTvvvtOJUuW1MCBAzPV43A4XLa7deum0NBQ53aLFi2ki7e/JCkwMFB+fn5avHixTpw4cUPXAPAG3JYCPNSRI0d0+vRpVa9ePdOxGjVqKD09XXv37lWtWrW0e/duxcTEZDqvSpUqOf7c2267TdHR0YqLi1Px4sUVERGhu++++5rnR0ZGatSoUfr3v/+t7du3a968eXrvvff05ptvKjIyUk899ZTz3EKFCql169Y5rsnX11ddu3ZVXFycUlNT5e/vr++//17nz593CTevvPKKfvrpJzVq1EhVqlRR27Zt1aNHDzVr1ixbn1O1atVs1VelSpVMwaNatWrSxWHlERER2r17t/O24eVq1KghSdq9e7dq166tP//8U9WrV3e57XUt5cqVc9nOCDoZQcbf31/vvfeeXnjhBYWHh6tJkya699571atXL0VERFz3/QFvQcsNgEx69Oihb775RnFxcerWrZt8fK7/fxUOh0PVqlXTwIED9csvv8jHx0dff/2122p65JFHdOrUKc2ZM0eS9O233yo6Olr16tVznlOjRg3Fx8drypQpat68ub777js1b95cQ4cOdVsddrrWkPnLW8gGDx6sbdu2KTY2VgEBAXrjjTdUo0YNrVu3Lg8rBexFuAE8VKlSpVSkSBHFx8dnOvbHH3/Ix8dHUVFR0sWOvTt27Mh03tX2ZUePHj108OBBbdu2LVsdca9UqVIlhYaG6uDBgzf0+VfTsmVLRUZG6ptvvtHRo0e1aNEil1abDEWLFlW3bt00YcIE7dmzRx07dtS7776rs2fPuq2WHTt2ZLrltm3bNuniaCpd/J1c63eXcVySKleurPj4eJ0/f95t9VWuXFkvvPCC5s+fr02bNuncuXP66KOP3Pb+gKcj3AAeqlChQmrbtq1mzpzpMoz30KFDiouLU/PmzZ0jjNq1a6dly5Zp/fr1zvOOHz9+wy0nlStX1ieffKLY2Fg1atTomuetWLFCKSkpmfavXLlSx44du+ottRvl4+OjBx98UP/973/11Vdf6cKFC5nCzbFjx1y2/fz8VLNmTVmW5dbwcODAAU2fPt25nZSUpC+//FK33nqr8/ZPhw4dtHLlSi1btsx5XkpKisaMGaMKFSo4+/F07dpVR48e1ciRIzN9zpUB6npOnz6dKcRVrlxZQUFBSk1NzfH3BPIr+twANhs/frzmzp2baf+gQYP0zjvvaMGCBWrevLmeffZZ+fr6avTo0UpNTdX777/vPPfll1/WpEmT1KZNGw0cONA5FLxcuXI6fvx4pv4h2TFo0KDrnvPVV1/p66+/VpcuXdSgQQP5+flp69atGj9+vAICAvT3v//d5fwLFy5o0qRJV32vLl26qGjRoll+Xrdu3fTZZ59p6NChqlOnjrP/Soa2bdsqIiJCzZo1U3h4uLZu3aqRI0eqY8eOCgoKuu73Wbt27VXrq1y5skufpmrVqqlPnz5atWqVwsPDNX78eB06dEgTJkxwnvPqq69q8uTJat++vZ577jmFhYXpiy++0M6dO/Xdd985b/X16tVLX375pZ5//nmtXLlSLVq0UEpKin766Sc9++yz6tSp03XrzrBt2za1atVKDz/8sGrWrClfX19Nnz5dhw4dcg6XBwoEu4drAQVVxlDwaz327t1rWZZlrV271mrXrp1VrFgxq0iRItZdd91lLV26NNP7rVu3zmrRooXl7+9vlS1b1oqNjbX+7//+z5JkJSQkZFnL5UPBs3LlUPANGzZYL730klW/fn0rLCzM8vX1tSIjI62HHnrIWrt2rcvPZjUUPDvD1a2LQ6OjoqIsSdY777yT6fjo0aOtli1bWiVKlLD8/f2typUrWy+99JKVmJiY5ftebyh47969neeWL1/e6tixozVv3jyrbt26lr+/vxUdHW1NnTo10/v++eef1oMPPmgVL17cCggIsBo1amTNmjUr03mnT5+2XnvtNatixYpW4cKFrYiICOvBBx90TgGQUd/VhnhLsoYOHWpZlmUdPXrU6t+/vxUdHW0VLVrUCgkJsRo3bmx9++231722gDdxWDlt9wSQbwwePFijR49WcnKyx6zflN9VqFBBtWvX1qxZs+wuBcA10OcG8BJnzpxx2T527Ji++uorNW/enGADoEChzw3gJWJiYnTnnXeqRo0aOnTokMaNG6ekpCS98cYbdpcGAHmKcAN4iQ4dOmjatGkaM2aMHA6H6tevr3Hjxqlly5Z2lwYAeYo+NwAAwKvQ5wYAAHgVwg0AAPAqhBsAAOBVCDcAAMCrEG4AAIBXIdwAAACvQrgBAABehXADAAC8CuEGAAB4FcINAADwKoQbAADgVQg3AADAqxBuAACAVyHcAAAAr0K4AQAAXoVwAwAAvArhBgAAeBXCDQAA8CqEGwAA4FUINwAAwKsQbgAAgFch3AAAAK9CuAEAAF6FcAMAALwK4QYAAHgVwg0AAPAqhBsAAOBVfO0uIK+lp6frwIEDCgoKksPhsLscAACQDZZl6dSpUypTpox8fLJumylw4ebAgQOKioqyuwwAAHAD9u7dq7Jly2Z5ToELN0FBQdLFixMcHGx3OQAAIBuSkpIUFRXl/DuelQIXbjJuRQUHBxNuAADIZ7LTpYQOxQAAwKsQbgAAgFch3AAAAK9CuAEAAF6FcAMAALwK4QYAAHgVwg0AAPAqhBsAAOBVCDcAAMCrEG4AAIBXIdwAAACv4jHhZsSIEXI4HBo8ePA1z5k4caIcDofLIyAgIE/rBAAAns0jFs5ctWqVRo8erbp161733ODgYMXHxzu3s7OAVl44d046fFhKS5PKl7e7GgAACi7bW26Sk5PVs2dP/ec//1FoaOh1z3c4HIqIiHA+wsPDszw/NTVVSUlJLo/csHy5FBUltWuXK28PAACyyfZw079/f3Xs2FGtW7fO1vnJyckqX768oqKi1KlTJ23evDnL82NjYxUSEuJ8REVFualyV0WLZtSXK28PAACyydZwM2XKFK1du1axsbHZOr969eoaP368Zs6cqUmTJik9PV1NmzbVvn37rvkzQ4YMUWJiovOxd+9eN36DS4oVM88pKbny9gAAIJts63Ozd+9eDRo0SAsWLMh2p+CYmBjFxMQ4t5s2baoaNWpo9OjRGj58+FV/xt/fX/7+/m6r+1pouQEAwDPYFm7WrFmjw4cPq379+s59aWlp+uWXXzRy5EilpqaqUKFCWb5H4cKFddttt2nHjh15UHHWMlpuLlwwnYv9/OyuCACAgsm2cNOqVStt3LjRZd8TTzyh6OhovfLKK9cNNroYhjZu3KgOHTrkYqXZk9Fyo4utN2FhdlYDAEDBZVu4CQoKUu3atV32FS1aVCVKlHDu79Wrl2655RZnn5y3335bTZo0UZUqVXTy5El98MEH2r17t5566ilbvsPlChc2rTXnzpl+N4QbAADs4RHz3FzLnj175ONzqc/ziRMn1LdvXyUkJCg0NFQNGjTQ0qVLVbNmTVvrzFCsmHT8OP1uAACwk8OyLMvuIvJSUlKSQkJClJiYqODgYLe+d7ly0t690qpVUsOGbn1rAAAKtJz8/bZ9nhtvktGpmJYbAADsQ7hxo4xOxcx1AwCAfQg3bkTLDQAA9iPcuBEtNwAA2I9w40a03AAAYD/CjRvRcgMAgP0IN25Eyw0AAPYj3LgRLTcAANiPcONGtNwAAGA/wo0b0XIDAID9CDduRMsNAAD2I9y4EeEGAAD7EW7ciHADAID9CDdulLFI6alTdlcCAEDBRbhxo6Ag85yUZHclAAAUXIQbN8pouSHcAABgH8KNG2W03KSkSGlpdlcDAEDBRLhxo4yWG9GpGAAA2xBu3MjfX/LzM6+5NQUAgD0IN26WcWuKEVMAANiDcONmdCoGAMBehBs3o+UGAAB7EW7cjJYbAADsRbhxMybyAwDAXoQbN2MJBgAA7EW4cTNuSwEAYC/CjZvRoRgAAHsRbtyMlhsAAOxFuHEzOhQDAGAvwo2bhYWZ5+PH7a4EAICCiXDjZqVLm+fDh+2uBACAgolw42alSplnwg0AAPYg3LjZ5S03lmV3NQAAFDyEGzfLaLk5d45OxQAA2IFw42ZFikjFipnX3JoCACDvEW5yAZ2KAQCwD+EmFxBuAACwD+EmFxBuAACwD+EmFxBuAACwD+EmF2SEm4QEuysBAKDgIdzkgvLlzfPu3XZXAgBAwUO4yQUVKpjnXbvsrgQAgILHY8LNiBEj5HA4NHjw4CzPmzp1qqKjoxUQEKA6depo9uzZeVZjdmWEm507maUYAIC85hHhZtWqVRo9erTq1q2b5XlLly5V9+7d1adPH61bt06dO3dW586dtWnTpjyrNTsybkudPi0dPWp3NQAAFCy2h5vk5GT17NlT//nPfxQaGprluZ9++qnuuecevfTSS6pRo4aGDx+u+vXra+TIkXlWb3b4+0tlypjX3JoCACBv2R5u+vfvr44dO6p169bXPXfZsmWZzmvXrp2WLVt2zZ9JTU1VUlKSyyMvVKxonnfuzJOPAwAAF9kabqZMmaK1a9cqNjY2W+cnJCQoPDzcZV94eLgSshhzHRsbq5CQEOcjKirqpuvOjox+N3/9lScfBwAALrIt3Ozdu1eDBg3S119/rYCAgFz7nCFDhigxMdH52Lt3b6591uWqVTPP8fF58nEAAOAiX7s+eM2aNTp8+LDq16/v3JeWlqZffvlFI0eOVGpqqgoVKuTyMxERETp06JDLvkOHDikiIuKan+Pv7y9/f/9c+AZZq1nTPG/ZkucfDQBAgWZby02rVq20ceNGrV+/3vlo2LChevbsqfXr12cKNpIUExOjhQsXuuxbsGCBYmJi8rDy7KlRwzxv3cpwcAAA8pJtLTdBQUGqXbu2y76iRYuqRIkSzv29evXSLbfc4uyTM2jQIN1xxx366KOP1LFjR02ZMkWrV6/WmDFjbPkOWalaVSpUSDp1Stq/Xypb1u6KAAAoGGwfLZWVPXv26ODBg87tpk2bKi4uTmPGjFG9evU0bdo0zZgxI1NI8gR+fibg6GLrDQAAyBsOyypYN02SkpIUEhKixMREBQcH5+pnPfSQNG2aFBsrvfpqrn4UAABeLSd/vz265Sa/a97cPP/yi92VAABQcBBuctEdd5jnX3+VLlywuxoAAAoGwk0uqlNHCgkxnYrXrLG7GgAACgbCTS4qVEhq1868njjR7moAACgYCDe5rF8/8/zVV1IeLWsFAECBRrjJZXfeKVWvLqWkSP/9r93VAADg/Qg3uczhkB5+2LyeNs3uagAA8H6EmzzQtat5njtX2rXL7moAAPBuhJs8ULeu1KSJdPas9MAD0pkzdlcEAID3ItzkAYdD+uYbqWRJad06qXt36fhxu6sCAMA7EW7ySLly0rffmuHhM2eajsa7d0uJiXZXBgCAdyHc5KG77jKzFYeHSxs3ShUqSKVKSf/+t92VAQDgPQg3eaxJEzNqqlw5c7vq/Hmpf3+zgvh339ldHQAA+R/hxgbNm5tbUmlpUp8+Zt+OHdKDD5qZjHfulNLT7a4SAID8iXBjI4dDGjtW2rbtUsh54gmpUiWpcWMpOdnuCgEAyH8INx6galXp88+lxx6TihY1nY5Xr5bKlDGPQYOkhQtZWRwAgOwg3HgIX1/pyy9Na83PP0tBQWY18YMHpf/7P6l1a6lFC9PKk5ZG0AEA4FoINx6oRQtpzx5p82YzP87dd0v+/tLy5WadKl9f0yF51iy7KwUAwPMQbjxU8eJSzZpmXaqFC6Xt203rTYaDB6X77pMqV5Zef11KTTUtOgcO2Fk1AAD2c1iWZdldRF5KSkpSSEiIEhMTFRwcbHc5OZKebm5dbd8uHT0q/ec/UsZv7447pBMnzPw5Y8dKTz5pd7UAALhPTv5+E27ysT//lObMkQYOdN3v4yMVKyZFR0ujR0v16pllH2rWlAIC7KoWAIAbl5O/39yWyscqV5YGDDDz5mSoW9e08CQlSStXSo0aSTVqSA0aSK1aSfPmSS+8IB06ZGflAADkHlpuvMDWrdLLL0uvvmrmx9mzx6w8/tprZh2rq2nZ0rTi7N1rRmdt3Wr68dx9t1keQpL27zejs+6808zJAwCAXbgtlQVvDDfXYlnS7NnSrl1mFfJhw64/83FoqLmVdeaMaRU6dUrq3FkaN04KCZE2bDBD0++7T3rggbz6JgCAgo5wk4WCFG6ulJJinufMkXr1MgEmg4+PVKKEdORI9t+vb1/pk09Mi8+SJZc6NzdrZvr7AADgLoSbLBTkcHO5PXvMbaeAAOn3383trMqVpTfeMIHFx0d65RWpY0epZ08zQutqSpSQEhNdJxX09TUroPtks0dXYKD07LNSTMyl7UKF3PAlAQBeg3CTBcLN9Z0/b54LFzbPycnSO++YWZOfe848L1pkQk9CgjmnYUMpIsIMUV++/OY+PzzcDGe/996b/CIAAK9BuMkC4cZ9jh83o6/CwqS2bU2nY8syHZT37cv++/zvf9KECWYSwsu99JL07ruXQhYAoOAi3GSBcOOZzp27tGbWG29In35q9jdrJk2ZIpUta3eFAAA7Mc8N8h0/P9PXJijI9PmZNk0KDpZ++01q184sLwEAQHYQbuCRunaV1q41/W+2bJHee8/uigAA+QXhBh6rcmXpww/N63HjLg01BwAgK4QbeLSuXaUiRczQ9XXr7K4GAJAfEG7g0QIDTZ8bSZoxw+5qAAD5AeEGHq9LF/M8fbrdlQAA8gPCDTzevfeaGYs3bZJ27LC7GgCApyPcwOOFhpqVySXphx/srgYA4OkIN8gX2rQxzze7tAMAwPsRbpAvNGhgntessbsSAICnI9wgX8gIN3/9Zda0AgDgWgg3yBdCQ6VKlczrtWvtrgYA4MkIN8g3GjY0zytX2l0JAMCTEW6Qb8TEmOelS+2uBADgyWwNN6NGjVLdunUVHBys4OBgxcTEaM6cOdc8f+LEiXI4HC6PgICAPK0Z9mnWzDwvXSqlp9tdDQDAU/na+eFly5bViBEjVLVqVVmWpS+++EKdOnXSunXrVKtWrav+THBwsOLj453bDocjDyuGnW691awzdeKE9McfUs2adlcEAPBEtoab++67z2X73Xff1ahRo7R8+fJrhhuHw6GIiIg8qhCepHBhc2tq4ULpv/8l3AAArs5j+tykpaVpypQpSklJUUxG54qrSE5OVvny5RUVFaVOnTpp8+bNWb5vamqqkpKSXB7Iv7p3N89ffCFZlt3VAAA8ke3hZuPGjSpWrJj8/f3Vr18/TZ8+XTWv8Z/k1atX1/jx4zVz5kxNmjRJ6enpatq0qfbt23fN94+NjVVISIjzERUVlYvfBrntoYfMSuFbt0rvvEPAAQBk5rAse/88nDt3Tnv27FFiYqKmTZumsWPHasmSJdcMOJc7f/68atSooe7du2v48OFXPSc1NVWpqanO7aSkJEVFRSkxMVHBwcFu/S7IG++9J736qnndqpVUooQJPQ8+aHdlAIDckpSUpJCQkGz9/bY93FypdevWqly5skaPHp2t8x966CH5+vpq8uTJ2To/JxcHnuuzz6TnnnPd9+mnmfcBALxDTv5+235b6krp6ekuLS1ZSUtL08aNGxUZGZnrdcGzDBxoFtEcOVLq18/se/55adkyuysDANjN1tFSQ4YMUfv27VWuXDmdOnVKcXFxWrx4sebNmydJ6tWrl2655RbFxsZKkt5++201adJEVapU0cmTJ/XBBx9o9+7deuqpp+z8GrBJ48bmYVlmePg330gdOkhz55r9AICCydZwc/jwYfXq1UsHDx5USEiI6tatq3nz5qlNmzaSpD179sjH51Lj0okTJ9S3b18lJCQoNDRUDRo00NKlS7PVPwfey+GQxoyR9u41E/y1bi3NmiXdcYfdlQEA7OBxfW5yG31uvFdystSpk7RokRQQIM2YIbVrZ3dVAAB3yNd9boAbVayYabHp2FE6e1a6/37pww+l3bvtrgwAkJcIN/AqgYHS99+bYeHnzkkvvSRVrCjVrm06Hv/1l90VAgByG+EGXsfPT5o8WXr5ZalKFdPhePNmafRoqVo1qWdP6Z//lPbvt7tSAEBuoM8NvN62bdKGDdLYsdLFgXjSxRD09NNS375S9eqSv7+dVQIAspKvJ/HLbYSbgm3FCmnSJGnlSvPIEB5uwk94uFmQs2hRO6sEAFyJcJMFwg0kc6tq8WJp+HDp559djxUvLtWpY/rvdOoklS9v9pcrZ/YDAPIe4SYLhBtcKTHR3J5auVI6edI8rqVSJalJExNypk+Xzp83o7IqVZJKlZKCgqT33zctP6+9Zjoz//ST1Ly5WQPrSufPS/PnS/XqSWXL5urXzHV790obN0pt2kiFC9tdDQBvQ7jJAuEGWblwwbTkJCZKW7aY2Y4vXDAhZONGKS0tZ+/n52dGbRUuLJUsmfl4UpKUkmImIgwPN89XU6qUOe/CBdOydOzY9WspUsSErKNHpZAQs+/kScnHR7r7bnNs9mzz3XIiNFRKTzfXKINlSYcOmecyZcw5GRo2NOHu9GmzHRJigtzJk5Kvr+tQ/cKFpVq1zL5OnaT1683ntGkj/fCD6RAeGWnmMMrmKi2ZVK1qZrQ+etR83r33SqdOmfmR0tMvnedwmBC7Z4/UsqX5PS5Y4HrdT56UvvvOhNM33zQd2CVp+3YT9u6++8ZqBJAZ4SYLhBvcqH37pHXrzB+zw4elu+4yLTU//mj+0K5aZf5I9u5tQsu0aXZXjLxUqJDUvbt0223S669LZ86Y1sDbb7e7MsA7EG6yQLhBbklJMbMkh4eb7X37zH/ZV6sm/fmn+S//Kzkc5vi+febnryajdaBOHdPq8fPPprUhq9tYliWtXi39/ru5bbZ0qfms9u2l48dN8Dp/3rSOVKqU/e+YmmrCXOHC0j33uN5+KlbMfPfPP780n9DKldKaNaZFo0EDs2/FCmnXLvM6KMgsl5ExUm3HDlP39dStazp+59Tp0+Y2YGioaU3atcuEUsmE1YzfnWSu008/ubbmtGxpWqYuV6qUFB9v3vdKgwdLH31kWssA3BzCTRYIN0DeSk42t8AybrmlpZkg5+9vgkNg4KVzLcvchgoONvMQhYSYAHX4sAkVp06Z2acjI699Cy879QQEmFtiGbfTfH2vfduwWDHpyBETUEqVuvb7/vqr9O675lbm5erUMcEnIuLG6gVgEG6yQLgBkJsGDpQmTjQhKkPdutKSJaa/FIAbw9pSAGCTzz4zLUy//WZacsLCzCSSDz9sWooA5D7CDQDkgqZNpb//3fSRCggwI60aNzZLgQDIXYQbAMhFdeua0VOS6bz8yit2VwR4P8INAOSyV1+VXnjBvF648NKcPwByB+EGAHJZoULSBx+YpTzOnjVDzAHkHsINAOQBh8PMKyRJ//wnnYuB3ES4AYA88vzzpnPx4sVmYkYAuYNwAwB5pHx56eWXzesXXzRLNABwP8INAOShV16RoqLM4qDjxtldDeCdCDcAkIeKFLnUevOvf9H3BsgNhBsAyGO9epk1q/74Q1q0yO5qAO9DuAGAPBYcLPXubV6PHGl3NYD3IdwAgA369zfPP/wgHTxodzWAdyHcAIANatSQbr9dSk+X5s+3uxrAu2Q73HTo0EGJiYnO7REjRujkyZPO7WPHjqlmzZrurxAAvFTbtuaZcAO4V7bDzbx585Samurc/sc//qHjx487ty9cuKD4+Hj3VwgAXqpNG/P800+mBQeAe2Q73FhXjFe8chsAkDMxMVLx4tLhw6w3BbgTfW4AwCZ+ftJjj5nXY8bYXQ3gPbIdbhwOhxwOR6Z9AIAb17evef7hB+mybo0AboJvdk+0LEuPP/64/P39JUlnz55Vv379VLRoUUly6Y8DAMieOnWk6tWl+Hhp7lypWze7KwLyv2yHm94ZM05d9Oijj2Y6p1evXu6pCgAKkM6dpffekx55RAoKkjp0sLsiIH9zWAWsZ3BSUpJCQkKUmJio4OBgu8sBAK1ZIzVsaF5Xrixt3y5x1x9wlZO/3zfdoXj37t3asmWL0hnHCAA3pEEDafZs8/rPP82aUwBuXLbDzfjx4/Xxxx+77Hv66adVqVIl1alTR7Vr19bevXtzo0YA8Hrt20v33GNe16wpbdhgd0VA/pXtcDNmzBiFhoY6t+fOnasJEyboyy+/1KpVq1S8eHG99dZbuVUnAHi9Bx+89Pq11+ysBMjfsh1utm/froYZN4UlzZw5U506dVLPnj1Vv359/eMf/9DChQtzq04A8HqPPy69/755PWeOmdwPQM5lO9ycOXPGpQPP0qVL1bJlS+d2pUqVlJCQ4P4KAaCAKFRIeukls6BmWpoZFn7qlN1VAflPtsNN+fLltWbNGknS0aNHtXnzZjVr1sx5PCEhQSEhIblTJQAUIO++KxUpIi1eLI0caXc1QP6T7XDTu3dv9e/fX8OHD9dDDz2k6OhoNWjQwHl86dKlql27dm7VCQAFRps20iefmNdxcXZXA+Q/2Q43L7/8svr27avvv/9eAQEBmjp1qsvx3377Td27d8+NGgGgwHnwQbP21KZN0saNdlcD5C/ZDjc+Pj56++23tW7dOs2ZM0c1atRwOT516lT16dMnRx8+atQo1a1bV8HBwQoODlZMTIzmzJmT5c9MnTpV0dHRCggIUJ06dTQ7Y3IIAPAioaGXZiqm9QbIGVtXBS9btqxGjBihNWvWaPXq1br77rvVqVMnbd68+arnL126VN27d1efPn20bt06de7cWZ07d9amTZvyvHYAyG09epjnyZMl5kkFsi/byy9UqlQpW2/4119/3VRBYWFh+uCDD67aCtStWzelpKRo1qxZzn1NmjTRrbfeqs8//zxb78/yCwDyizNnpPBwM2Jq3DjpySftrgiwT07+fmd74cxdu3apfPny6tGjh0qXLu2OOl2kpaVp6tSpSklJUUxMzFXPWbZsmZ5//nmXfe3atdOMGTOu+b6pqakuK5YnJSW5sWoAyD2BgWYyv1dflf72N7PAZliY3VUBni/b4eabb75xLsHQvn17Pfnkk+rQoYN8fG7uztbGjRsVExOjs2fPqlixYpo+fbpq1qx51XMTEhIUHh7usi88PDzL+XViY2OZORlAvvXii6bPzYYN0ujR0pAhdlcEeL5sJ5OHHnpIc+bM0Y4dO9SgQQP97W9/U1RUlF599VVt3779hguoXr261q9frxUrVuiZZ55R7969tWXLlht+vysNGTJEiYmJzgfrXwHITwoVMgFHkj79VDp50u6KAM+X42aXW265Ra+99pq2b9+uuLg4rVixQtHR0Tpx4sQNFeDn56cqVaqoQYMGio2NVb169fTpp59e9dyIiAgdOnTIZd+hQ4cUERFxzff39/d3jsbKeABAftKtm1S1qnTokJnBGEDWbuie0tmzZzVp0iS99dZbWrFihR566CEVKVLELQWlp6e79JG5XExMTKb1qxYsWHDNPjoA4A38/KTx483rCROkffvsrgjwbDkKNytWrNDTTz+tiIgIffzxx3rggQe0f/9+TZkyRf7+/jn+8CFDhuiXX37Rrl27tHHjRg0ZMkSLFy9Wz549JUm9evXSkMtuMA8aNEhz587VRx99pD/++EPDhg3T6tWrNWDAgBx/NgDkJ82bS3feadacGj3a7moAz5btDsW1atXS4cOH1aNHDy1ZskT16tW76Q8/fPiwevXqpYMHDyokJER169bVvHnz1KZNG0nSnj17XDosN23aVHFxcXr99df197//XVWrVtWMGTNY9gFAgTBggFlvaswY6fXXpRv4b0qgQMj2PDc+Pj4qWrSofH195XA4rnne8ePH3Vmf2zHPDYD86sIFqWJFc1tq0iTpYiM3UCDkyjw3EyZMcEdtAIAb5Osr9etnWm1GjiTcANeS7ZYbb0HLDYD87NAhKSpKOn9eWrVKatjQ7oqAvJGTv9+2ri0FAMiZ8HDp4YfN63/9y+5qAM9EuAGAfCZjgOjkydLRo3ZXA3gewg0A5DONG0sNGkipqWbWYgCuCDcAkM84HJfWmPrgA+n33+2uCPAshBsAyIceeEBq08a03rRoIe3YYXdFgOfI9lDwDM8///xV9zscDgUEBKhKlSrq1KmTwsLC3FEfAOAqHA7T56Z9ezNq6l//kv75T7urAjxDjoeC33XXXVq7dq3S0tJUvXp1SdK2bdtUqFAhRUdHKz4+Xg6HQ7/++qtq1qyZW3XfMIaCA/Ams2dLHTtKYWHSgQPMWgzvlatDwTt16qTWrVvrwIEDWrNmjdasWaN9+/apTZs26t69u/bv36+WLVvqb3/72818BwBANrRrJ91yi3T8uDRzpt3VAJ4hxy03t9xyixYsWJCpVWbz5s1q27at9u/fr7Vr16pt27Y66oFjFGm5AeBt3nhDeucdqW1bad48u6sBckeuttwkJibq8OHDmfYfOXJESUlJkqTixYvr3LlzOX1rAMANePJJ8zx/vjRqlN3VAPa7odtSTz75pKZPn659+/Zp3759mj59uvr06aPOnTtLklauXKlq1arlRr0AgCtUrChljPUYMEDav9/uigB75TjcjB49Wq1atdIjjzyi8uXLq3z58nrkkUfUqlUrff7555Kk6OhojR07NjfqBQBcxYcfSs2aSenpZsVwoCC74YUzk5OT9ddff0mSKlWqpGLFirm7tlxBnxsA3mrsWKlvX6laNWnLFqlQIbsrAtwnTxbOLFasmMLCwhQWFpZvgg0AeLOHH5ZCQ6Vt26QJE+yuBrBPjsNNenq63n77bYWEhDhvSxUvXlzDhw9Xenp67lQJALiu4GDp9dfN6+eekxYutLsiwB45nqH4tdde07hx4zRixAg1a9ZMkvTrr79q2LBhOnv2rN59993cqBMAkA0DBphQM3u29P/+n2nF8WGhHRQwOe5zU6ZMGX3++ee6//77XfbPnDlTzz77rPZ7eDd9+twA8HYpKVLZstLJk9KsWWYGYyC/y9U+N8ePH1d0dHSm/dHR0Tp+/HhO3w4A4GZFi16a+2bcOLurAfJejsNNvXr1NHLkyEz7R44cqXr16rmrLgDATejRwzzPn29WDgcKkhz3uXn//ffVsWNH/fTTT4qJiZEkLVu2THv37tXs2bNzo0YAQA7ddpsUGSkdPCh16SJNnWpadICCIMctN3fccYe2bdumLl266OTJkzp58qQeeOABxcfHq0WLFrlTJQAgR3x8pPvuM6/nzJGefdbuioC8c8OT+F1p3759evvttzVmzBh3vF2uoUMxgILiwAHpxRelyZPN9pIlUsuWdlcF3Jg8mcTvSseOHdM4eq4BgMcoU0aKi5Mee8xsz5pld0VA3mD2AwDwcm3bmufFi+2uBMgbhBsA8HJ33GGeV62SPv7Y7mqA3Ee4AQAvFxVlFtOUpBdekH791e6KgNyV7aHgDzzwQJbHT5486Y56AAC5IC5OatxYSkszq4c3b253RUDuyXa4CQkJue7xXr16uaMmAICbNWgg/e9/UtOm0rffSh99JJUoYXdVQO5w21Dw/IKh4AAKKssyIWfdOmnoUGnYMLsrArLPlqHgAADP5nBIf/+7ef3JJ1JCgt0VAbmDcAMABUiXLlL9+lJiovTSS3ZXA+QOwg0AFCCFCkmff25eT5kiHT5sd0WA+xFuAKCAuf1287hwwUzwx+0peBvCDQAUQL17m+fff5eee87uagD3ItwAQAHUp490553m9YIFZv4bwFsQbgCgAAoIMKEmKEg6edK04ADegnADAAWUr6/UsqV5PX++3dUA7kO4AYAC7N57zfMnn0hJSXZXA7gH4QYACrAnn5SqVpUOHZLeecfuagD3INwAQAHm5yf985/m9SefSFu22F0RcPMINwBQwHXsKHXoIJ0/L91/v5m9GMjPbA03sbGxuv322xUUFKTSpUurc+fOio+Pz/JnJk6cKIfD4fIICAjIs5oBwBtNmCCVKyf9+acUF3dj77F7t5kz56+/3F0dkDO2hpslS5aof//+Wr58uRYsWKDz58+rbdu2SklJyfLngoODdfDgQedj9+7deVYzAHij0qWlgQPN62+/vbH36NxZ+uwzqU0bt5YG5JjDsizL7iIyHDlyRKVLl9aSJUvUMmN84hUmTpyowYMH6+TJkzf0GTlZMh0ACpLdu6UKFczq4Vu2SNHROft5h+PSa8/5ywJvkZO/3x7V5ybx4o3esLCwLM9LTk5W+fLlFRUVpU6dOmnz5s3XPDc1NVVJSUkuDwBAZuXLS+3amWDSqZOZ3A/Ijzwm3KSnp2vw4MFq1qyZateufc3zqlevrvHjx2vmzJmaNGmS0tPT1bRpU+3bt++q58fGxiokJMT5iIqKysVvAQD525dfSlFR0rZtUs+etMAgf/KY21LPPPOM5syZo19//VVly5bN9s+dP39eNWrUUPfu3TV8+PBMx1NTU5WamurcTkpKUlRUFLelAOAa1q2TmjaVzp6VfvhBuu++7P0ct6WQm/LdbakBAwZo1qxZ+vnnn3MUbCSpcOHCuu2227Rjx46rHvf391dwcLDLAwBwbbfdJg0aZF6/+KJ06lT2fu7ycAPYydZwY1mWBgwYoOnTp2vRokWqWLFijt8jLS1NGzduVGRkZK7UCAAF0SuvSGXKmNtTGaOorsfXN7erArLH1nDTv39/TZo0SXFxcQoKClJCQoISEhJ05swZ5zm9evXSkCFDnNtvv/225s+fr7/++ktr167Vo48+qt27d+upp56y6VsAgPcJDZW++ca8/vprszzD9RQqlOtlAdlia7gZNWqUEhMTdeeddyoyMtL5+Cbjf1GS9uzZo4MHDzq3T5w4ob59+6pGjRrq0KGDkpKStHTpUtWsWdOmbwEA3ql5c6lxY+nCBemLL65//uXhhj43sJPHdCjOK8xzAwDZN26c9NRT0i23SDt2SFlNCF+8+KWlG06dkooVy7MyUQDkuw7FAADP1LOnVLastH+/mX04u7LbCRnIDYQbAMA1BQRIQ4ea16+/boaJX8tl3SXFfKmwE+EGAJClPn3MjMXnzkkvvXT1cy5cMMczEG5gJ8INACBLDof06adS4cLSwoXS2LGZzzl92nWb21KwE+EGAHBd5ctL/fqZ1337SosWuR6/MtzQcgM7EW4AANny8cdShw7m9bRprscIN/AkhBsAQLb4+krPPmtez57tOpfNleHms8+kBx7IvB/IC4QbAEC23XWX5O8v7d4tvffepf1XhpjVq6Xp06XPP8/zEgHCDQAg+4oUubSo5pAhl4aGp6Rc/fzsLNsAuBvhBgCQIyNGSF26mNdxceaZ20/wJIQbAECOOBzSY4+Z15MnS+np1w4358/naWmARLgBANyI9u2lokXNsgy//34p3Pj6up539Kgt5aGAI9wAAHIsIMB0LpakBQuk5GTzukIF1/MOH8772gDCDQDghrRta57nzTMjoySpWTPXc+bNY8QU8p7Dsi6fqcD75WTJdADAtW3fLlWrdmm7UCEpPl6qUiXzuUuXSjExeVoevExO/n7TcgMAuCFVq0qPP35p+/HHpcqVr37uJ5/kWVmAfLNxDgAAV/XJJ1JamlS9uvTKK9c+b/p0s2q4n19eVoeCinADALhhISHSl19e/7zz56WhQ6VevaQaNfKiMhRk9LkBALjVt99Ko0ZJ9eub0VIbN5rh4roYhk6etLtC5Ec5+ftNyw0AwK0eftg8MvTufSncJCbaVhYKEDoUAwBy1ZW3oR57zIyqAnIL4QYAkKvKlHHdnjTJ3LICcgvhBgCQqzp2lEqXdt13+rS0datdFcHbEW4AALmqRAkpIUG6917X/ffdJz36KCuKw/0INwCAXOdwmHluLvfnn9LXX0sTJ9pVFbwV4QYAkCeioq6+f9euvK4E3o5wAwDIE2+/Ld1/vzR3rtSgwaX99L2BuxFuAAB5okwZaeZMqV07ado0qWtXs3/FCun226VWraT0dLurhDdghmIAgC2OHpVKlXLdt2YNw8RxdawKDgDweCVLZp4D58cf7aoG3oRwAwCwzRdfSE8/LdWta7Y/+MC03IwebXdlyM+4LQUAsN3Bg1L58mb18AypqZKfn51VwZNwWwoAkK9ERkoDBrjua93ahB4gpwg3AACP8NZbUp8+UtmyZvt//5MaN2aoOHKOcAMA8AhBQdLYsdLmzdLrr0u33CLt3Ss1ayZt3253dchPCDcAAI8SHCwNHy6tXy81bCidOCENHCj99JNZowq4HsINAMAjlSwpffmlVKiQNG+e1KaNVKmSmQCwYA2FQU4RbgAAHqtGDTM8vG5dM5rqzBnpoYek3r3trgyejHADAPBof/ub9Pvvpt/NCy+YfV99Jf3yi92VwVMRbgAA+ULhwtKHH0rPPGO2n33WdEDeudPuyuBpCDcAgHzljTekgAAzqqpvX6lqVWnUKLurgich3AAA8pXISGnw4EvbaWmmFYd1qZDB1nATGxur22+/XUFBQSpdurQ6d+6s+Pj46/7c1KlTFR0drYCAANWpU0ezZ8/Ok3oBAJ5h+HDp66/NPDgZt6nuvVd68EHp9Gm7q4PdbA03S5YsUf/+/bV8+XItWLBA58+fV9u2bZWSknLNn1m6dKm6d++uPn36aN26dercubM6d+6sTZs25WntAAD7+PpKPXqY2YzffVcKCTH7v/tOiouT0tPtrhB28qiFM48cOaLSpUtryZIlatmy5VXP6datm1JSUjRr1iznviZNmujWW2/V559/ft3PYOFMAPA+8+ZJ99xzabtBAzOaqkgRO6uCO+XbhTMTExMlSWFhYdc8Z9myZWrdurXLvnbt2mnZsmVXPT81NVVJSUkuDwCAd2nXTjpyRAoMNNtr1pjOxseO2V0Z7OAx4SY9PV2DBw9Ws2bNVLt27Wuel5CQoPDwcJd94eHhSrjGnNyxsbEKCQlxPqKiotxeOwDAfiVLmtaa/v3NdlycVLGiNGWK3ZUhr3lMuOnfv782bdqkKW7+VzhkyBAlJiY6H3v37nXr+wMAPEfDhtLIkWbk1K23SqdOSU89xVw4BY1HhJsBAwZo1qxZ+vnnn1U2Y637a4iIiNChQ4dc9h06dEgRERFXPd/f31/BwcEuDwCAd+vQwdyaatlSSkmRunc3E/5lMV4FXsTWcGNZlgYMGKDp06dr0aJFqlix4nV/JiYmRgsXLnTZt2DBAsXExORipQCA/MbHx7TiSNKKFaYPzq23Sp9+ymgqb2druOnfv78mTZqkuLg4BQUFKSEhQQkJCTpz5ozznF69emnIkCHO7UGDBmnu3Ln66KOP9Mcff2jYsGFavXq1BgwYYNO3AAB4qjp1pM6dL23v2GEmAJw61c6qkNtsHQrucDiuun/ChAl6/PHHJUl33nmnKlSooIkTJzqPT506Va+//rp27dqlqlWr6v3331eHDh2y9ZkMBQeAguXQIdO5uEEDs5r4rl0m9Dz8sFSlivTII3ZXiOzIyd9vj5rnJi8QbgCg4Dp+XCpfXkpOvrRvzx6JgbSeL9/OcwMAQG4KC5OGDnXd99FHdlWD3EK4AQAUKIMGmVtRGYNsR42Stm2zuyq4E+EGAFCgFC4sTZ4sHThglmw4d07q2VNavNgMHy9YnTW8E+EGAFAgORzSv/9tblWtXi3ddZeZBPAf/5D277e7OtwMwg0AoMCqWNEsutmihVS5stn3+utmtfENG+yuDjeKcAMAKNAaNjRrUm3bJl0+H+wnn0gnT9pZGW4U4QYAgIszGs+dK730ktmeMEGqWtXMk4P8hXADAMBFwcHSu+9Kt9xito8elZ57Tjp71u7KkBOEGwAALlO4sLRkifTee2b722+lmjWln38226xL5fkINwAAXKFyZenll6Vp00wrzs6d0r33mlacwEDTCRmei3ADAMA1dO0qxcdLbdtKp09Ln31m5sX5xz/srgxZIdwAAJCFokUv3ZrK8MsvZiHOAwfsrAzXQrgBAOA6QkLMrahnn720b+1a6f337awK10K4AQAgG8qWlf71Lyk09NK+SZOklBQ7q8LVEG4AAMiByZOlzp0lX1/p2DFzu2rsWLurwuUINwAA5EC7dtL06dKiRWbY+J49Ut++ZtFNeAbCDQAAN6BFC2nVKikiwmz37Stt3253VRDhBgCAG1evnrR0qZnZeN06qUYN6fbbpQUL7K6sYCPcAABwEypWNMGmbVspLU1avVp6+mkzHw7sQbgBAOAmVapkFt1cvNhs79olPfmkGU3Fcg15j3ADAIAbOBzSHXdI//mP2f76a+mxx8ysxshbhBsAANyoTx+pV69L24MHS/36SYcP21lVwUK4AQDAjRwOaeJEad8+swCnJI0eLTVqxIR/eYVwAwCAmzkcZjXxxYulMWPM7Ma7d0uvvirNnCkdP253hd7NYVmWZXcReSkpKUkhISFKTExUcHCw3eUAAAqAiROlJ564tF2ypPTf/0pNmthZVf6Sk7/ftNwAAJDLHn3UDA9v3lyKjJSOHjXbY8dKqal2V+d9aLkBACAPbdsmVa9+aXvAAHO76pZb7KzK89FyAwCAh6pWzXV75EjTJ2fFCrsq8j6EGwAA8tjLL2fe99ZbdlTinQg3AADksTfflMaNMwttDh1q9s2ZIz37rBlV9dxzrE91M+hzAwCAzd57TxoyRLIsyc/PrEvl5yd9+qlUtKj04INSYKDdVdorJ3+/ffOsKgAAcFWvvGLCy6BBlxbcPHdOeuYZ8/qvvy618OD6CDcAAHiAAQOkM2ckf38pKEh66qlLx4YNk+rVk+6/X/KhQ8l1cVsKAAAPtHatVKaMmRcnQ9++UqFCUmio9O67ZibkgoLbUgAA5HP165vnXr2kL780rzNWHJekChXMRIDIjMYtAAA82KhRZg6cXr2kgIBL+595RvrsM/OaWY5dEW4AAPBgRYqYFcW/+ML0yblwwfTHSU83Q8Zvu82MqJo0ye5KPQfhBgCAfKRQIXN7qls3s71+vZSWJv3733ZX5jnocwMAQD7073+bUVXbtkm//CItWyYdOGA6IRd0hBsAAPKhsLBLHYybNZOWLpXatpU6dZKioswkgE8+aXeV9iDcAACQzw0fbubA2bzZPDI0bCjVrWtnZfagzw0AAPnc3XebvjcPPOC6/8MPpbFjXQNPQUC4AQDAC1SpIk2bZkZQhYSYfV99ZSb+a9BA+u9/zb6pU6U+faSzZ20tN1fZGm5++eUX3XfffSpTpowcDodmzJiR5fmLFy+Ww+HI9EhISMizmgEA8FQOh1ls88QJ6eWXL+1PTTWtOl9/LT38sDR+vGnR8Va2hpuUlBTVq1dP//rXv3L0c/Hx8Tp48KDzUbp06VyrEQCA/MbhMCuNr18v7d8v1a5t5sd59NFL52zbZmeFucvWDsXt27dX+/btc/xzpUuXVvHixXOlJgAAvEW9euZ50iQzL058/KVja9dK589LhQvbVl6uyZd9bm699VZFRkaqTZs2+u2337I8NzU1VUlJSS4PAAAKknr1pK1bpc6dL+377TepXDkzhNzb5KtwExkZqc8//1zfffedvvvuO0VFRenOO+/U2rVrr/kzsbGxCgkJcT6ioqLytGYAADyBwyF9+60JOYGBZl9CgtS+vbRpk/Tmm9Lf/ibt3Gl3pTfPYVmWZXcRkuRwODR9+nR1vjxWZsMdd9yhcuXK6auvvrrq8dTUVKVetqJYUlKSoqKisrVkOgAA3mjcOOnnn82sxn/95Xrs3nsvjazyJElJSQoJCcnW3+98P4lfo0aN9Ouvv17zuL+/v/z9/fO0JgAAPFmfPuaxerUUE2M6G2eYPdv0zTl3TqpTx84qb1y+ui11NevXr1dkZKTdZQAAkO80bGgm+Pv5Zyk5WWrRwqw2Hh1tZjYePFjyjPs7OWNry01ycrJ27Njh3N65c6fWr1+vsLAwlStXTkOGDNH+/fv15ZdfSpI++eQTVaxYUbVq1dLZs2c1duxYLVq0SPPnz7fxWwAAkH9Vq2YekvTOO9I990hnzpjtTz+VZsyQHn9ceu21/DOyytZws3r1at11113O7eeff16S1Lt3b02cOFEHDx7Unj17nMfPnTunF154Qfv371eRIkVUt25d/fTTTy7vAQAAbkzLltLy5abPzZEjJtzs3i299Za0cqXpkFysmN1VXp/HdCjOKznpkAQAQEF19qzpj7N+/aV9DRpIP/4ohYfnfT05+fud7/vcAAAA9wsIMK04qanmuWRJac0aE3i2bTN9dd58Uxo1yvP65eT70VIAACB3ZAw2btzYTPZ3zz1m6HiNGqbjcYbISNcJAu1Gyw0AALiuqlVNwGnY0DXYSNIXX9hV1dURbgAAQLaEh0u//CJNmybNnCmtW2f2//ijtGKF3dVdwm0pAACQbYGBUteul7bbtpXmz5eaN5dat5bKlzfLOFSvbl+NjJYCAAA3LDlZatTIrFmVITxc2rvXvfPiMFoKAADkiWLFpIvT1DkNHGjvhH/clgIAADelZ0/pq69Mi80339hdDeEGAADcpMBAackSu6u4hNtSAADAqxBuAACAVyHcAAAAr0K4AQAAXoVwAwAAvArhBgAAeBXCDQAA8CqEGwAA4FUINwAAwKsQbgAAgFch3AAAAK9CuAEAAF6FcAMAALwK4QYAAHgVX7sLyGuWZUmSkpKS7C4FAABkU8bf7Yy/41kpcOHm1KlTkqSoqCi7SwEAADl06tQphYSEZHmOw8pOBPIi6enpOnDggIKCguRwONz63klJSYqKitLevXsVHBzs1vfGJVznvMO1zhtc57zBdc47uXGtLcvSqVOnVKZMGfn4ZN2rpsC13Pj4+Khs2bK5+hnBwcH8DycPcJ3zDtc6b3Cd8wbXOe+4+1pfr8UmAx2KAQCAVyHcAAAAr0K4cSN/f38NHTpU/v7+dpfi1bjOeYdrnTe4znmD65x37L7WBa5DMQAA8G603AAAAK9CuAEAAF6FcAMAALwK4QYAAHgVwo2b/Otf/1KFChUUEBCgxo0ba+XKlXaXlO/88ssvuu+++1SmTBk5HA7NmDHD5bhlWXrzzTcVGRmpwMBAtW7dWtu3b3c55/jx4+rZs6eCg4NVvHhx9enTR8nJyXn8TTxXbGysbr/9dgUFBal06dLq3Lmz4uPjXc45e/as+vfvrxIlSqhYsWLq2rWrDh065HLOnj171LFjRxUpUkSlS5fWSy+9pAsXLuTxt/Fso0aNUt26dZ2TmMXExGjOnDnO41zn3DFixAg5HA4NHjzYuY9r7R7Dhg2Tw+FweURHRzuPe9R1tnDTpkyZYvn5+Vnjx4+3Nm/ebPXt29cqXry4dejQIbtLy1dmz55tvfbaa9b3339vSbKmT5/ucnzEiBFWSEiINWPGDOv333+37r//fqtixYrWmTNnnOfcc889Vr169azly5db//vf/6wqVapY3bt3t+HbeKZ27dpZEyZMsDZt2mStX7/e6tChg1WuXDkrOTnZeU6/fv2sqKgoa+HChdbq1autJk2aWE2bNnUev3DhglW7dm2rdevW1rp166zZs2dbJUuWtIYMGWLTt/JMP/zwg/Xjjz9a27Zts+Lj462///3vVuHCha1NmzZZFtc5V6xcudKqUKGCVbduXWvQoEHO/Vxr9xg6dKhVq1Yt6+DBg87HkSNHnMc96ToTbtygUaNGVv/+/Z3baWlpVpkyZazY2Fhb68rPrgw36enpVkREhPXBBx849508edLy9/e3Jk+ebFmWZW3ZssWSZK1atcp5zpw5cyyHw2Ht378/j79B/nD48GFLkrVkyRLLunhNCxcubE2dOtV5ztatWy1J1rJlyyzrYgj18fGxEhISnOeMGjXKCg4OtlJTU234FvlHaGioNXbsWK5zLjh16pRVtWpVa8GCBdYdd9zhDDdca/cZOnSoVa9evase87TrzG2pm3Tu3DmtWbNGrVu3du7z8fFR69attWzZMltr8yY7d+5UQkKCy3UOCQlR48aNndd52bJlKl68uBo2bOg8p3Xr1vLx8dGKFStsqdvTJSYmSpLCwsIkSWvWrNH58+ddrnN0dLTKlSvncp3r1Kmj8PBw5znt2rVTUlKSNm/enOffIT9IS0vTlClTlJKSopiYGK5zLujfv786duzock3Fv2m32759u8qUKaNKlSqpZ8+e2rNnj+SB17nALZzpbkePHlVaWprLL0uSwsPD9ccff9hWl7dJSEiQLl7Xy4WHhzuPJSQkqHTp0i7HfX19FRYW5jwHl6Snp2vw4MFq1qyZateuLV28hn5+fipevLjLuVde56v9HnTZ7wnGxo0bFRMTo7Nnz6pYsWKaPn26atasqfXr13Od3WjKlClau3atVq1alekY/6bdp3Hjxpo4caKqV6+ugwcP6q233lKLFi20adMmj7vOhBuggOrfv782bdqkX3/91e5SvFb16tW1fv16JSYmatq0aerdu7eWLFlid1leZe/evRo0aJAWLFiggIAAu8vxau3bt3e+rlu3rho3bqzy5cvr22+/VWBgoK21XYnbUjepZMmSKlSoUKYe4YcOHVJERIRtdXmbjGuZ1XWOiIjQ4cOHXY5fuHBBx48f53dxhQEDBmjWrFn6+eefVbZsWef+iIgInTt3TidPnnQ5/8rrfLXfgy77PcHw8/NTlSpV1KBBA8XGxqpevXr69NNPuc5utGbNGh0+fFj169eXr6+vfH19tWTJEv3f//2ffH19FR4ezrXOJcWLF1e1atW0Y8cOj/s3Tbi5SX5+fmrQoIEWLlzo3Jeenq6FCxcqJibG1tq8ScWKFRUREeFynZOSkrRixQrndY6JidHJkye1Zs0a5zmLFi1Senq6GjdubEvdnsayLA0YMEDTp0/XokWLVLFiRZfjDRo0UOHChV2uc3x8vPbs2eNynTdu3OgSJBcsWKDg4GDVrFkzD79N/pOenq7U1FSusxu1atVKGzdu1Pr1652Phg0bqmfPns7XXOvckZycrD///FORkZGe92/ard2TC6gpU6ZY/v7+1sSJE60tW7ZYTz/9tFW8eHGXHuG4vlOnTlnr1q2z1q1bZ0myPv74Y2vdunXW7t27LeviUPDixYtbM2fOtDZs2GB16tTpqkPBb7vtNmvFihXWr7/+alWtWpWh4Jd55plnrJCQEGvx4sUuwzlPnz7tPKdfv35WuXLlrEWLFlmrV6+2YmJirJiYGOfxjOGcbdu2tdavX2/NnTvXKlWqFMNmr/Dqq69aS5YssXbu3Glt2LDBevXVVy2Hw2HNnz/fsrjOuery0VIW19ptXnjhBWvx4sXWzp07rd9++81q3bq1VbJkSevw4cOW5WHXmXDjJp999plVrlw5y8/Pz2rUqJG1fPlyu0vKd37++WdLUqZH7969LevicPA33njDCg8Pt/z9/a1WrVpZ8fHxLu9x7Ngxq3v37laxYsWs4OBg64knnrBOnTpl0zfyPFe7vpKsCRMmOM85c+aM9eyzz1qhoaFWkSJFrC5dulgHDx50eZ9du3ZZ7du3twIDA62SJUtaL7zwgnX+/HkbvpHnevLJJ63y5ctbfn5+VqlSpaxWrVo5g43Fdc5VV4YbrrV7dOvWzYqMjLT8/PysW265xerWrZu1Y8cO53FPus4Oy/wfHgAAgFegzw0AAPAqhBsAAOBVCDcAAMCrEG4AAIBXIdwAAACvQrgBAABehXADAAC8CuEGAAB4FcINgALJ4XBoxowZdpcBIBcQbgDkuccff1wOhyPT45577rG7NABewNfuAgAUTPfcc48mTJjgss/f39+2egB4D1puANjC399fERERLo/Q0FDp4i2jUaNGqX379goMDFSlSpU0bdo0l5/fuHGj7r77bgUGBqpEiRJ6+umnlZyc7HLO+PHjVatWLfn7+ysyMlIDBgxwOX706FF16dJFRYoUUdWqVfXDDz84j504cUI9e/ZUqVKlFBgYqKpVq2YKYwA8E+EGgEd644031LVrV/3+++/q2bOnHnnkEW3dulWSlJKSonbt2ik0NFSrVq3S1KlT9dNPP7mEl1GjRql///56+umntXHjRv3www+qUqWKy2e89dZbevjhh7VhwwZ16NBBPXv21PHjx52fv2XLFs2ZM0dbt27VqFGjVLJkyTy+CgBuiNvXGQeA6+jdu7dVqFAhq2jRoi6Pd99917Isy5Jk9evXz+VnGjdubD3zzDOWZVnWmDFjrNDQUCs5Odl5/Mcff7R8fHyshIQEy7Isq0yZMtZrr712zRokWa+//rpzOzk52ZJkzZkzx7Isy7rvvvusJ554ws3fHEBeoM8NAFvcddddGjVqlMu+sLAw5+uYmBiXYzExMVq/fr0kaevWrapXr56KFi3qPN6sWTOlp6crPj5eDodDBw4cUKtWrbKsoW7dus7XRYsWVXBwsA4fPixJeuaZZ9S1a1etXbtWbdu2VefOndW0adOb/NYA8gLhBoAtihYtmuk2kbsEBgZm67zChQu7bDscDqWnp0uS2rdvr927d2v27NlasGCBWrVqpf79++vDDz/MlZoBuA99bgB4pOXLl2farlGjhiSpRo0a+v3335WSkuI8/ttvv8nHx0fVq1dXUFCQKlSooIULF95UDaVKlVLv3r01adIkffLJJxozZsxNvR+AvEHLDQBbpKamKiEhwWWfr6+vs9Pu1KlT1bBhQzVv3lxff/21Vq5cqXHjxkmSevbsqaFDh6p3794aNmyYjhw5ooEDB+qxxx5TeHi4JGnYsGHq16+fSpcurfbt2+vUqVP67bffNHDgwGzV9+abb6pBgwaqVauWUlNTNWvWLGe4AuDZCDcAbDF37lxFRka67Ktevbr++OMP6eJIpilTpujZZ59VZGSkJk+erJo1a0qSihQponnz5mnQoEG6/fbbVaRIEXXt2lUff/yx87169+6ts2fP6p///KdefPFFlSxZUg8++GC26/Pz89OQIUO0a9cuBQYGqkWLFpoyZYrbvj+A3OOwzKgBAPAYDodD06dPV+fOne0uBUA+RJ8bAADgVQg3AADAq9DnBoDH4W45gJtByw0AAPAqhBsAAOBVCDcAAMCrEG4AAIBXIdwAAACvQrgBAABehXADAAC8CuEGAAB4lf8PJ48umnSI2bwAAAAASUVORK5CYII=", "text/plain": [ - "<Figure size 640x480 with 1 Axes>" + "(array([[1.7789e+04, 6.5000e+02, 4.8000e+02, ..., 0.0000e+00, 1.0000e+00,\n", + " 1.0000e+00],\n", + " [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n", + " 0.0000e+00],\n", + " [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n", + " 0.0000e+00],\n", + " ...,\n", + " [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n", + " 0.0000e+00],\n", + " [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n", + " 0.0000e+00],\n", + " [0.0000e+00, 0.0000e+00, 0.0000e+00, ..., 0.0000e+00, 0.0000e+00,\n", + " 0.0000e+00]]),\n", + " array([ 1. , 1.18 , 1.36 , 1.54 , 1.721, 1.9 , 2.08 , 2.262,\n", + " 2.441, 2.621, 2.8 , 2.98 , 3.16 , 3.34 , 3.521, 3.701,\n", + " 3.88 , 4.062, 4.242, 4.42 , 4.6 , 4.78 , 4.96 , 5.14 ,\n", + " 5.32 , 5.5 , 5.68 , 5.863, 6.043, 6.223, 6.402, 6.582,\n", + " 6.76 , 6.94 , 7.12 , 7.3 , 7.48 , 7.66 , 7.844, 8.02 ,\n", + " 8.2 , 8.38 , 8.56 , 8.74 , 8.92 , 9.1 , 9.28 , 9.46 ,\n", + " 9.64 , 9.82 , 10. ], dtype=float16),\n", + " array([ 0.879, 1.156, 1.434, 1.71 , 1.987, 2.266, 2.541, 2.818,\n", + " 3.096, 3.373, 3.65 , 3.928, 4.203, 4.48 , 4.758, 5.035,\n", + " 5.312, 5.59 , 5.867, 6.145, 6.42 , 6.7 , 6.977, 7.254,\n", + " 7.527, 7.805, 8.08 , 8.36 , 8.64 , 8.92 , 9.19 , 9.47 ,\n", + " 9.75 , 10.016, 10.3 , 10.58 , 10.86 , 11.125, 11.41 , 11.69 ,\n", + " 11.97 , 12.234, 12.516, 12.8 , 13.08 , 13.34 , 13.625, 13.91 ,\n", + " 14.17 , 14.45 , 14.734], dtype=float16),\n", + " <matplotlib.collections.QuadMesh at 0x7f201daaff50>)" ] }, + "execution_count": 27, "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "with open('training-loss') as f:\n", - " train_err = list(map(float, f.read().split()))\n", - " plt.suptitle('Log MSE vs Epochs')\n", - " plt.plot(torch.log(torch.tensor(train_err)[:500]), label='Train', color='blue')\n", - " plt.xlabel('Epochs')\n", - " plt.ylabel('Log MSE')\n", - " plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "execution_state": "idle", - "metadata": {}, - "outputs": [], - "source": [ - "with open(\"lens_loss\", \"wb\") as f:\n", - " pickle.dump((train_err, len1, len2, len3, len15), f)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "execution_state": "idle", - "metadata": {}, - "outputs": [ + "output_type": "execute_result" + }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAfp0lEQVR4nO3de3BU9f3/8dcmIUuMyUr4Si6SYEAKym2gWH6AbaFE/eaHFKZTVCZiCnU67UQh0lpINSqDENHWKpUJYjuAF/DSacDyG6Qp5VJ+VQjBONALF6WYcp35DeyS8GUN2fP7o2OmEYTEPZvz3s3zMXP+2LOf7Hkdg+yLz57PWZ/jOI4AAAAMSfI6AAAAwOdRUAAAgDkUFAAAYA4FBQAAmENBAQAA5lBQAACAORQUAABgDgUFAACYk+J1gM+LRCI6fvy4MjIy5PP5vI4DAAA6wHEcnTt3Tnl5eUpKin7+w1xBOX78uPLz872OAQAAvoTGxkb17ds36tcxV1AyMjIkSbfpfytFPa44dkPwlS5KBQAAriQUCik/P7/tfTxa5grKZx/rpKiHUnxXLiiZmZldlAoAAHSEW5dncJEsAAAwh4ICAADMoaAAAABzKCgAAMAccxfJAug6tydN79C42sjbMc8CAP+JGRQAAGAOBQUAAJhDQQEAAOZQUAAAgDkUFAAAYA4FBQAAmENBAQAA5vgcx3E68wM7duzQs88+q/r6ep04cUI1NTWaNm3aZcf+8Ic/1EsvvaRf/vKXKi8v79Drh0IhBQIBBYNBvgwQAIA44fb7d6dnUJqbmzVixAgtX778iuNqamr0/vvvKy8vL5p8AACgG+r0nWSLi4tVXFx8xTHHjh3TQw89pM2bN2vy5MnR5AMAAN2Q67e6j0Qimjlzph555BENGTLkquPD4bDC4XDb41Ao5HYkAAAQZ1y/SHbp0qVKSUnRnDlzOjS+qqpKgUCgbcvPz3c7EgAAiDOuFpT6+nq98MILWr16tXw+X4d+pqKiQsFgsG1rbGx0MxIAAIhDrhaUP//5zzp9+rQKCgqUkpKilJQUHT16VD/+8Y914403XvZn/H6/MjMz220AAKB7c/UalJkzZ6qoqKjdvjvvvFMzZ87UrFmz3DwUAABIYJ0uKE1NTTp8+HDb4yNHjqihoUFZWVkqKChQ7969243v0aOHcnJyNGjQIHcSAwCAhNfpgrJnzx5NnDix7fG8efMkSaWlpVq9erW76QAAQLfU6YIyYcIEdebms//85z87ewgAANDN8V08AADAHAoKAAAwh4ICAADMoaAAAABzKCgAAMAcCgoAADCHggIAAMyhoAAAAHMoKAAAwBwKCgAAMIeCAgAAzKGgAAAAcygoAADAHAoKAAAwh4ICAADMoaAAAABzKCgAAMAcCgoAADCHggIAAMyhoAAAAHMoKAAAwBwKCgAAMIeCAgAAzKGgAAAAcygoAADAnBSvA3yRqYH7leLrccUxtZG3uywPAADoOsygAAAAcygoAADAHAoKAAAwh4ICAADMoaAAAABzKCgAAMAcCgoAADDH7H1QNgRfUWZmptcxAACAB5hBAQAA5lBQAACAORQUAABgDgUFAACYQ0EBAADmUFAAAIA5FBQAAGAOBQUAAJjT6YKyY8cOTZkyRXl5efL5fFq/fn3bcy0tLZo/f76GDRum9PR05eXl6f7779fx48fdzg0AABJYpwtKc3OzRowYoeXLl1/y3Pnz57V3715VVlZq7969+t3vfqcDBw7o29/+tlt5AQBAN+BzHMf50j/s86mmpkbTpk37wjF1dXX62te+pqNHj6qgoOCqrxkKhRQIBBQMBrnVPQAAccLt9++YX4MSDAbl8/l03XXXxfpQAAAgQcT0ywIvXLig+fPna8aMGV/YpsLhsMLhcNvjUCgUy0gAACAOxGwGpaWlRXfffbccx1F1dfUXjquqqlIgEGjb8vPzYxUJAADEiZgUlM/KydGjR1VbW3vFz6IqKioUDAbbtsbGxlhEAgAAccT1j3g+KyeHDh3S1q1b1bt37yuO9/v98vv9bscAAABxrNMFpampSYcPH257fOTIETU0NCgrK0u5ubn67ne/q71792rjxo1qbW3VyZMnJUlZWVlKTU11Nz0AAEhInV5mvG3bNk2cOPGS/aWlpXryySdVWFh42Z/bunWrJkyYcNXXZ5kxAADxx+33707PoEyYMEFX6jRR3FYFAABA4rt4AACARRQUAABgTkxv1BaNqYH7leLrccUxtZG3uywPAADoOsygAAAAcygoAADAHAoKAAAwh4ICAADMoaAAAABzKCgAAMAcs8uMNwRf4Vb3AAB0U8ygAAAAcygoAADAHAoKAAAwh4ICAADMoaAAAABzKCgAAMAcCgoAADCHggIAAMyhoAAAAHMoKAAAwBwKCgAAMIeCAgAAzKGgAAAAcygoAADAHAoKAAAwh4ICAADMoaAAAABzKCgAAMAcCgoAADCHggIAAMyhoAAAAHMoKAAAwBwKCgAAMIeCAgAAzKGgAAAAcygoAADAHAoKAAAwh4ICAADMoaAAAABzKCgAAMAcCgoAADCHggIAAMyhoAAAAHM6XVB27NihKVOmKC8vTz6fT+vXr2/3vOM4evzxx5Wbm6u0tDQVFRXp0KFDbmYGAAAJrtMFpbm5WSNGjNDy5csv+/wzzzyjZcuWacWKFdq1a5fS09N155136sKFC27kBQAA3UBKZ3+guLhYxcXFl33OcRw9//zzeuyxxzR16lRJ0iuvvKLs7GytX79e9957b/SJAQBAwnP1GpQjR47o5MmTKioqatsXCAQ0ZswYvffee5f9mXA4rFAo1G4DAADdm6sF5eTJk5Kk7Ozsdvuzs7Pbnvu8qqoqBQKBti0/P9/NSAAAIA55voqnoqJCwWCwbWtsbPQ6EgAA8JirBSUnJ0eSdOrUqXb7T5061fbc5/n9fmVmZrbbAABA9+ZqQSksLFROTo62bNnSti8UCmnXrl0aO3asm4cCAAAJrNOreJqamnT48OG2x0eOHFFDQ4OysrJUUFCg8vJyPfXUUxo4cKAKCwtVWVmpvLw8TZs2ze3sAAAgQXW6oOzZs0cTJ05sezxv3jxJUmlpqVavXq2f/vSnam5u1g9+8AOdPXtWt912m95991317NnT3eQAACBh+RzHcbwO8Z9CoZACgYCCwSDXowAAECfcfv/u9AxKV5kauF8pvh5XHFMbebvL8qB7uD1peofG8WcPAGLL82XGAAAAn0dBAQAA5lBQAACAORQUAABgDgUFAACYQ0EBAADmcB8UAAAQNbffv5lBAQAA5lBQAACAORQUAABgDgUFAACYQ0EBAADmUFAAAIA5FBQAAGAOBQUAAJhDQQEAAOZQUAAAgDkUFAAAYA4FBQAAmENBAQAA5lBQAACAORQUAABgDgUFAACYQ0EBAADmUFAAAIA5FBQAAGAOBQUAAJhDQQEAAOZQUAAAgDkUFAAAYA4FBQAAmENBAQAA5lBQAACAORQUAABgDgUFAACYQ0EBAADmUFAAAIA5FBQAAGAOBQUAAJhDQQEAAOZQUAAAgDmuF5TW1lZVVlaqsLBQaWlpGjBggBYtWiTHcdw+FAAASFApbr/g0qVLVV1drTVr1mjIkCHas2ePZs2apUAgoDlz5rh9OAAAkIBcLyh/+ctfNHXqVE2ePFmSdOONN2rdunXavXu324cCAAAJyvWPeMaNG6ctW7bo4MGDkqQPP/xQO3fuVHFx8WXHh8NhhUKhdhsAAOjeXJ9BWbBggUKhkAYPHqzk5GS1trZq8eLFKikpuez4qqoqLVy40O0YAAAgjrk+g/LWW2/p9ddf19q1a7V3716tWbNGP//5z7VmzZrLjq+oqFAwGGzbGhsb3Y4EAADijM9xeXlNfn6+FixYoLKysrZ9Tz31lF577TX94x//uOrPh0IhBQIBBYNBZWZmuhkNAADEiNvv367PoJw/f15JSe1fNjk5WZFIxO1DAQCABOX6NShTpkzR4sWLVVBQoCFDhuiDDz7Qc889p9mzZ7t9KAAAkKBc/4jn3LlzqqysVE1NjU6fPq28vDzNmDFDjz/+uFJTU6/683zEAwBA/HH7/dv1ghKtz05wgqYqxdfjimNrI293WS4AAPDFzF+DAgAAEC0KCgAAMIeCAgAAzKGgAAAAcygoAADAHAoKAAAwx/UbtbllQ/AV7oMCAEA3xQwKAAAwh4ICAADMoaAAAABzKCgAAMAcCgoAADCHggIAAMyhoAAAAHMoKAAAwBwKCgAAMIeCAgAAzKGgAAAAcygoAADAHAoKAAAwh4ICAADMSfE6QCK7PWl6h8bVRt6OeRYAAOIJMygAAMAcCgoAADCHggIAAMyhoAAAAHMoKAAAwBwKCgAAMIdlxjHE8mEAQCLoyG0zLjotrh6TGRQAAGAOBQUAAJhDQQEAAOZQUAAAgDkUFAAAYA4FBQAAmMMyYwAAcEUduW1GKBRSIBBw7ZjMoAAAAHMoKAAAwBwKCgAAMIeCAgAAzKGgAAAAcygoAADAnJgUlGPHjum+++5T7969lZaWpmHDhmnPnj2xOBQAAEhArt8H5cyZMxo/frwmTpyoTZs26frrr9ehQ4fUq1cvtw8FAB36Gnh18D4O8aC7nS+6L9cLytKlS5Wfn69Vq1a17SssLHT7MAAAIIG5/hHPO++8o9GjR2v69Onq06ePRo4cqZdfftntwwAAgATmekH5+OOPVV1drYEDB2rz5s360Y9+pDlz5mjNmjWXHR8OhxUKhdptAACge3P9I55IJKLRo0dryZIlkqSRI0dq//79WrFihUpLSy8ZX1VVpYULF7odAwAAxDHXZ1Byc3N1yy23tNt3880365NPPrns+IqKCgWDwbatsbHR7UgAACDOuD6DMn78eB04cKDdvoMHD6pfv36XHe/3++X3+92OAQAA4pjrBeXhhx/WuHHjtGTJEt19993avXu3Vq5cqZUrV7p9KADodstpU/JyvY6Abqgjy9svOi2uHtP1j3huvfVW1dTUaN26dRo6dKgWLVqk559/XiUlJW4fCgAAJCjXZ1Ak6a677tJdd90Vi5cGAADdAN/FAwAAzKGgAAAAcygoAADAHAoKAAAwh4ICAADMickqHjdMDdyvFF+PK47pbvc/QOx1t6+yL+47p0PjNv1rWcyzfFl3fvWJDo3bXJ8gX6mRke51Ald05P+1RPn/LBF05HcRCoUUCARcOyYzKAAAwBwKCgAAMIeCAgAAzKGgAAAAcygoAADAHAoKAAAwx+wy40SQCEs4OypRludaz+e2f91b6HWEqDUWX+d1hC4VGtLb6wiu6G7/r6HzmEEBAADmUFAAAIA5FBQAAGAOBQUAAJhDQQEAAOZQUAAAgDlmlxl/evsoRXr09DpGVC4W9PE6QpdpuWO01xFcMeG/l3Zo3LZ358c8S1dozne8jhC1Xv9o9TpCl/q/v/2J1xGALsEMCgAAMIeCAgAAzKGgAAAAcygoAADAHAoKAAAwh4ICAADMoaAAAABz7N4HJTNZkR7JXseIyqe9Ur2O0GUu/FcPryO4Ijig+/zOJKnnKZ/XEaLmP3PR6whd6vak6R0aVxt5O+ZZgFhiBgUAAJhDQQEAAOZQUAAAgDkUFAAAYA4FBQAAmENBAQAA5phdZpzU4ihJ8f1V8OFeZv/zus7XGt+/q8+0XON1gq6VcsHrBNFL3lrvdYQuxfJhdBfMoAAAAHMoKAAAwBwKCgAAMIeCAgAAzKGgAAAAcygoAADAHAoKAAAwx+yNOq45cUEpZtN1jNON6l+kh8/rCK44P+p/vI7QpZI+9TpB9FIG3eR1hC51e9L0Do3jfimIdzF/C3366afl8/lUXl4e60MBAIAEEdOCUldXp5deeknDhw+P5WEAAECCiVlBaWpqUklJiV5++WX16tUrVocBAAAJKGYFpaysTJMnT1ZRUdEVx4XDYYVCoXYbAADo3mJyGeobb7yhvXv3qq6u7qpjq6qqtHDhwljEAAAAccr1GZTGxkbNnTtXr7/+unr27HnV8RUVFQoGg21bY2Oj25EAAECccX0Gpb6+XqdPn9aoUaPa9rW2tmrHjh168cUXFQ6HlZyc3Pac3++X3++/5HXODr5GyalXLziWnb8+MZbedkSoX2Kcq9OaGOfRUWn/L+J1BAC4LNcLyqRJk7Rv3752+2bNmqXBgwdr/vz57coJAADA5bheUDIyMjR06NB2+9LT09W7d+9L9gMAAFxON7rXKQAAiBddcjP5bdu2dcVhAABAgmAGBQAAmENBAQAA5pj9vuD/6e1Tsj++l3w63WjBUkum43UEV6Q0xvfS9s5KDbV6HQGdxLcUo7tgBgUAAJhDQQEAAOZQUAAAgDkUFAAAYA4FBQAAmENBAQAA5lBQAACAOWbvg+Kk/HuLZ5FUrxN0nYvXJcb9NHwRrxN0LV9r/N+/5uKBw15H6FK3J03v0Djul4J4xwwKAAAwh4ICAADMoaAAAABzKCgAAMAcCgoAADCHggIAAMwxu5C3NVWS3+sU0bnY0+sEXWfq6L1eR3CF/4zXCbpWUkv8LzPW/xrhdYIuxfJhdBfMoAAAAHMoKAAAwBwKCgAAMIeCAgAAzKGgAAAAcygoAADAHAoKAAAwx+x9UC5mOIr0jO97NHz6X61eR+gy6+tHdWjcCyNjHiUq1x6PeB2hS/mPB72OELXavzzmdQR8CbcnTb/qGO750r0xgwIAAMyhoAAAAHMoKAAAwBwKCgAAMIeCAgAAzKGgAAAAc8wuM470apHSkr2OEZ30i14n6DL+k2b/KHXKxZ4+ryMA3QJLiHE1zKAAAABzKCgAAMAcCgoAADCHggIAAMyhoAAAAHMoKAAAwByza0P96WElXxPfSz4fG/N/OjhyQYyTxJ4vvr94us01p7rP0nBJunjgsNcRAOCymEEBAADmUFAAAIA5rheUqqoq3XrrrcrIyFCfPn00bdo0HThwwO3DAACABOZ6Qdm+fbvKysr0/vvvq7a2Vi0tLbrjjjvU3Nzs9qEAAECCcv0i2Xfffbfd49WrV6tPnz6qr6/XN77xDbcPBwAAElDMV/EEg0FJUlZW1mWfD4fDCofDbY9DoVCsIwEAAONiepFsJBJReXm5xo8fr6FDh152TFVVlQKBQNuWn58fy0gAACAOxHQGpaysTPv379fOnTu/cExFRYXmzZvX9jgUCik/P1/+1ItKTm2JZbyYO/5pL68jdJlrTnqdwB2pm+q8jtCl+Mp7AFbFrKA8+OCD2rhxo3bs2KG+fft+4Ti/3y+/3x+rGAAAIA65XlAcx9FDDz2kmpoabdu2TYWFhW4fAgAAJDjXC0pZWZnWrl2rDRs2KCMjQydP/nvuPxAIKC0tze3DAQCABOT6RbLV1dUKBoOaMGGCcnNz27Y333zT7UMBAIAEFZOPeAAAAKLBd/EAAABzYn6jti+r5WKyIheTvY4Rld+8//UOjXv88reIiSvXHm/1OoIrkkbe4nWELlXcd06Hxm3617KYZwGA/8QMCgAAMIeCAgAAzKGgAAAAcygoAADAHAoKAAAwh4ICAADMMbvMON3/qZL9Pq9jRKXnCbP/eV3Xc8MuryO4YnP9Qq8jdCmWDwOwihkUAABgDgUFAACYQ0EBAADmUFAAAIA5FBQAAGAOBQUAAJhDQQEAAOaYvVHHn4avV2ZG8lVGLemiNF/ODdvCHRtYGeskAADEF2ZQAACAORQUAABgDgUFAACYQ0EBAADmUFAAAIA55lbxOI4jSQo1Ra46NumaUBck+vIuXrzQoXGhkO3z6IiLTkuHxiXCuQIALvXZ3++fvY9Hy+e49Uou+fjjjzVgwACvYwAAgC/ho48+Uv/+/aN+HXMzKFlZWZKkTz75RIFAwOs4rgqFQsrPz1djY6MyMzO9juO6RD4/zi0+cW7xiXOLT8FgUAUFBW3v49EyV1CSkv59WUwgEEi4X95nMjMzE/bclODnx7nFJ84tPnFu8emz9/GoX8eVVwEAAHARBQUAAJhjrqD4/X498cQT8vv9XkdxXSKfmxL8/Di3+MS5xSfOLT65fW7mVvEAAACYm0EBAACgoAAAAHMoKAAAwBwKCgAAMMdMQdmxY4emTJmivLw8+Xw+rV+/3utIrqmqqtKtt96qjIwM9enTR9OmTdOBAwe8juWK6upqDR8+vO2mQ2PHjtWmTZu8jhUTTz/9tHw+n8rLy72OErUnn3xSPp+v3TZ48GCvY7nm2LFjuu+++9S7d2+lpaVp2LBh2rNnj9exXHHjjTde8rvz+XwqKyvzOlrUWltbVVlZqcLCQqWlpWnAgAFatGiRa9/t4rVz586pvLxc/fr1U1pamsaNG6e6ujqvY3Xa1d6vHcfR448/rtzcXKWlpamoqEiHDh3q9HHMFJTm5maNGDFCy5cv9zqK67Zv366ysjK9//77qq2tVUtLi+644w41Nzd7HS1qffv21dNPP636+nrt2bNH3/rWtzR16lT99a9/9Tqaq+rq6vTSSy9p+PDhXkdxzZAhQ3TixIm2befOnV5HcsWZM2c0fvx49ejRQ5s2bdLf/vY3/eIXv1CvXr28juaKurq6dr+32tpaSdL06dO9jha1pUuXqrq6Wi+++KL+/ve/a+nSpXrmmWf0q1/9yutornjggQdUW1urV199Vfv27dMdd9yhoqIiHTt2zOtonXK19+tnnnlGy5Yt04oVK7Rr1y6lp6frzjvv1IULHfsC3TaOQZKcmpoar2PEzOnTpx1Jzvbt272OEhO9evVyfv3rX3sdwzXnzp1zBg4c6NTW1jrf/OY3nblz53odKWpPPPGEM2LECK9jxMT8+fOd2267zesYXWbu3LnOgAEDnEgk4nWUqE2ePNmZPXt2u33f+c53nJKSEs8yueX8+fNOcnKys3Hjxnb7R40a5Tz66KOe5YrW59+vI5GIk5OT4zz77LNt+86ePev4/X5n3bp1nXptMzMo3UkwGJT+44sRE0Vra6veeOMNNTc3a+zYsV7HcU1ZWZkmT56soqIir6O46tChQ8rLy1P//v1VUlKiTz75xOtIrnjnnXc0evRoTZ8+XX369NHIkSP18ssvex0rJj799FO99tprmj17tnw+n9dxojZu3Dht2bJFBw8elCR9+OGH2rlzp4qLi72OFrWLFy+qtbVVPXv2bLc/LS0tYWYvJenIkSM6efJku78vA4GAxowZo/fee69Tr2XuywITXSQSUXl5ucaPH6+hQ4d6HccV+/bt09ixY3XhwgVde+21qqmp0S233OJ1LFe88cYb2rt3b1x+TnwlY8aM0erVqzVo0CCdOHFCCxcu1Ne//nXt379fGRkZXseLyscff6zq6mrNmzdPP/vZz1RXV6c5c+YoNTVVpaWlXsdz1fr163X27Fl973vf8zqKKxYsWKBQKKTBgwcrOTlZra2tWrx4sUpKSryOFrWMjAyNHTtWixYt0s0336zs7GytW7dO7733nm666Sav47nm5MmTkqTs7Ox2+7Ozs9ue6ygKShcrKyvT/v37E6oxDxo0SA0NDQoGg/rtb3+r0tJSbd++Pe5LSmNjo+bOnava2tpL/tUT7/7zX6TDhw/XmDFj1K9fP7311lv6/ve/72m2aEUiEY0ePVpLliyRJI0cOVL79+/XihUrEq6g/OY3v1FxcbHy8vK8juKKt956S6+//rrWrl2rIUOGqKGhQeXl5crLy0uI392rr76q2bNn64YbblBycrJGjRqlGTNmqL6+3utoJvERTxd68MEHtXHjRm3dulV9+/b1Oo5rUlNTddNNN+mrX/2qqqqqNGLECL3wwgtex4pafX29Tp8+rVGjRiklJUUpKSnavn27li1bppSUFLW2tnod0TXXXXedvvKVr+jw4cNeR4labm7uJeX45ptvTpiPsD5z9OhR/fGPf9QDDzzgdRTXPPLII1qwYIHuvfdeDRs2TDNnztTDDz+sqqoqr6O5YsCAAdq+fbuamprU2Nio3bt3q6WlRf379/c6mmtycnIkSadOnWq3/9SpU23PdRQFpQs4jqMHH3xQNTU1+tOf/qTCwkKvI8VUJBJROBz2OkbUJk2apH379qmhoaFtGz16tEpKStTQ0KDk5GSvI7qmqalJH330kXJzc72OErXx48dfsoz/4MGD6tevn2eZYmHVqlXq06ePJk+e7HUU15w/f15JSe3flpKTkxWJRDzLFAvp6enKzc3VmTNntHnzZk2dOtXrSK4pLCxUTk6OtmzZ0rYvFApp165dnb420cxHPE1NTe3+9XbkyBE1NDQoKytLBQUFnmaLVllZmdauXasNGzYoIyOj7XO4QCCgtLQ0r+NFpaKiQsXFxSooKNC5c+e0du1abdu2TZs3b/Y6WtQyMjIuuU4oPT1dvXv3jvvrh37yk59oypQp6tevn44fP64nnnhCycnJmjFjhtfRovbwww9r3LhxWrJkie6++27t3r1bK1eu1MqVK72O5ppIJKJVq1aptLRUKSlm/hqP2pQpU7R48WIVFBRoyJAh+uCDD/Tcc89p9uzZXkdzxebNm+U4jgYNGqTDhw/rkUce0eDBgzVr1iyvo3XK1d6vy8vL9dRTT2ngwIEqLCxUZWWl8vLyNG3atM4dyNX1RlHYunWrI+mSrbS01OtoUbvceUlyVq1a5XW0qM2ePdvp16+fk5qa6lx//fXOpEmTnD/84Q9ex4qZRFlmfM899zi5ublOamqqc8MNNzj33HOPc/jwYa9jueb3v/+9M3ToUMfv9zuDBw92Vq5c6XUkV23evNmR5Bw4cMDrKK4KhULO3LlznYKCAqdnz55O//79nUcffdQJh8NeR3PFm2++6fTv399JTU11cnJynLKyMufs2bNex+q0q71fRyIRp7Ky0snOznb8fr8zadKkL/Vn1eckyi36AABAwuAaFAAAYA4FBQAAmENBAQAA5lBQAACAORQUAABgDgUFAACYQ0EBAADmUFAAAIA5FBQAAGAOBQUAAJhDQQEAAOZQUAAAgDn/H/iu+7rgR1tVAAAAAElFTkSuQmCC", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] @@ -1660,16 +1031,14 @@ } ], "source": [ - "plt.suptitle('Log MSE vs Epochs')\n", - "plt.plot(torch.log(torch.tensor(train_err)), label='Train', color='blue')\n", - "plt.plot(torch.log(torch.tensor(len1)).to(torch.float16), label='Len 1', color='red')\n", - "plt.plot(torch.log(torch.tensor(len2)).to(torch.float16), label='Len 2', color='green')\n", - "plt.plot(torch.log(torch.tensor(len3)).to(torch.float16), label='Len 3', color='yellow')\n", - "plt.plot(torch.log(torch.tensor(len15)).to(torch.float16), label='Len 15', color='magenta')\n", - "plt.xlabel('Epochs')\n", - "plt.ylabel('Log MSE')\n", - "plt.legend()\n", - "plt.show()" + "batch_src, batch_labels, batch_padding_mask = map(lambda x: x.to(device), 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())" ] } ], |