diff --git a/1_to_1_multi_layer.ipynb b/1_to_1_multi_layer.ipynb index 674d7ce..70ef2c4 100644 --- a/1_to_1_multi_layer.ipynb +++ b/1_to_1_multi_layer.ipynb @@ -24,7 +24,11 @@ "import matplotlib.pyplot as plt\n", "import tensorflow as tf\n", "from tensorflow.python.framework import ops\n", - "from sklearn import preprocessing" + "from sklearn import preprocessing\n", + "import pickle as pkl\n", + "from pathlib import Path\n", + "\n", + "#import seaborn as sns" ] }, { @@ -44,6 +48,25 @@ "cell_type": "code", "execution_count": 3, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'test': 1, 'a': 'b'}\n" + ] + } + ], + "source": [ + "dic = {\"test\": 1, \"a\": \"b\"}\n", + "pkl.dump( dic, open( \"save.pkl\", \"wb\" ) )\n", + "print(pkl.load( open( \"save.pkl\", \"rb\" ) ))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, "outputs": [], "source": [ "#Check testset with arbitrary particle\n", @@ -58,7 +81,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -89,7 +112,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -122,7 +145,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -134,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -201,7 +224,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -268,7 +291,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -282,7 +305,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -318,24 +341,9 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 12, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[-0.02109399 0.0394468 -0.01875739]\n", - " [-0.0158357 0.02916325 -0.02021501]\n", - " [-0.00411211 0.01346626 -0.01817778]\n", - " [-0.00314466 0.01169437 -0.00971874]\n", - " [ 0.00827457 -0.00905463 -0.00903793]\n", - " [ 0.00906477 -0.01100179 -0.00610165]\n", - " [ 0.01623521 -0.02745446 0.00036546]\n", - " [ 0.01879028 -0.03098714 -0.0009012 ]]\n" - ] - } - ], + "outputs": [], "source": [ "#scale the data\n", "\n", @@ -344,12 +352,17 @@ "train_set = scaler(train_set, scalerfunc = func)\n", "test_set = scaler(test_set, scalerfunc = func)\n", "\n", - "print(train_set[0,:,:])" + "if func == \"minmax\":\n", + " scalor = min_max_scalor\n", + "elif func == \"std\":\n", + " scalor = std_scalor\n", + "\n", + "#print(train_set[0,:,:])" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -394,7 +407,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -409,7 +422,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -445,14 +458,14 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "class RNNPlacePrediction():\n", " \n", " \n", - " def __init__(self, time_steps, future_steps, ninputs, ncells, num_output, cell_type=\"basic_rnn\", activation=\"relu\"):\n", + " def __init__(self, time_steps, future_steps, ninputs, ncells, num_output, cell_type=\"basic_rnn\", activation=\"relu\", scalor= scalor):\n", " \n", " self.nsteps = time_steps\n", " self.future_steps = future_steps\n", @@ -461,43 +474,45 @@ " self.num_output = num_output\n", " self._ = cell_type #later used to create folder name\n", " self.__ = activation #later used to create folder name\n", + " self.loss_list = []\n", + " self.scalor = scalor\n", " \n", " #### The input is of shape (num_examples, time_steps, ninputs)\n", " #### ninputs is the dimentionality (number of features) of the time series (here coordinates)\n", - " self.X = tf.placeholder(dtype=tf.float32, shape=(None, time_steps, ninputs))\n", - " self.Y = tf.placeholder(dtype=tf.float32, shape=(None, time_steps, ninputs))\n", + " self.X = tf.placeholder(dtype=tf.float32, shape=(None, self.nsteps, ninputs))\n", + " self.Y = tf.placeholder(dtype=tf.float32, shape=(None, self.nsteps, ninputs))\n", "\n", " \n", " #Check if activation function valid and set activation\n", - " if activation==\"relu\":\n", + " if self.__==\"relu\":\n", " self.activation = tf.nn.relu\n", " \n", - " elif activation==\"tanh\":\n", + " elif self.__==\"tanh\":\n", " self.activation = tf.nn.tanh\n", " \n", - " elif activation==\"leaky_relu\":\n", + " elif self.__==\"leaky_relu\":\n", " self.activation = tf.nn.leaky_relu\n", " \n", - " elif activation==\"elu\":\n", + " elif self.__==\"elu\":\n", " self.activation = tf.nn.elu\n", " \n", " else:\n", - " raise ValueError(\"Wrong rnn avtivation function: {}\".format(activation))\n", + " raise ValueError(\"Wrong rnn avtivation function: {}\".format(self.__))\n", " \n", " \n", " \n", " #Check if cell type valid and set cell_type\n", - " if cell_type==\"basic_rnn\":\n", + " if self._==\"basic_rnn\":\n", " self.cell_type = tf.contrib.rnn.BasicRNNCell\n", " \n", - " elif cell_type==\"lstm\":\n", + " elif self._==\"lstm\":\n", " self.cell_type = tf.contrib.rnn.BasicLSTMCell\n", " \n", - " elif cell_type==\"GRU\":\n", + " elif self._==\"GRU\":\n", " self.cell_type = tf.contrib.rnn.GRUCell\n", " \n", " else:\n", - " raise ValueError(\"Wrong rnn cell type: {}\".format(cell_type))\n", + " raise ValueError(\"Wrong rnn cell type: {}\".format(self._))\n", " \n", " \n", " #Check Input of ncells \n", @@ -543,23 +558,23 @@ " self.sess.run(self.init)\n", " \n", " \n", - " def save(self, filename=\"./rnn_model/rnn_basic\"):\n", - " self.saver.save(self.sess, filename)\n", + " def save(self, rnn_folder=\"./rnn_model/rnn_basic\"):\n", + " self.saver.save(self.sess, rnn_folder) \n", " \n", " \n", " def load(self, filename=\"./rnn_model/rnn_basic\"):\n", " self.saver.restore(self.sess, filename)\n", - " \n", - " \n", + "\n", + " \n", " \n", " def fit(self, minibatches, epochs, print_step, checkpoint = 5, patience = 200):\n", - " self.loss_list = []\n", " patience_cnt = 0\n", - " epoche_save = 0\n", + " start = len(self.loss_list)\n", + " epoche_save = start\n", " \n", " folder = \"./rnn_model_\" + str(self._)+ \"_\" + self.__ + \"_\" + str(self.ncells).replace(\" \",\"\") + \"c\" + \"_checkpoint/rnn_basic\"\n", " \n", - " for iep in range(epochs):\n", + " for iep in range(start, start + epochs):\n", " loss = 0\n", " \n", " batches = len(minibatches)\n", @@ -586,7 +601,7 @@ " epoche_save = iep\n", " \n", " #early stopping with patience\n", - " if iep > 1 and abs(self.loss_list[iep]-self.loss_list[iep-1]) < 2/10**7:\n", + " if iep > 1 and abs(self.loss_list[iep]-self.loss_list[iep-1]) < 1.5/10**7:\n", " patience_cnt += 1\n", " #print(\"Patience now at: \", patience_cnt, \" of \", patience)\n", " \n", @@ -605,8 +620,14 @@ " #Set model back to the last checkpoint if performance was better\n", " if self.loss_list[epoche_save] < self.loss_list[iep]:\n", " self.load(folder)\n", - " print(\"\\n\", \"Last checkpoint at epoch \", epoche_save, \" loaded\")\n", - " print(\"Performance at last checkpoint is \" ,self.loss_list[iep] - self.loss_list[epoche_save], \" better\" )\n", + " print(\"\\n\")\n", + " print(\"State of last checkpoint checkpoint at epoch \", epoche_save, \" restored\")\n", + " print(\"Performance at last checkpoint is \" ,(self.loss_list[iep] - self.loss_list[epoche_save])/self.loss_list[iep]*100, \"% better\" )\n", + " \n", + " folder = \"./rnn_model_\" + str(self._)+ \"_\" + self.__ + \"_\" + str(self.ncells).replace(\" \",\"\") + \"c/rnn_basic\"\n", + " self.save(folder)\n", + " print(\"\\n\")\n", + " print(\"Model saved in at: \", folder)\n", " \n", " \n", " \n", @@ -618,14 +639,68 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "def full_save(rnn):\n", + " folder = \"./rnn_model_\" + str(rnn._)+ \"_\" + rnn.__ + \"_\" + str(len(rnn.ncells)) + \"l_\" + str(rnn.ncells).replace(\" \",\"\") + \"c/rnn_basic\"\n", + " rnn.save(folder)\n", + " pkl_name = folder[2:-10] + \".pkl\"\n", + " \n", + " \n", + " pkl_dic = {\"ncells\": rnn.ncells,\n", + " \"ninputs\": rnn.ninputs,\n", + " \"future_steps\": rnn.future_steps,\n", + " \"nsteps\": rnn.nsteps,\n", + " \"num_output\": rnn.num_output,\n", + " \"cell_type\": rnn._, #cell_type\n", + " \"activation\": rnn.__, #Activation\n", + " \"loss_list\": rnn.loss_list,\n", + " \"scalor\": rnn.scalor}\n", + " pkl.dump( pkl_dic, open(pkl_name , \"wb\" ) )\n", + "\n", + "\n", + "\n", + "def full_load(folder):\n", + " #Directory of okl file\n", + " pkl_name = folder[2:-10] + \".pkl\"\n", + " \n", + " #Check if pkl file exists\n", + " my_file = Path(pkl_name)\n", + " if my_file.is_file() == False:\n", + " raise ValueError(\"There is no .pkl file with the name: {}\".format(pkl_name))\n", + " \n", + " pkl_dic = pkl.load( open(pkl_name , \"rb\" ) )\n", + " ncells = pkl_dic[\"ncells\"]\n", + " ninputs = pkl_dic[\"ninputs\"]\n", + " scalor = pkl_dic[\"scalor\"]\n", + " future_steps = pkl_dic[\"future_steps\"]\n", + " timesteps = pkl_dic[\"nsteps\"] \n", + " num_output = pkl_dic[\"num_output\"]\n", + " cell_type = pkl_dic[\"cell_type\"]\n", + " activation = pkl_dic[\"activation\"]\n", + "\n", + " tf.reset_default_graph()\n", + " rnn = RNNPlacePrediction(time_steps=timesteps, future_steps=future_steps, ninputs=ninputs, \n", + " ncells=ncells, num_output=num_output, cell_type=cell_type, activation=activation, scalor=scalor)\n", + "\n", + " rnn.set_cost_and_functions()\n", + " \n", + " rnn.load(folder)\n", + " \n", + " rnn.loss_list = pkl_dic[\"loss_list\"]\n", + " \n", + " return rnn\n", + "\n", + "def get_rnn_folder(ncells, cell_type, activation):\n", + " folder = \"./rnn_model_\" + cell_type + \"_\" + activation + \"_\" + str(len(ncells)) + \"l_\" + str(ncells).replace(\" \",\"\") + \"c/rnn_basic\"\n", + " return folder" + ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -642,19 +717,9 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "WARNING:tensorflow:From c:\\users\\sa_li\\anaconda3\\envs\\rnn-tf-ker\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\base.py:198: retry (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "Use the retry module or similar alternatives.\n" - ] - } - ], + "outputs": [], "source": [ "tf.reset_default_graph()\n", "rnn = RNNPlacePrediction(time_steps=timesteps, future_steps=future_steps, ninputs=ninputs, \n", @@ -663,7 +728,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -672,7 +737,14 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 28, "metadata": { "scrolled": true }, @@ -681,416 +753,32 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch number 0\n", - "Cost: 10.041199672838395 e-3\n", - "Patience: 0 / 200\n", - "Last checkpoint at: Epoch 0 \n", - "\n", "Epoch number 5\n", - "Cost: 0.14646259134021053 e-3\n", + "Cost: 138389.9095210623 e-6\n", "Patience: 0 / 200\n", "Last checkpoint at: Epoch 5 \n", "\n", - "Epoch number 10\n", - "Cost: 0.14038292159811852 e-3\n", - "Patience: 5 / 200\n", - "Last checkpoint at: Epoch 10 \n", "\n", - "Epoch number 15\n", - "Cost: 0.13558934176429868 e-3\n", - "Patience: 10 / 200\n", - "Last checkpoint at: Epoch 15 \n", "\n", - "Epoch number 20\n", - "Cost: 0.12642440127278182 e-3\n", - "Patience: 14 / 200\n", - "Last checkpoint at: Epoch 20 \n", - "\n", - "Epoch number 25\n", - "Cost: 0.1116786241912818 e-3\n", - "Patience: 16 / 200\n", - "Last checkpoint at: Epoch 25 \n", - "\n", - "Epoch number 30\n", - "Cost: 0.10637743763893129 e-3\n", - "Patience: 20 / 200\n", - "Last checkpoint at: Epoch 30 \n", - "\n", - "Epoch number 35\n", - "Cost: 0.10180761176904544 e-3\n", - "Patience: 21 / 200\n", - "Last checkpoint at: Epoch 35 \n", - "\n", - "Epoch number 40\n", - "Cost: 0.10329305703325713 e-3\n", - "Patience: 25 / 200\n", - "Last checkpoint at: Epoch 35 \n", - "\n", - "Epoch number 45\n", - "Cost: 0.09893714772299567 e-3\n", - "Patience: 26 / 200\n", - "Last checkpoint at: Epoch 45 \n", - "\n", - "Epoch number 50\n", - "Cost: 0.09669851916693548 e-3\n", - "Patience: 28 / 200\n", - "Last checkpoint at: Epoch 50 \n", - "\n", - "Epoch number 55\n", - "Cost: 0.09474931256919901 e-3\n", - "Patience: 30 / 200\n", - "Last checkpoint at: Epoch 55 \n", - "\n", - "Epoch number 60\n", - "Cost: 0.09272654031210163 e-3\n", - "Patience: 33 / 200\n", - "Last checkpoint at: Epoch 60 \n", - "\n", - "Epoch number 65\n", - "Cost: 0.09420149952812279 e-3\n", - "Patience: 35 / 200\n", - "Last checkpoint at: Epoch 60 \n", - "\n", - "Epoch number 70\n", - "Cost: 0.09541216964630331 e-3\n", - "Patience: 36 / 200\n", - "Last checkpoint at: Epoch 60 \n", - "\n", - "Epoch number 75\n", - "Cost: 0.09047800716522962 e-3\n", - "Patience: 39 / 200\n", - "Last checkpoint at: Epoch 75 \n", - "\n", - "Epoch number 80\n", - "Cost: 0.09089725666699257 e-3\n", - "Patience: 39 / 200\n", - "Last checkpoint at: Epoch 75 \n", - "\n", - "Epoch number 85\n", - "Cost: 0.08590354093726962 e-3\n", - "Patience: 40 / 200\n", - "Last checkpoint at: Epoch 85 \n", - "\n", - "Epoch number 90\n", - "Cost: 0.08550771444595041 e-3\n", - "Patience: 41 / 200\n", - "Last checkpoint at: Epoch 90 \n", - "\n", - "Epoch number 95\n", - "Cost: 0.08262849370750816 e-3\n", - "Patience: 42 / 200\n", - "Last checkpoint at: Epoch 95 \n", - "\n", - "Epoch number 100\n", - "Cost: 0.08081882078066825 e-3\n", - "Patience: 45 / 200\n", - "Last checkpoint at: Epoch 100 \n", - "\n", - "Epoch number 105\n", - "Cost: 0.08332692371542624 e-3\n", - "Patience: 48 / 200\n", - "Last checkpoint at: Epoch 100 \n", - "\n", - "Epoch number 110\n", - "Cost: 0.0850605532871262 e-3\n", - "Patience: 50 / 200\n", - "Last checkpoint at: Epoch 100 \n", - "\n", - "Epoch number 115\n", - "Cost: 0.08140491588571248 e-3\n", - "Patience: 50 / 200\n", - "Last checkpoint at: Epoch 100 \n", - "\n", - "Epoch number 120\n", - "Cost: 0.0823190781916987 e-3\n", - "Patience: 52 / 200\n", - "Last checkpoint at: Epoch 100 \n", - "\n", - "Epoch number 125\n", - "Cost: 0.0766505290038309 e-3\n", - "Patience: 55 / 200\n", - "Last checkpoint at: Epoch 125 \n", - "\n", - "Epoch number 130\n", - "Cost: 0.07502320984210027 e-3\n", - "Patience: 56 / 200\n", - "Last checkpoint at: Epoch 130 \n", - "\n", - "Epoch number 135\n", - "Cost: 0.0758755330102855 e-3\n", - "Patience: 57 / 200\n", - "Last checkpoint at: Epoch 130 \n", - "\n", - "Epoch number 140\n", - "Cost: 0.0731801113207884 e-3\n", - "Patience: 58 / 200\n", - "Last checkpoint at: Epoch 140 \n", - "\n", - "Epoch number 145\n", - "Cost: 0.0745931863499944 e-3\n", - "Patience: 60 / 200\n", - "Last checkpoint at: Epoch 140 \n", - "\n", - "Epoch number 150\n", - "Cost: 0.05597170093096793 e-3\n", - "Patience: 60 / 200\n", - "Last checkpoint at: Epoch 150 \n", - "\n", - "Epoch number 155\n", - "Cost: 0.0448569248584 e-3\n", - "Patience: 61 / 200\n", - "Last checkpoint at: Epoch 155 \n", - "\n", - "Epoch number 160\n", - "Cost: 0.0377340710404864 e-3\n", - "Patience: 63 / 200\n", - "Last checkpoint at: Epoch 160 \n", - "\n", - "Epoch number 165\n", - "Cost: 0.03712705128759324 e-3\n", - "Patience: 64 / 200\n", - "Last checkpoint at: Epoch 165 \n", - "\n", - "Epoch number 170\n", - "Cost: 0.037240219558527236 e-3\n", - "Patience: 67 / 200\n", - "Last checkpoint at: Epoch 165 \n", - "\n", - "Epoch number 175\n", - "Cost: 0.041023939860330774 e-3\n", - "Patience: 67 / 200\n", - "Last checkpoint at: Epoch 165 \n", - "\n", - "Epoch number 180\n", - "Cost: 0.03179026030108056 e-3\n", - "Patience: 69 / 200\n", - "Last checkpoint at: Epoch 180 \n", - "\n", - "Epoch number 185\n", - "Cost: 0.037844479401370486 e-3\n", - "Patience: 71 / 200\n", - "Last checkpoint at: Epoch 180 \n", - "\n", - "Epoch number 190\n", - "Cost: 0.02333719505181665 e-3\n", - "Patience: 72 / 200\n", - "Last checkpoint at: Epoch 190 \n", - "\n", - "Epoch number 195\n", - "Cost: 0.02318771433412157 e-3\n", - "Patience: 77 / 200\n", - "Last checkpoint at: Epoch 195 \n", - "\n", - "Epoch number 200\n", - "Cost: 0.025808127712151234 e-3\n", - "Patience: 79 / 200\n", - "Last checkpoint at: Epoch 195 \n", - "\n", - "Epoch number 205\n", - "Cost: 0.021487966265301518 e-3\n", - "Patience: 82 / 200\n", - "Last checkpoint at: Epoch 205 \n", - "\n", - "Epoch number 210\n", - "Cost: 0.020788879447401144 e-3\n", - "Patience: 85 / 200\n", - "Last checkpoint at: Epoch 210 \n", - "\n", - "Epoch number 215\n", - "Cost: 0.02056433168810203 e-3\n", - "Patience: 85 / 200\n", - "Last checkpoint at: Epoch 215 \n", - "\n", - "Epoch number 220\n", - "Cost: 0.016506806942027438 e-3\n", - "Patience: 89 / 200\n", - "Last checkpoint at: Epoch 220 \n", - "\n", - "Epoch number 225\n", - "Cost: 0.020985714496767265 e-3\n", - "Patience: 91 / 200\n", - "Last checkpoint at: Epoch 220 \n", - "\n", - "Epoch number 230\n", - "Cost: 0.011625469693520225 e-3\n", - "Patience: 94 / 200\n", - "Last checkpoint at: Epoch 230 \n", - "\n", - "Epoch number 235\n", - "Cost: 0.013143771576188614 e-3\n", - "Patience: 98 / 200\n", - "Last checkpoint at: Epoch 230 \n", - "\n", - "Epoch number 240\n", - "Cost: 0.017444268354317522 e-3\n", - "Patience: 100 / 200\n", - "Last checkpoint at: Epoch 230 \n", - "\n", - "Epoch number 245\n", - "Cost: 0.013935790078942367 e-3\n", - "Patience: 101 / 200\n", - "Last checkpoint at: Epoch 230 \n", - "\n", - "Epoch number 250\n", - "Cost: 0.01056458899875771 e-3\n", - "Patience: 103 / 200\n", - "Last checkpoint at: Epoch 250 \n", - "\n", - "Epoch number 255\n", - "Cost: 0.013950063650090088 e-3\n", - "Patience: 106 / 200\n", - "Last checkpoint at: Epoch 250 \n", - "\n", - "Epoch number 260\n", - "Cost: 0.015239623812800694 e-3\n", - "Patience: 109 / 200\n", - "Last checkpoint at: Epoch 250 \n", - "\n", - "Epoch number 265\n", - "Cost: 0.014050647958820845 e-3\n", - "Patience: 112 / 200\n", - "Last checkpoint at: Epoch 250 \n", - "\n", - "Epoch number 270\n", - "Cost: 0.009441311336326799 e-3\n", - "Patience: 112 / 200\n", - "Last checkpoint at: Epoch 270 \n", - "\n", - "Epoch number 275\n", - "Cost: 0.00812686008391617 e-3\n", - "Patience: 116 / 200\n", - "Last checkpoint at: Epoch 275 \n", - "\n", - "Epoch number 280\n", - "Cost: 0.009064912048531968 e-3\n", - "Patience: 118 / 200\n", - "Last checkpoint at: Epoch 275 \n", - "\n", - "Epoch number 285\n", - "Cost: 0.007350245905786808 e-3\n", - "Patience: 119 / 200\n", - "Last checkpoint at: Epoch 285 \n", - "\n", - "Epoch number 290\n", - "Cost: 0.009190695427025004 e-3\n", - "Patience: 123 / 200\n", - "Last checkpoint at: Epoch 285 \n", - "\n", - "Epoch number 295\n", - "Cost: 0.009242598896386706 e-3\n", - "Patience: 126 / 200\n", - "Last checkpoint at: Epoch 285 \n", - "\n", - "Epoch number 300\n", - "Cost: 0.009243554339921871 e-3\n", - "Patience: 131 / 200\n", - "Last checkpoint at: Epoch 285 \n", - "\n", - "Epoch number 305\n", - "Cost: 0.008543941756680069 e-3\n", - "Patience: 134 / 200\n", - "Last checkpoint at: Epoch 285 \n", - "\n", - "Epoch number 310\n", - "Cost: 0.008661668753700995 e-3\n", - "Patience: 137 / 200\n", - "Last checkpoint at: Epoch 285 \n", - "\n", - "Epoch number 315\n", - "Cost: 0.008509848796282003 e-3\n", - "Patience: 142 / 200\n", - "Last checkpoint at: Epoch 285 \n", - "\n", - "Epoch number 320\n", - "Cost: 0.009688999833745953 e-3\n", - "Patience: 145 / 200\n", - "Last checkpoint at: Epoch 285 \n", - "\n", - "Epoch number 325\n", - "Cost: 0.010096690673774302 e-3\n", - "Patience: 148 / 200\n", - "Last checkpoint at: Epoch 285 \n", - "\n", - "Epoch number 330\n", - "Cost: 0.008155997478597589 e-3\n", - "Patience: 152 / 200\n", - "Last checkpoint at: Epoch 285 \n", - "\n", - "Epoch number 335\n", - "Cost: 0.012822152828138837 e-3\n", - "Patience: 156 / 200\n", - "Last checkpoint at: Epoch 285 \n", - "\n", - "Epoch number 340\n", - "Cost: 0.00638995292552244 e-3\n", - "Patience: 159 / 200\n", - "Last checkpoint at: Epoch 340 \n", - "\n", - "Epoch number 345\n", - "Cost: 0.0066921474113924165 e-3\n", - "Patience: 164 / 200\n", - "Last checkpoint at: Epoch 340 \n", - "\n", - "Epoch number 350\n", - "Cost: 0.006151222709028862 e-3\n", - "Patience: 169 / 200\n", - "Last checkpoint at: Epoch 350 \n", - "\n", - "Epoch number 355\n", - "Cost: 0.006081407573606641 e-3\n", - "Patience: 170 / 200\n", - "Last checkpoint at: Epoch 355 \n", - "\n", - "Epoch number 360\n", - "Cost: 0.007673800716494293 e-3\n", - "Patience: 175 / 200\n", - "Last checkpoint at: Epoch 355 \n", - "\n", - "Epoch number 365\n", - "Cost: 0.0072596388893911585 e-3\n", - "Patience: 180 / 200\n", - "Last checkpoint at: Epoch 355 \n", - "\n", - "Epoch number 370\n", - "Cost: 0.006717292966099427 e-3\n", - "Patience: 184 / 200\n", - "Last checkpoint at: Epoch 355 \n", - "\n", - "Epoch number 375\n", - "Cost: 0.006316999443175093 e-3\n", - "Patience: 189 / 200\n", - "Last checkpoint at: Epoch 355 \n", - "\n", - "Epoch number 380\n", - "Cost: 0.006750347554461382 e-3\n", - "Patience: 193 / 200\n", - "Last checkpoint at: Epoch 355 \n", - "\n", - "Epoch number 385\n", - "Cost: 0.006520240363665544 e-3\n", - "Patience: 198 / 200\n", - "Last checkpoint at: Epoch 355 \n", - "\n", - "\n", - " Early stopping at epoch 387 , difference: 9.317458766708246e-07\n", - "Cost: 5.49251195054162e-06\n" + "Model saved in at: ./rnn_model_lstm_leaky_relu_[50,40,30,20,10]c/rnn_basic\n" ] } ], "source": [ - "rnn.fit(minibatches, epochs = 5000, print_step=5)" + "rnn.fit(minibatches, epochs = 5, print_step=5)\n", + "full_save(rnn)" ] }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 29, "metadata": { "scrolled": false }, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -1110,18 +798,16 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "#save in a folder that describes the model\n", - "folder = \"./rnn_model_\" + str(rnn._)+ \"_\" + rnn.__ + \"_\" + str(len(rnn.ncells)) + \"l_\" + str(rnn.ncells).replace(\" \",\"\") + \"c/rnn_basic\"\n", - "rnn.save(folder)" + "#full_save(rnn)" ] }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -1133,13 +819,13 @@ } ], "source": [ - "#folder = \"./rnn_model_\" + str(rnn._)+ \"_\" + rnn.__ + \"_\" + str(len(rnn.ncells)) + \"l_\" + str(rnn.ncells).replace(\" \",\"\") + \"c/rnn_basic\"\n", - "#rnn.load(folder)" + "folder = get_rnn_folder(ncells = [50, 40, 30, 20, 10], cell_type = \"lstm\", activation = \"leaky_relu\")\n", + "rnn = full_load(folder)" ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1148,7 +834,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1159,23 +845,9 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[ 0.00610282 0.00100984 0.02600916]\n", - " [ 0.01632101 -0.01520294 0.02987524]\n", - " [ 0.06068288 0.00697896 0.06441782]\n", - " [-0.0119639 -0.04535145 0.07225598]\n", - " [ 0.04132241 0.01145548 0.05150088]\n", - " [-0.03290992 0.10355402 0.09310361]\n", - " [ 0.00265487 0.04124176 0.08941123]]\n" - ] - } - ], + "outputs": [], "source": [ "#Here i subtract a prediction (random particle) from the target to get an idea of the predictions\n", "\n", @@ -1189,24 +861,13 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "7.513113e-06" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "#Here I evaluate my model on the test set based on mean_squared_error\n", "\n", - "rnn.sess.run(rnn.cost, feed_dict={rnn.X:test_input, rnn.Y:test_target})" + "print(\"Loss on test set:\", rnn.sess.run(rnn.cost, feed_dict={rnn.X:test_input, rnn.Y:test_target}))" ] }, { diff --git a/matched_8hittracks.pkl b/matched_8hittracks.pkl new file mode 100644 index 0000000..73e6f0f --- /dev/null +++ b/matched_8hittracks.pkl Binary files differ diff --git "a/trained_models/rnn_model_lstm_leaky_relu_5l_\13350,40,30,20,10\135c/checkpoint" "b/trained_models/rnn_model_lstm_leaky_relu_5l_\13350,40,30,20,10\135c/checkpoint" deleted file mode 100644 index cb76c82..0000000 --- "a/trained_models/rnn_model_lstm_leaky_relu_5l_\13350,40,30,20,10\135c/checkpoint" +++ /dev/null @@ -1,3 +0,0 @@ -model_checkpoint_path: "rnn_basic" -all_model_checkpoint_paths: "..\\rnn_model_lstm_leaky_relu_[50,40,30,20,10]c_checkpoint\\rnn_basic" -all_model_checkpoint_paths: "rnn_basic" diff --git "a/trained_models/rnn_model_lstm_leaky_relu_5l_\13350,40,30,20,10\135c/rnn_basic.data-00000-of-00001" "b/trained_models/rnn_model_lstm_leaky_relu_5l_\13350,40,30,20,10\135c/rnn_basic.data-00000-of-00001" deleted file mode 100644 index 0b21e8b..0000000 --- "a/trained_models/rnn_model_lstm_leaky_relu_5l_\13350,40,30,20,10\135c/rnn_basic.data-00000-of-00001" +++ /dev/null Binary files differ diff --git "a/trained_models/rnn_model_lstm_leaky_relu_5l_\13350,40,30,20,10\135c/rnn_basic.index" "b/trained_models/rnn_model_lstm_leaky_relu_5l_\13350,40,30,20,10\135c/rnn_basic.index" deleted file mode 100644 index e9f42c1..0000000 --- "a/trained_models/rnn_model_lstm_leaky_relu_5l_\13350,40,30,20,10\135c/rnn_basic.index" +++ /dev/null Binary files differ diff --git "a/trained_models/rnn_model_lstm_leaky_relu_5l_\13350,40,30,20,10\135c/rnn_basic.meta" "b/trained_models/rnn_model_lstm_leaky_relu_5l_\13350,40,30,20,10\135c/rnn_basic.meta" deleted file mode 100644 index d1badc9..0000000 --- "a/trained_models/rnn_model_lstm_leaky_relu_5l_\13350,40,30,20,10\135c/rnn_basic.meta" +++ /dev/null Binary files differ