Skip to content
Permalink
main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
{
"cells": [
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(2952, 2, 8, 8)"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# split: 0.8, 0.1, 0.1\n",
"import json\n",
"import os\n",
"import numpy as np\n",
"\n",
"dir_path = \"./data\"\n",
"file_name = \"scooter_data.npy\"\n",
"file_path = dir_path+ \"/\"+file_name\n",
"\n",
"data = np.load(file_path)\n",
"data.shape\n"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [],
"source": [
"import keras\n",
"from keras import layers\n",
"\n",
"input = layers.Input(shape=(8,8))\n",
"x = layers.GRU(32)(input)\n",
"output= layers.Dense(10)(x)\n",
"model = keras.models.Model([input,output])\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: xlabel='date'>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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c801Ss7LI488csLXL774YpSXl+PJJ59EcXExgsEgpk2bBq/XqzzmO9/5DmbOnImqqiqsWbMG5513HsrLy4d9TQxmiIiIaMiWLl0Kr9cLSZKwZMmSXl9ramrCvn378OSTT+Kcc84BAHzwwQcnPMf06dNx+umn48knn8Szzz6Lhx9+eETXxGCGiIiIhsxsNmPPnj3Kf0fKyclBXl4ennjiCYwaNQqVlZW4/fbb+32e73znO1i1ahXS0tKwfPnyEV0Tc2aIiIgoKpmZmcjMzDzh8yaTCc899xw2b96MadOm4eabb8b999/f73NcccUVsFgsuOKKK5CSkjKi65GEEGJEz0BEREQUpSNHjmD8+PH47LPPMHv27BE9F4MZIiIiihufz4empibceuutOHz4MD788MMRPyePmYiIiChuPvzwQ4waNQqfffYZHnvssZg8J3dmiIiIyNC4M0NERESGxmCGiIiIDI3BDBEREZ1g9erVOOOMM5CRkYGCggIsW7YM+/bt6/UYt9uNlStXIi8vD+np6bjssstw/Phx5evbt2/HFVdcgdLSUqSmpuKUU07Bgw8+eMJa69atw+zZs2G32zFhwgQ8/fTTUV0rgxkiIiI6wfr167Fy5Up8/PHHWLt2LXw+HxYvXgyXy6U85uabb8Zrr72GF154AevXr0dNTY0ySBIANm/ejIKCAjzzzDPYtWsXfvrTn+KOO+7o1fH38OHDuOiii3Duuedi27ZtuOmmm/Cd73wHb7311pCvlQnARERENKiGhgYUFBRg/fr1WLBgAdra2uB0OvHss8/iK1/5CgBg7969OOWUU7Bx40Z84Qtf6Pd5Vq5ciT179uDdd98FAPz4xz/GG2+8gZ07dyqP+drXvobW1la8+eabQ7o27swQERHRoNra2gAAubm5AEK7Lj6fDxdccIHymClTpqCsrAwbN24c8Hnk5wCAjRs39noOAFiyZMmAz9EXZzMRERHRgILBIG666SacddZZmDZtGgCgrq4ONpsN2dnZvR5bWFiIurq6fp/no48+wvPPP4833nhD+VxdXR0KCwtPeI729nZ0d3cjNTV10OtjMENEREQDWrlyJXbu3NnvBOyh2rlzJy699FLcddddWLx4cQyvjsdMRERENIBVq1bh9ddfx3vvvYfRo0crny8qKoLX60Vra2uvxx8/fhxFRUW9Prd7926cf/75uP766/Gzn/2s19eKiop6VUDJz5GZmTmkXRmAwQwRERH1QwiBVatW4aWXXsK7776LsWPH9vr6nDlzYLVa8c477yif27dvHyorKzF//nzlc7t27cK5556Lq666Cr/85S9PWGf+/Pm9ngMA1q5d2+s5BsNqJiIiIjrBd7/7XTz77LN45ZVXMHnyZOXzWVlZyo7JjTfeiH/96194+umnkZmZie9973sAQrkxQOho6bzzzsOSJUtw//33K89hNpvhdDoBhEqzp02bhpUrV+Kaa67Bu+++i+9///t44403sGTJkiFdK4MZIiIiOoEkSf1+fs2aNbj66qsBhJrm/fCHP8Tf//53eDweLFmyBH/84x+VY6a7774b99xzzwnPUV5ejiNHjih/XrduHW6++Wbs3r0bo0ePxp133qmsMaRrZTBDRERERsacGSIiIjI0BjNERERkaAxmiIiIyNAYzBAREZGhMZghIiIiQ2MwQ0RERIbGYIaIiIgMjcEMEali0aJFuOmmm7S+DCJKAgxmiEhz69atgyRJJwysIyIaCgYzREREZGgMZohoxFwuF771rW8hPT0do0aNwm9+85teX//rX/+K008/HRkZGSgqKsLXv/511NfXAwCOHDmCc889FwCQk5MDSZKUmSzBYBCrV6/G2LFjkZqaihkzZuD//u//4vqzEZH+MZghohG77bbbsH79erzyyiv4z3/+g3Xr1mHLli3K130+H37xi19g+/btePnll3HkyBElYCktLcU///lPAMC+fftQW1uLBx98EACwevVq/OUvf8Fjjz2GXbt24eabb8aVV16J9evXx/1nJCL94qBJIhqRzs5O5OXl4ZlnnsFXv/pVAEBzczNGjx6N66+/Hr///e9P+J5NmzbhjDPOQEdHB9LT07Fu3Tqce+65aGlpQXZ2NgDA4/EgNzcXb7/9NubPn69873e+8x10dXXh2WefjcePR0QGYNH6AojI2A4ePAiv14t58+Ypn8vNzcXkyZOVP2/evBl33303tm/fjpaWFgSDQQBAZWUlpk6d2u/zVlRUoKurC1/84hd7fd7r9WLWrFkq/CREZFQMZohIVS6XC0uWLMGSJUvwt7/9DU6nE5WVlViyZAm8Xu9Jv6+zsxMA8MYbb6CkpKTX1+x2u6rXTETGwmCGiEZk/PjxsFqt+OSTT1BWVgYAaGlpwf79+7Fw4ULs3bsXTU1NuO+++1BaWgogdMwUyWazAQACgYDyualTp8Jut6OyshILFy6M009DREbEYIaIRiQ9PR3XXnstbrvtNuTl5aGgoAA//elPYTKF6gvKyspgs9nw0EMP4YYbbsDOnTvxi1/8otdzlJeXQ5IkvP766/jSl76E1NRUZGRk4NZbb8XNN9+MYDCIs88+G21tbfjwww+RmZmJq666Sosfl4h0iNVMRDRi999/P8455xxcfPHFuOCCC3D22Wdjzpw5AACn04mnn34aL7zwAqZOnYr77rsPDzzwQK/vLykpwT333IPbb78dhYWFWLVqFQDgF7/4Be68806sXr0ap5xyCpYuXYo33ngDY8eOjfvPSET6xWomIiIiMjTuzBAREZGhMZghIiIiQ2MwQ0RERIbGYIaIiIgMjcEMERERGRqDGSIiIjI0BjNERERkaAxmiIiIyNAYzBAREZGhMZghIiIiQ2MwQ0RERIbGYIaIiIgM7f8D1O7nDOKJDpQAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import torch\n",
"import torch.nn as nn\n",
"import numpy as np\n",
"import pandas as pd\n",
"# generating a random walk time serires\n",
"N = 20\n",
"df = pd.DataFrame({\n",
" \"date\": pd.date_range(periods = N, start = \"2020-04-12\",freq = \"D\"),\n",
" \"ts\" : np.random.randn(N)\n",
"})\n",
"df.plot(x = \"date\",y = \"ts\")\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(20, 2)"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>date</th>\n",
" <th>ts</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2020-04-12</td>\n",
" <td>-1.196137</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2020-04-13</td>\n",
" <td>-0.246917</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2020-04-14</td>\n",
" <td>-1.460960</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2020-04-15</td>\n",
" <td>-0.322581</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2020-04-16</td>\n",
" <td>0.237986</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2020-04-17</td>\n",
" <td>-2.036942</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>2020-04-18</td>\n",
" <td>1.039138</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>2020-04-19</td>\n",
" <td>1.301815</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>2020-04-20</td>\n",
" <td>-2.493354</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>2020-04-21</td>\n",
" <td>0.209527</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>2020-04-22</td>\n",
" <td>0.210549</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>2020-04-23</td>\n",
" <td>0.157053</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>2020-04-24</td>\n",
" <td>0.198348</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>2020-04-25</td>\n",
" <td>-0.244048</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>2020-04-26</td>\n",
" <td>-1.181114</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>2020-04-27</td>\n",
" <td>-0.952741</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>2020-04-28</td>\n",
" <td>1.880078</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>2020-04-29</td>\n",
" <td>-0.560347</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>2020-04-30</td>\n",
" <td>-1.799053</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>2020-05-01</td>\n",
" <td>-0.251278</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" date ts\n",
"0 2020-04-12 -1.196137\n",
"1 2020-04-13 -0.246917\n",
"2 2020-04-14 -1.460960\n",
"3 2020-04-15 -0.322581\n",
"4 2020-04-16 0.237986\n",
"5 2020-04-17 -2.036942\n",
"6 2020-04-18 1.039138\n",
"7 2020-04-19 1.301815\n",
"8 2020-04-20 -2.493354\n",
"9 2020-04-21 0.209527\n",
"10 2020-04-22 0.210549\n",
"11 2020-04-23 0.157053\n",
"12 2020-04-24 0.198348\n",
"13 2020-04-25 -0.244048\n",
"14 2020-04-26 -1.181114\n",
"15 2020-04-27 -0.952741\n",
"16 2020-04-28 1.880078\n",
"17 2020-04-29 -0.560347\n",
"18 2020-04-30 -1.799053\n",
"19 2020-05-01 -0.251278"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"torch.Tensor"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts = torch.from_numpy(df.ts.values).float()\n",
"type(ts)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([20])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts.shape"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(tensor([[-1.1961, -0.2469, -1.4610, -0.3226, 0.2380, -2.0369, 1.0391, 1.3018,\n",
" -2.4934, 0.2095, 0.2105, 0.1571, 0.1983, -0.2440, -1.1811],\n",
" [-0.2469, -1.4610, -0.3226, 0.2380, -2.0369, 1.0391, 1.3018, -2.4934,\n",
" 0.2095, 0.2105, 0.1571, 0.1983, -0.2440, -1.1811, -0.9527],\n",
" [-1.4610, -0.3226, 0.2380, -2.0369, 1.0391, 1.3018, -2.4934, 0.2095,\n",
" 0.2105, 0.1571, 0.1983, -0.2440, -1.1811, -0.9527, 1.8801],\n",
" [-0.3226, 0.2380, -2.0369, 1.0391, 1.3018, -2.4934, 0.2095, 0.2105,\n",
" 0.1571, 0.1983, -0.2440, -1.1811, -0.9527, 1.8801, -0.5603],\n",
" [ 0.2380, -2.0369, 1.0391, 1.3018, -2.4934, 0.2095, 0.2105, 0.1571,\n",
" 0.1983, -0.2440, -1.1811, -0.9527, 1.8801, -0.5603, -1.7991],\n",
" [-2.0369, 1.0391, 1.3018, -2.4934, 0.2095, 0.2105, 0.1571, 0.1983,\n",
" -0.2440, -1.1811, -0.9527, 1.8801, -0.5603, -1.7991, -0.2513]]),\n",
" torch.Size([6, 15]))"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Creating windows of 15 over the dataset\n",
"ts_dataset = ts.unfold(0,size =15, step = 1)\n",
"ts_dataset, ts_dataset.shape"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"# Sequential nn\n",
"bz, _ = ts_dataset.shape\n",
"window = 15\n",
"ffn = nn.Sequential(nn.Linear(in_features = window,out_features = 64 ),\n",
" nn.ReLU(),\n",
" nn.Linear(in_features = 64, out_features = 32),\n",
" nn.ReLU(),\n",
" nn.Linear(in_features = 32, out_features = 32),\n",
" nn.ReLU(),\n",
" nn.Linear(in_features = 32, out_features = 1))\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[[-1.1961],\n",
" [-0.2469],\n",
" [-1.4610],\n",
" [-0.3226],\n",
" [ 0.2380],\n",
" [-2.0369],\n",
" [ 1.0391],\n",
" [ 1.3018],\n",
" [-2.4934],\n",
" [ 0.2095],\n",
" [ 0.2105],\n",
" [ 0.1571],\n",
" [ 0.1983],\n",
" [-0.2440],\n",
" [-1.1811]],\n",
"\n",
" [[-0.2469],\n",
" [-1.4610],\n",
" [-0.3226],\n",
" [ 0.2380],\n",
" [-2.0369],\n",
" [ 1.0391],\n",
" [ 1.3018],\n",
" [-2.4934],\n",
" [ 0.2095],\n",
" [ 0.2105],\n",
" [ 0.1571],\n",
" [ 0.1983],\n",
" [-0.2440],\n",
" [-1.1811],\n",
" [-0.9527]],\n",
"\n",
" [[-1.4610],\n",
" [-0.3226],\n",
" [ 0.2380],\n",
" [-2.0369],\n",
" [ 1.0391],\n",
" [ 1.3018],\n",
" [-2.4934],\n",
" [ 0.2095],\n",
" [ 0.2105],\n",
" [ 0.1571],\n",
" [ 0.1983],\n",
" [-0.2440],\n",
" [-1.1811],\n",
" [-0.9527],\n",
" [ 1.8801]],\n",
"\n",
" [[-0.3226],\n",
" [ 0.2380],\n",
" [-2.0369],\n",
" [ 1.0391],\n",
" [ 1.3018],\n",
" [-2.4934],\n",
" [ 0.2095],\n",
" [ 0.2105],\n",
" [ 0.1571],\n",
" [ 0.1983],\n",
" [-0.2440],\n",
" [-1.1811],\n",
" [-0.9527],\n",
" [ 1.8801],\n",
" [-0.5603]],\n",
"\n",
" [[ 0.2380],\n",
" [-2.0369],\n",
" [ 1.0391],\n",
" [ 1.3018],\n",
" [-2.4934],\n",
" [ 0.2095],\n",
" [ 0.2105],\n",
" [ 0.1571],\n",
" [ 0.1983],\n",
" [-0.2440],\n",
" [-1.1811],\n",
" [-0.9527],\n",
" [ 1.8801],\n",
" [-0.5603],\n",
" [-1.7991]],\n",
"\n",
" [[-2.0369],\n",
" [ 1.0391],\n",
" [ 1.3018],\n",
" [-2.4934],\n",
" [ 0.2095],\n",
" [ 0.2105],\n",
" [ 0.1571],\n",
" [ 0.1983],\n",
" [-0.2440],\n",
" [-1.1811],\n",
" [-0.9527],\n",
" [ 1.8801],\n",
" [-0.5603],\n",
" [-1.7991],\n",
" [-0.2513]]])"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rnn_input = ts_dataset.unsqueeze(-1)\n",
"rnn_input"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"# GRU\n",
"gru = nn.GRU(\n",
" input_size = 1,\n",
" hidden_size = 32,\n",
" num_layers = 5,\n",
" batch_first = True,\n",
" dropout = 0\n",
")\n",
"output, hidden_states = gru(rnn_input)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([6, 15, 32])"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"output.shape"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
"# LSTM\n",
"lstm = nn.LSTM(\n",
" input_size = 1,\n",
" hidden_size = 32,\n",
" num_layers = 5,\n",
" batch_first = True,\n",
" dropout = 0\n",
")\n",
"output, (hidden_states, cell_states) = lstm(rnn_input)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(torch.Size([6, 15, 32]), torch.Size([5, 6, 32]), torch.Size([5, 6, 32]))"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"output.shape, hidden_states.shape, cell_states.shape"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[1, 2, 3],\n",
" [4, 5, 6],\n",
" [7, 8, 9]], dtype=torch.int32)"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#unfold example\n",
"import torch\n",
"data_ex1 = np.arange(1,10).reshape(3,3)\n",
"ts_ex1 = torch.from_numpy(data_ex1)\n",
"ts_ex1"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"tensor([[[1, 4],\n",
" [2, 5],\n",
" [3, 6]]], dtype=torch.int32)"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts_ex1.unfold(0,2,2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "py310",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.13"
}
},
"nbformat": 4,
"nbformat_minor": 2
}