\n",
"
Exercise Likelihood \n",
"\n",
- " If you have a normal distribution with mean 1 and std 3. What is the liklihood of 2?\n",
+ " If you have a normal distribution with mean 1 and std 3. What is the likelihood of 2?\n",
" \n",
" \n",
" \n",
@@ -1923,8 +2286,8 @@
"execution_count": 20,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-11T10:57:06.934767Z",
- "start_time": "2020-10-11T10:57:06.930937Z"
+ "end_time": "2020-10-16T04:36:25.829742Z",
+ "start_time": "2020-10-16T04:36:25.826919Z"
}
},
"outputs": [],
@@ -1953,8 +2316,8 @@
"execution_count": 21,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-11T10:57:07.468360Z",
- "start_time": "2020-10-11T10:57:07.451562Z"
+ "end_time": "2020-10-16T04:36:25.874531Z",
+ "start_time": "2020-10-16T04:36:25.831061Z"
}
},
"outputs": [],
@@ -1974,11 +2337,16 @@
" )\n",
"\n",
" for batch in tqdm(load_train, leave=False, desc='train'):\n",
- " # make it a pytorch gpu variable\n",
+ " # Send data to gpu\n",
" x_past, y_past, x_future, y_future = [d.to(device) for d in batch]\n",
"\n",
+ " # Discard previous gradients\n",
" optimizer.zero_grad()\n",
+ " \n",
+ " # Run model\n",
" y_dist = model(x_past, y_past, x_future, y_future)\n",
+ " \n",
+ " # Get loss, it's Negative Log Likelihood\n",
" loss = -y_dist.log_prob(y_future).mean()\n",
"\n",
" # Backprop\n",
@@ -2000,9 +2368,12 @@
" pin_memory=False,\n",
" num_workers=num_workers)\n",
" for batch in tqdm(load_test, leave=False, desc='test'):\n",
+ " # Send data to gpu\n",
" x_past, y_past, x_future, y_future = [d.to(device) for d in batch]\n",
" with torch.no_grad():\n",
+ " # Run model\n",
" y_dist = model(x_past, y_past, x_future, y_future)\n",
+ " # Get loss, it's Negative Log Likelihood\n",
" loss = -y_dist.log_prob(y_future).mean()\n",
"\n",
" test_loss.append(loss.item())\n",
@@ -2044,8 +2415,8 @@
"execution_count": 22,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-11T11:02:09.352395Z",
- "start_time": "2020-10-11T10:57:07.669238Z"
+ "end_time": "2020-10-16T04:42:55.508891Z",
+ "start_time": "2020-10-16T04:36:25.875735Z"
}
},
"outputs": [
@@ -2067,13 +2438,13 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Start: Test Loss = 1.27\n"
+ "Start: Test Loss = 1.23\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "a4f870e2670c413f84d0a1737d270f1f",
+ "model_id": "943cf67e6c454fe889296d6c458e0415",
"version_major": 2,
"version_minor": 0
},
@@ -2102,7 +2473,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 1/8: Training Loss = 0.83\n"
+ "Epoch 1/8: Training Loss = 0.99\n"
]
},
{
@@ -2123,7 +2494,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 1/8: Test Loss = 0.10\n",
+ "Epoch 1/8: Test Loss = 0.75\n",
"--------------------------------------------------\n"
]
},
@@ -2145,7 +2516,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 2/8: Training Loss = 0.45\n"
+ "Epoch 2/8: Training Loss = 0.59\n"
]
},
{
@@ -2166,7 +2537,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 2/8: Test Loss = 0.18\n",
+ "Epoch 2/8: Test Loss = 0.19\n",
"--------------------------------------------------\n"
]
},
@@ -2188,7 +2559,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 3/8: Training Loss = 0.42\n"
+ "Epoch 3/8: Training Loss = 0.45\n"
]
},
{
@@ -2209,7 +2580,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 3/8: Test Loss = 0.06\n",
+ "Epoch 3/8: Test Loss = 0.13\n",
"--------------------------------------------------\n"
]
},
@@ -2231,7 +2602,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 4/8: Training Loss = 0.32\n"
+ "Epoch 4/8: Training Loss = 0.39\n"
]
},
{
@@ -2252,7 +2623,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 4/8: Test Loss = 0.20\n",
+ "Epoch 4/8: Test Loss = 0.12\n",
"--------------------------------------------------\n"
]
},
@@ -2274,7 +2645,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 5/8: Training Loss = 0.33\n"
+ "Epoch 5/8: Training Loss = 0.36\n"
]
},
{
@@ -2295,7 +2666,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 5/8: Test Loss = 0.07\n",
+ "Epoch 5/8: Test Loss = 0.14\n",
"--------------------------------------------------\n"
]
},
@@ -2317,7 +2688,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 6/8: Training Loss = 0.31\n"
+ "Epoch 6/8: Training Loss = 0.29\n"
]
},
{
@@ -2338,7 +2709,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 6/8: Test Loss = 0.13\n",
+ "Epoch 6/8: Test Loss = 0.06\n",
"--------------------------------------------------\n"
]
},
@@ -2360,7 +2731,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 7/8: Training Loss = 0.26\n"
+ "Epoch 7/8: Training Loss = 0.29\n"
]
},
{
@@ -2381,14 +2752,14 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Epoch 7/8: Test Loss = 0.15\n",
+ "Epoch 7/8: Test Loss = 0.13\n",
"--------------------------------------------------\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "d48e0997a82544c9b7f50d0635f725a6",
+ "model_id": "",
"version_major": 2,
"version_minor": 0
},
@@ -2403,6 +2774,29 @@
"name": "stdout",
"output_type": "stream",
"text": [
+ "Epoch 8/8: Training Loss = 0.27\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "HBox(children=(FloatProgress(value=0.0, description='test', max=15.0, style=ProgressStyle(description_width='i…"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Epoch 8/8: Test Loss = 0.07\n",
+ "--------------------------------------------------\n",
"\n"
]
},
@@ -2418,7 +2812,7 @@
},
{
"data": {
- "image/png": "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\n",
+ "image/png": "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\n",
"text/plain": [
"
"
]
@@ -2445,7 +2839,7 @@
"\n",
"But we also care about how far we were predicting into the future, so we have 3 dimensions: source time, target time, time ahead.\n",
"\n",
- "It's hard to use pandas for data with more than 2 dimensions, so we will use xarray. Xarray has an interface similar to pandas but can have N dimensions."
+ "It's hard to use pandas for data with virtual dimensions so we will use xarray. Xarray has an interface similar to pandas but can have N dimensions. It also allow coordinates which are virtual dimensions."
]
},
{
@@ -2453,8 +2847,8 @@
"execution_count": 23,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-11T11:02:09.909097Z",
- "start_time": "2020-10-11T11:02:09.355529Z"
+ "end_time": "2020-10-16T04:42:56.136515Z",
+ "start_time": "2020-10-16T04:42:55.511479Z"
}
},
"outputs": [],
@@ -2516,15 +2910,15 @@
"execution_count": 24,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-11T11:02:11.543542Z",
- "start_time": "2020-10-11T11:02:09.911819Z"
+ "end_time": "2020-10-16T04:42:57.535661Z",
+ "start_time": "2020-10-16T04:42:56.138208Z"
}
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "44e80e59ad6942d9b2a6d214e20a5aec",
+ "model_id": "d6aa7dc536e946bb94eff61e69a9d951",
"version_major": 2,
"version_minor": 0
},
@@ -2540,7 +2934,7 @@
"output_type": "stream",
"text": [
"\n",
- "NLL mean over <=6 hours: 0.09597 (lower is better)\n"
+ "NLL mean over <=6 hours: 0.08013 (lower is better)\n"
]
}
],
@@ -2553,8 +2947,8 @@
"execution_count": 25,
"metadata": {
"ExecuteTime": {
- "end_time": "2020-10-11T11:02:11.662644Z",
- "start_time": "2020-10-11T11:02:11.546145Z"
+ "end_time": "2020-10-16T04:42:57.593546Z",
+ "start_time": "2020-10-16T04:42:57.537033Z"
}
},
"outputs": [
@@ -2912,23 +3306,23 @@
" fill: currentColor;\n",
"}\n",
"<xarray.Dataset>\n",
- "Dimensions: (t_ahead: 192, t_behind: 192, t_source: 7461)\n",
+ "Dimensions: (t_ahead: 192, t_behind: 192, t_source: 7465)\n",
"Coordinates:\n",
- " * t_source (t_source) datetime64[ns] 2013-09-17T14:00:00 ... 2013-09-...\n",
+ " * t_source (t_source) datetime64[ns] 2013-09-17T12:00:00 ... 2013-09-...\n",
" * t_ahead (t_ahead) timedelta64[ns] 00:00:00 ... 3 days 23:30:00\n",
" * t_behind (t_behind) timedelta64[ns] -4 days +00:00:00 ... -1 days +...\n",
- " t_target (t_source, t_ahead) datetime64[ns] 2013-09-17T14:00:00 ......\n",
- " t_past (t_source, t_behind) datetime64[ns] 2013-09-13T14:00:00 .....\n",
+ " t_target (t_source, t_ahead) datetime64[ns] 2013-09-17T12:00:00 ......\n",
+ " t_past (t_source, t_behind) datetime64[ns] 2013-09-13T12:00:00 .....\n",
" t_ahead_hours (t_ahead) float64 0.0 0.0 1.0 1.0 2.0 ... 94.0 94.0 95.0 95.0\n",
"Data variables:\n",
- " y_past (t_source, t_behind) float32 0.34478724 ... 0.42559525\n",
- " nll (t_source, t_ahead) float32 0.4811635 ... -0.26418364\n",
- " y_pred (t_source, t_ahead) float32 0.39915967 ... 0.4406219\n",
- " y_pred_std (t_source, t_ahead) float64 0.04404 0.04372 ... 0.06705\n",
- " y_true (t_source, t_ahead) float32 0.46641305 ... 0.44257143 Attributes: (0)
"
],
"text/plain": [
"