{ "cells": [ { "cell_type": "markdown", "id": "ccd078c8", "metadata": {}, "source": [ "Antonio Fonseca\n", "\n", "GeoComput & ML\n", "\n", "May 27th, 2021\n" ] }, { "cell_type": "markdown", "id": "c66885fe", "metadata": {}, "source": [ "# LSTM Network\n", "\n", "The Long Short-Term Memory network (LSTM) is a type of Recurrent Neural Network (RNN). A benefit of this type of network is that it can learn and remember over long sequences and does not rely on a pre-specified window lagged observation as input.\n", "\n", "By default, an LSTM layer in Keras maintains state between data within one batch. A batch of data is a fixed-sized number of rows from the training dataset that defines how many patterns to process before updating the weights of the network. State in the LSTM layer between batches is cleared by default, therefore we must make the LSTM stateful. This gives us fine-grained control over when state of the LSTM layer is cleared, by calling the reset_states() function.\n", "\n", "The LSTM layer expects input to be in a matrix with the dimensions: [samples, time steps, features].\n", "\n", "- Samples: These are independent observations from the domain, typically rows of data.\n", "- Time steps: These are separate time steps of a given variable for a given observation.\n", "- Features: These are separate measures observed at the time of observation.\n", "\n", "\"drawing\"\n", "\"drawing\"\n", "\"drawing\"\n", "\"drawing\"\n", "\n", "Packages to be installed\n", "```\n", "conda install -c conda-forge keras\n", "pip install numpy==1.19.5\n", "```" ] }, { "cell_type": "code", "execution_count": 1, "id": "53960c32", "metadata": {}, "outputs": [], "source": [ "import numpy\n", "import matplotlib.pyplot as plt\n", "import pandas\n", "import math\n", "from keras.models import Sequential\n", "from keras.layers import Dense\n", "from keras.layers import LSTM\n", "from sklearn.preprocessing import MinMaxScaler\n", "from sklearn.metrics import mean_squared_error\n", "import tensorflow as tf\n", "import time\n", "from sklearn.metrics import r2_score\n", "from keras.callbacks import EarlyStopping\n", "from keras.models import load_model\n", "from keras.callbacks import ModelCheckpoint" ] }, { "cell_type": "markdown", "id": "4be03bea", "metadata": {}, "source": [ "There are three types of gates within a unit:\n", "- Forget Gate: conditionally decides what information to throw away from the block.\n", "- Input Gate: conditionally decides which values from the input to update the memory state.\n", "- Output Gate: conditionally decides what to output based on input and the memory of the block." ] }, { "cell_type": "markdown", "id": "f932be39", "metadata": {}, "source": [ "## LSTM for Regression" ] }, { "cell_type": "code", "execution_count": 9, "id": "1b9a6691", "metadata": {}, "outputs": [], "source": [ "# fix random seed for reproducibility\n", "numpy.random.seed(7)" ] }, { "cell_type": "code", "execution_count": null, "id": "d1d9c658", "metadata": {}, "outputs": [], "source": [ "# load the dataset\n", "dataframe = pandas.read_csv('./txt/airline-passengers.csv', usecols=[1], engine='python')\n", "dataset = dataframe.values\n", "dataset = dataset.astype('float32')" ] }, { "cell_type": "code", "execution_count": 8, "id": "15c9af63", "metadata": {}, "outputs": [], "source": [ "# Inspect the dataset\n", "print(dataframe.head())\n", "plt.plot(dataset)\n", "plt.xlabel('Time (monthts)')\n", "plt.ylabel('Monthly total of passangers (x10e3)')" ] }, { "cell_type": "code", "execution_count": null, "id": "cd060941", "metadata": {}, "outputs": [], "source": [ "# normalize the dataset\n", "scaler = MinMaxScaler(feature_range=(0, 1))\n", "dataset = scaler.fit_transform(dataset)" ] }, { "cell_type": "code", "execution_count": 7, "id": "8222dd0e", "metadata": {}, "outputs": [], "source": [ "# split into train and test sets\n", "print('len(dataset): ',len(dataset))\n", "train_size = int(len(dataset) * 0.67)\n", "test_size = len(dataset) - train_size\n", "train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]\n", "print(len(train), len(test))" ] }, { "cell_type": "code", "execution_count": null, "id": "fa667138", "metadata": {}, "outputs": [], "source": [ "# convert an array of values into a dataset matrix\n", "def create_dataset(dataset, look_back=1):\n", " dataX, dataY = [], []\n", " for i in range(len(dataset)-look_back-1):\n", " a = dataset[i:(i+look_back), 0]\n", " dataX.append(a)\n", " dataY.append(dataset[i + look_back, 0])\n", " return numpy.array(dataX), numpy.array(dataY)" ] }, { "cell_type": "markdown", "id": "d7fe1606", "metadata": {}, "source": [ "We have some flexibility in how the dataset is framed for the network. We will keep it simple and frame the problem as each time step in the original sequence is one separate sample, with one timestep and one feature." ] }, { "cell_type": "code", "execution_count": 6, "id": "25cec000", "metadata": {}, "outputs": [], "source": [ "# reshape into X=t and Y=t+1\n", "look_back = 1\n", "# our data is in the form: [samples, features]\n", "trainX, trainY = create_dataset(train, look_back)\n", "testX, testY = create_dataset(test, look_back)\n", "\n", "# The LSTM network expects the input data (X) to be provided with a specific array structure in the form of: [samples, time steps, features].\n", "# Reshape input to be [samples, time steps, features]\n", "trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n", "testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))\n", "print('trainX.shape: ',trainX.shape)\n", "print('trainY.shape: ',trainY.shape)\n", "print('trainX[:5]: ', trainX[:5,:,:].flatten())\n", "print('trainY[:5]: ', trainY[:5])\n", "\n", "# create and fit the LSTM network\n", "if 'model' in globals():\n", " print('Deleting \"model\"')\n", " del model\n", "model = Sequential()\n", "model.add(LSTM(4, input_shape=(1, look_back))) # hidden layer with 4 LSTM blocks or neurons\n", "model.add(Dense(1)) # output layer that makes a single value prediction\n", "\n", "start_time = time.time()\n", "# Compile the model\n", "model.compile(loss='mean_squared_error', optimizer=tf.optimizers.Adam(learning_rate=0.001))\n", "\n", "# Fit the model\n", "history = model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=0, validation_data=(testX, testY))\n", "# list all data in history\n", "print('keys: ',history.history.keys())\n", "print(\"--- Elapsed time: %s seconds ---\" % (time.time() - start_time))" ] }, { "cell_type": "code", "execution_count": 12, "id": "2e05b660", "metadata": {}, "outputs": [], "source": [ "# summarize history for loss\n", "def plot_hist(history):\n", " plt.plot(history.history['loss'])\n", " plt.plot(history.history['val_loss'])\n", " plt.title('model loss')\n", " plt.ylabel('loss')\n", " plt.xlabel('epoch')\n", " plt.legend(['train','val'], loc='upper left')\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 10, "id": "942621db", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_hist(history)" ] }, { "cell_type": "code", "execution_count": 13, "id": "e411bd1b", "metadata": {}, "outputs": [], "source": [ "# make predictions\n", "def make_preds(trainX,trainY,testX,testY):\n", " trainPredict = model.predict(trainX)\n", " testPredict = model.predict(testX)\n", " # invert predictions\n", " trainPredict = scaler.inverse_transform(trainPredict)\n", " trainY = scaler.inverse_transform([trainY])\n", " testPredict = scaler.inverse_transform(testPredict)\n", " testY = scaler.inverse_transform([testY])\n", " # calculate root mean squared error\n", " trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))\n", " print('Train Score: %.2f RMSE' % (trainScore))\n", " print('Train R^2: ', r2_score(trainY[0], trainPredict[:,0]))\n", " testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))\n", " print('Test Score: %.2f RMSE' % (testScore))\n", " print('Test R^2: ', r2_score(testY[0], testPredict[:,0]))\n", " \n", " return trainPredict, testPredict" ] }, { "cell_type": "code", "execution_count": 12, "id": "f1f674e2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train Score: 22.69 RMSE\n", "Train R^2: 0.8975356908688723\n", "Test Score: 52.39 RMSE\n", "Test R^2: 0.5481121470797672\n" ] } ], "source": [ "trainPredict, testPredict = make_preds(trainX,trainY,testX,testY)" ] }, { "cell_type": "code", "execution_count": 14, "id": "04fa3158", "metadata": {}, "outputs": [], "source": [ "# shift train predictions for plotting\n", "def plot_preds(trainPredict,testPredict):\n", " trainPredictPlot = numpy.empty_like(dataset)\n", " trainPredictPlot[:, :] = numpy.nan\n", " trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict\n", " # shift test predictions for plotting\n", " testPredictPlot = numpy.empty_like(dataset)\n", " testPredictPlot[:, :] = numpy.nan\n", " testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict\n", " # plot baseline and predictions\n", " plt.plot(scaler.inverse_transform(dataset))\n", " plt.plot(trainPredictPlot)\n", " plt.plot(testPredictPlot)\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 14, "id": "53472cd3", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_preds(trainPredict,testPredict)" ] }, { "cell_type": "code", "execution_count": 15, "id": "ae583b68", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Deleting \"model\"\n", "keys: dict_keys(['loss', 'val_loss'])\n", "--- Elapsed time: 52.98845672607422 seconds ---\n" ] } ], "source": [ "## Redo using SGD as optimizer \n", "# reshape into X=t and Y=t+1\n", "look_back = 1\n", "trainX, trainY = create_dataset(train, look_back)\n", "testX, testY = create_dataset(test, look_back)\n", "\n", "# reshape input to be [samples, time steps, features]\n", "trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n", "testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))\n", "\n", "# create and fit the LSTM network\n", "if 'model' in globals():\n", " print('Deleting \"model\"')\n", " del model\n", "model = Sequential()\n", "model.add(LSTM(4, input_shape=(1, look_back)))\n", "model.add(Dense(1))\n", "\n", "start_time = time.time()\n", "# Compile the model\n", "model.compile(loss='mean_squared_error', optimizer=tf.optimizers.SGD(learning_rate=0.01))\n", "\n", "# Fit the model\n", "history = model.fit(trainX, trainY, epochs=300, batch_size=1, verbose=0, validation_data=(testX, testY))\n", "# list all data in history\n", "print('keys: ',history.history.keys())\n", "print(\"--- Elapsed time: %s seconds ---\" % (time.time() - start_time))" ] }, { "cell_type": "code", "execution_count": 16, "id": "6ea4fc49", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_hist(history)" ] }, { "cell_type": "code", "execution_count": 17, "id": "dacc3072", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train Score: 22.67 RMSE\n", "Train R^2: 0.8977997461023315\n", "Test Score: 53.51 RMSE\n", "Test R^2: 0.5286154831572729\n" ] } ], "source": [ "trainPredict, testPredict = make_preds(trainX,trainY,testX,testY)" ] }, { "cell_type": "code", "execution_count": 18, "id": "32c13d3f", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_preds(trainPredict,testPredict)" ] }, { "cell_type": "markdown", "id": "bf47a674", "metadata": {}, "source": [ "### Question: Now that you are an expert in Neural Nets design, what else would you change in this model in order to make it better? \n", "Look at the configs used by the [LSTM](https://keras.io/api/layers/recurrent_layers/lstm/)" ] }, { "cell_type": "markdown", "id": "4b9eb049", "metadata": {}, "source": [ "## LSTM for Regression Using the Window Method\n", "\n", "We have been using a single feauture/time step to perform prediction. What if we use more samples to perform the prediction? \n", "\n", "Let's see what happens..." ] }, { "cell_type": "code", "execution_count": 19, "id": "8a19d3aa", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "trainX.shape: (92, 3)\n", "trainY.shape: (92,)\n", "trainX[:5]: \n", " [[0.01544401 0.02702703 0.05405405]\n", " [0.02702703 0.05405405 0.04826255]\n", " [0.05405405 0.04826255 0.03281853]\n", " [0.04826255 0.03281853 0.05984557]\n", " [0.03281853 0.05984557 0.08494207]]\n", "trainY[:5]: \n", " [0.04826255 0.03281853 0.05984557 0.08494207 0.08494207]\n" ] } ], "source": [ "# reshape into X=t and Y=t+3\n", "look_back = 3\n", "trainX, trainY = create_dataset(train, look_back)\n", "testX, testY = create_dataset(test, look_back)\n", "\n", "print('trainX.shape: ',trainX.shape)\n", "print('trainY.shape: ',trainY.shape)\n", "print('trainX[:5]: \\n', trainX[:5])\n", "print('trainY[:5]: \\n', trainY[:5])" ] }, { "cell_type": "code", "execution_count": 20, "id": "772948dc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "trainX.shape: (92, 1, 3)\n", "trainY.shape: (92,)\n", "trainX[:5]: \n", " [[[0.01544401 0.02702703 0.05405405]]\n", "\n", " [[0.02702703 0.05405405 0.04826255]]\n", "\n", " [[0.05405405 0.04826255 0.03281853]]\n", "\n", " [[0.04826255 0.03281853 0.05984557]]\n", "\n", " [[0.03281853 0.05984557 0.08494207]]]\n", "trainY[:5]: \n", " [0.04826255 0.03281853 0.05984557 0.08494207 0.08494207]\n", "Deleting \"model\"\n", "keys: dict_keys(['loss', 'val_loss'])\n", "--- Elapsed time: 19.347620248794556 seconds ---\n" ] } ], "source": [ "# reshape input to be [samples, time steps, features]\n", "trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n", "testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))\n", "\n", "print('trainX.shape: ',trainX.shape)\n", "print('trainY.shape: ',trainY.shape)\n", "print('trainX[:5]: \\n', trainX[:5])\n", "print('trainY[:5]: \\n', trainY[:5])\n", "\n", "# create and fit the LSTM network\n", "if 'model' in globals():\n", " print('Deleting \"model\"')\n", " del model\n", "model = Sequential()\n", "model.add(LSTM(4, input_shape=(1, look_back)))\n", "model.add(Dense(1))\n", "\n", "start_time = time.time()\n", "# Compile the model\n", "model.compile(loss='mean_squared_error', optimizer='adam')\n", "\n", "# Fit the model\n", "history = model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=0, validation_data=(testX, testY))\n", "# list all data in history\n", "print('keys: ',history.history.keys())\n", "print(\"--- Elapsed time: %s seconds ---\" % (time.time() - start_time))" ] }, { "cell_type": "code", "execution_count": 21, "id": "a8ce54a5", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_hist(history)" ] }, { "cell_type": "code", "execution_count": 22, "id": "869506e9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train Score: 22.88 RMSE\n", "Train R^2: 0.8944510096236874\n", "Test Score: 58.44 RMSE\n", "Test R^2: 0.42679878247216185\n" ] } ], "source": [ "trainPredict, testPredict = make_preds(trainX,trainY,testX,testY)" ] }, { "cell_type": "code", "execution_count": 23, "id": "d578b621", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_preds(trainPredict,testPredict)" ] }, { "cell_type": "markdown", "id": "0d84e6db", "metadata": {}, "source": [ "### Question: Compare the performance obtained on single points versus the window method. What are the advantages of one versus the other?" ] }, { "cell_type": "markdown", "id": "91d88838", "metadata": {}, "source": [ "## LSTM for Regression with Time Steps\n", "\n", "Now we will reformulate the problem: instead of dealing with the past observations as independent features, we will consider them as time steps of one input feature. " ] }, { "cell_type": "code", "execution_count": 24, "id": "76cfe0fb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "trainX.shape: (92, 3, 1)\n", "trainY.shape: (92,)\n", "trainX[:5]: \n", " [[[0.01544401]\n", " [0.02702703]\n", " [0.05405405]]\n", "\n", " [[0.02702703]\n", " [0.05405405]\n", " [0.04826255]]\n", "\n", " [[0.05405405]\n", " [0.04826255]\n", " [0.03281853]]\n", "\n", " [[0.04826255]\n", " [0.03281853]\n", " [0.05984557]]\n", "\n", " [[0.03281853]\n", " [0.05984557]\n", " [0.08494207]]]\n", "trainY[:5]: \n", " [0.04826255 0.03281853 0.05984557 0.08494207 0.08494207]\n", "Deleting \"model\"\n", "keys: dict_keys(['loss', 'val_loss'])\n", "--- Elapsed time: 26.17186951637268 seconds ---\n" ] } ], "source": [ "# reshape into X=t and Y=t+1\n", "look_back = 3\n", "trainX, trainY = create_dataset(train, look_back)\n", "testX, testY = create_dataset(test, look_back)\n", "# reshape input to be [samples, time steps, features]\n", "trainX = numpy.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))\n", "testX = numpy.reshape(testX, (testX.shape[0], testX.shape[1], 1))\n", "print('trainX.shape: ',trainX.shape)\n", "print('trainY.shape: ',trainY.shape)\n", "print('trainX[:5]: \\n', trainX[:5])\n", "print('trainY[:5]: \\n', trainY[:5])\n", "\n", "# create and fit the LSTM network\n", "if 'model' in globals():\n", " print('Deleting \"model\"')\n", " del model\n", "model = Sequential()\n", "model.add(LSTM(4, input_shape=(look_back, 1)))\n", "model.add(Dense(1))\n", "\n", "start_time = time.time()\n", "# Compile the model\n", "model.compile(loss='mean_squared_error', optimizer='adam')\n", "\n", "# Fit the model\n", "history = model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=0, validation_data=(testX, testY))\n", "# list all data in history\n", "print('keys: ',history.history.keys())\n", "print(\"--- Elapsed time: %s seconds ---\" % (time.time() - start_time))" ] }, { "cell_type": "code", "execution_count": 25, "id": "65742e1e", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_hist(history)" ] }, { "cell_type": "code", "execution_count": 26, "id": "44d44ca2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train Score: 21.71 RMSE\n", "Train R^2: 0.9049652778988122\n", "Test Score: 50.57 RMSE\n", "Test R^2: 0.5708315977886538\n" ] } ], "source": [ "trainPredict, testPredict = make_preds(trainX,trainY,testX,testY)" ] }, { "cell_type": "code", "execution_count": 27, "id": "9031be22", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_preds(trainPredict,testPredict)" ] }, { "cell_type": "markdown", "id": "0c299376", "metadata": {}, "source": [ "## LSTM with Memory Between Batches\n", "\n", "In order to prevent the LSTM to find dependencies between your batches, it is set to be \"stateless\" by default. But what if the dependency between the batches is somehow informative for LSTM to learn? Let's see what happens when we let the LSTM to build state over the entire training sequence." ] }, { "cell_type": "code", "execution_count": 33, "id": "a6540409", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Deleting \"model\"\n", "keys: dict_keys(['loss', 'val_loss'])\n", "--- Elapsed time: 34.12684774398804 seconds ---\n" ] } ], "source": [ "# reshape into X=t and Y=t+1\n", "look_back = 3\n", "trainX, trainY = create_dataset(train, look_back)\n", "testX, testY = create_dataset(test, look_back)\n", "# reshape input to be [samples, time steps, features]\n", "trainX = numpy.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))\n", "testX = numpy.reshape(testX, (testX.shape[0], testX.shape[1], 1))\n", "# create and fit the LSTM network\n", "batch_size = 1\n", "\n", "if 'model' in globals():\n", " print('Deleting \"model\"')\n", " del model\n", "model = Sequential()\n", "model.add(LSTM(4, batch_input_shape=(batch_size, look_back, 1), stateful=True))\n", "model.add(Dense(1))\n", "\n", "start_time = time.time()\n", "model.compile(loss='mean_squared_error', optimizer='adam')\n", "for i in range(100):\n", "\thistory = model.fit(trainX, trainY, epochs=1, batch_size=batch_size, verbose=0, shuffle=False, validation_data=(testX, testY))\n", "\tmodel.reset_states()\n", "print('keys: ',history.history.keys())\n", "print(\"--- Elapsed time: %s seconds ---\" % (time.time() - start_time))" ] }, { "cell_type": "code", "execution_count": 34, "id": "dba17599", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train Score: 27.90 RMSE\n", "Train R^2: 0.8429977120429654\n", "Test Score: 61.01 RMSE\n", "Test R^2: 0.37531750526932117\n" ] } ], "source": [ "# make predictions\n", "trainPredict = model.predict(trainX, batch_size=batch_size) #Now we need to specify the batch_size \n", "model.reset_states()\n", "testPredict = model.predict(testX, batch_size=batch_size)\n", "# invert predictions\n", "trainPredict = scaler.inverse_transform(trainPredict)\n", "trainY = scaler.inverse_transform([trainY])\n", "testPredict = scaler.inverse_transform(testPredict)\n", "testY = scaler.inverse_transform([testY])\n", "# calculate root mean squared error\n", "trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))\n", "print('Train Score: %.2f RMSE' % (trainScore))\n", "print('Train R^2: ', r2_score(trainY[0], trainPredict[:,0]))\n", "testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))\n", "print('Test Score: %.2f RMSE' % (testScore))\n", "print('Test R^2: ', r2_score(testY[0], testPredict[:,0]))" ] }, { "cell_type": "code", "execution_count": 35, "id": "56737429", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# shift train predictions for plotting\n", "trainPredictPlot = numpy.empty_like(dataset)\n", "trainPredictPlot[:, :] = numpy.nan\n", "trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict\n", "# shift test predictions for plotting\n", "testPredictPlot = numpy.empty_like(dataset)\n", "testPredictPlot[:, :] = numpy.nan\n", "testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict\n", "# plot baseline and predictions\n", "plt.plot(scaler.inverse_transform(dataset))\n", "plt.plot(trainPredictPlot)\n", "plt.plot(testPredictPlot)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "2c1348b0", "metadata": {}, "source": [ "## Stacked LSTMs with Memory Between Batches\n", "\n", "Let's see what happens with we use a deeper LSTM network" ] }, { "cell_type": "code", "execution_count": 40, "id": "f32497a1", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Deleting \"model\"\n", "Epoch: 0\n", "92/92 [==============================] - 6s 20ms/step - loss: 0.0025 - val_loss: 0.0357\n", "Epoch: 1\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0099 - val_loss: 0.0334\n", "Epoch: 2\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0076 - val_loss: 0.0308\n", "Epoch: 3\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0062 - val_loss: 0.0292\n", "Epoch: 4\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0056 - val_loss: 0.0284\n", "Epoch: 5\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0054 - val_loss: 0.0282\n", "Epoch: 6\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0053 - val_loss: 0.0283\n", "Epoch: 7\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0053 - val_loss: 0.0285\n", "Epoch: 8\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0053 - val_loss: 0.0288\n", "Epoch: 9\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0053 - val_loss: 0.0290\n", "Epoch: 10\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0053 - val_loss: 0.0293\n", "Epoch: 11\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0053 - val_loss: 0.0295\n", "Epoch: 12\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0053 - val_loss: 0.0298\n", "Epoch: 13\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0053 - val_loss: 0.0300\n", "Epoch: 14\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0053 - val_loss: 0.0301\n", "Epoch: 15\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0053 - val_loss: 0.0303\n", "Epoch: 16\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0052 - val_loss: 0.0304\n", "Epoch: 17\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0052 - val_loss: 0.0306\n", "Epoch: 18\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0052 - val_loss: 0.0307\n", "Epoch: 19\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0052 - val_loss: 0.0308\n", "Epoch: 20\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0052 - val_loss: 0.0309\n", "Epoch: 21\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0052 - val_loss: 0.0310\n", "Epoch: 22\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0052 - val_loss: 0.0310\n", "Epoch: 23\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0051 - val_loss: 0.0311\n", "Epoch: 24\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0051 - val_loss: 0.0311\n", "Epoch: 25\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0051 - val_loss: 0.0312\n", "Epoch: 26\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0051 - val_loss: 0.0312\n", "Epoch: 27\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0050 - val_loss: 0.0312\n", "Epoch: 28\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0050 - val_loss: 0.0312\n", "Epoch: 29\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0050 - val_loss: 0.0312\n", "Epoch: 30\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0050 - val_loss: 0.0313\n", "Epoch: 31\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0049 - val_loss: 0.0313\n", "Epoch: 32\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0049 - val_loss: 0.0313\n", "Epoch: 33\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0049 - val_loss: 0.0312\n", "Epoch: 34\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0049 - val_loss: 0.0312\n", "Epoch: 35\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0048 - val_loss: 0.0312\n", "Epoch: 36\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0048 - val_loss: 0.0312\n", "Epoch: 37\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0048 - val_loss: 0.0312\n", "Epoch: 38\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0047 - val_loss: 0.0312\n", "Epoch: 39\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0047 - val_loss: 0.0312\n", "Epoch: 40\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0047 - val_loss: 0.0312\n", "Epoch: 41\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0046 - val_loss: 0.0312\n", "Epoch: 42\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0046 - val_loss: 0.0312\n", "Epoch: 43\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0045 - val_loss: 0.0312\n", "Epoch: 44\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0045 - val_loss: 0.0312\n", "Epoch: 45\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0045 - val_loss: 0.0312\n", "Epoch: 46\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0044 - val_loss: 0.0312\n", "Epoch: 47\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0044 - val_loss: 0.0312\n", "Epoch: 48\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0043 - val_loss: 0.0312\n", "Epoch: 49\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0043 - val_loss: 0.0312\n", "Epoch: 50\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0042 - val_loss: 0.0313\n", "Epoch: 51\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0042 - val_loss: 0.0313\n", "Epoch: 52\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0041 - val_loss: 0.0313\n", "Epoch: 53\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0041 - val_loss: 0.0313\n", "Epoch: 54\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0040 - val_loss: 0.0312\n", "Epoch: 55\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0039 - val_loss: 0.0311\n", "Epoch: 56\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0039 - val_loss: 0.0310\n", "Epoch: 57\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0038 - val_loss: 0.0309\n", "Epoch: 58\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0037 - val_loss: 0.0308\n", "Epoch: 59\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0037 - val_loss: 0.0306\n", "Epoch: 60\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0036 - val_loss: 0.0304\n", "Epoch: 61\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0035 - val_loss: 0.0301\n", "Epoch: 62\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0035 - val_loss: 0.0299\n", "Epoch: 63\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0034 - val_loss: 0.0295\n", "Epoch: 64\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0033 - val_loss: 0.0292\n", "Epoch: 65\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0032 - val_loss: 0.0287\n", "Epoch: 66\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0031 - val_loss: 0.0283\n", "Epoch: 67\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0031 - val_loss: 0.0278\n", "Epoch: 68\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0030 - val_loss: 0.0272\n", "Epoch: 69\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0029 - val_loss: 0.0266\n", "Epoch: 70\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0028 - val_loss: 0.0260\n", "Epoch: 71\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0027 - val_loss: 0.0254\n", "Epoch: 72\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0026 - val_loss: 0.0247\n", "Epoch: 73\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0025 - val_loss: 0.0241\n", "Epoch: 74\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0024 - val_loss: 0.0235\n", "Epoch: 75\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0024 - val_loss: 0.0229\n", "Epoch: 76\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0223\n", "Epoch: 77\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0217\n", "Epoch: 78\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0022 - val_loss: 0.0212\n", "Epoch: 79\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0207\n", "Epoch: 80\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0203\n", "Epoch: 81\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0198\n", "Epoch: 82\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0194\n", "Epoch: 83\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0191\n", "Epoch: 84\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0019 - val_loss: 0.0187\n", "Epoch: 85\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0019 - val_loss: 0.0184\n", "Epoch: 86\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0019 - val_loss: 0.0182\n", "Epoch: 87\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0019 - val_loss: 0.0179\n", "Epoch: 88\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0019 - val_loss: 0.0177\n", "Epoch: 89\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0018 - val_loss: 0.0175\n", "Epoch: 90\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0018 - val_loss: 0.0173\n", "Epoch: 91\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0018 - val_loss: 0.0172\n", "Epoch: 92\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0170\n", "Epoch: 93\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0018 - val_loss: 0.0169\n", "Epoch: 94\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0168\n", "Epoch: 95\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0167\n", "Epoch: 96\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0166\n", "Epoch: 97\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0018 - val_loss: 0.0165\n", "Epoch: 98\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0164\n", "Epoch: 99\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0017 - val_loss: 0.0163\n", "Epoch: 100\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0163\n", "Epoch: 101\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0162\n", "Epoch: 102\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0161\n", "Epoch: 103\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0161\n", "Epoch: 104\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0017 - val_loss: 0.0160\n", "Epoch: 105\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0160\n", "Epoch: 106\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0160\n", "Epoch: 107\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0159\n", "Epoch: 108\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0159\n", "Epoch: 109\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0159\n", "Epoch: 110\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0017 - val_loss: 0.0158\n", "Epoch: 111\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0017 - val_loss: 0.0158\n", "Epoch: 112\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0017 - val_loss: 0.0158\n", "Epoch: 113\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0016 - val_loss: 0.0158\n", "Epoch: 114\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0157\n", "Epoch: 115\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0016 - val_loss: 0.0157\n", "Epoch: 116\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0157\n", "Epoch: 117\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0157\n", "Epoch: 118\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0157\n", "Epoch: 119\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 120\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 121\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 122\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 123\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 124\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 125\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 126\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 127\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0155\n", "Epoch: 128\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0155\n", "Epoch: 129\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0155\n", "Epoch: 130\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 131\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 132\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 133\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 134\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 135\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 136\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0156\n", "Epoch: 137\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0157\n", "Epoch: 138\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0016 - val_loss: 0.0157\n", "Epoch: 139\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0157\n", "Epoch: 140\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0158\n", "Epoch: 141\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0158\n", "Epoch: 142\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0158\n", "Epoch: 143\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0159\n", "Epoch: 144\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0016 - val_loss: 0.0159\n", "Epoch: 145\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0160\n", "Epoch: 146\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0160\n", "Epoch: 147\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0161\n", "Epoch: 148\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0161\n", "Epoch: 149\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0161\n", "Epoch: 150\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0015 - val_loss: 0.0162\n", "Epoch: 151\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0162\n", "Epoch: 152\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0015 - val_loss: 0.0163\n", "Epoch: 153\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0164\n", "Epoch: 154\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0164\n", "Epoch: 155\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0165\n", "Epoch: 156\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0165\n", "Epoch: 157\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0166\n", "Epoch: 158\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0015 - val_loss: 0.0166\n", "Epoch: 159\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0167\n", "Epoch: 160\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0167\n", "Epoch: 161\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0168\n", "Epoch: 162\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0168\n", "Epoch: 163\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0169\n", "Epoch: 164\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0015 - val_loss: 0.0169\n", "Epoch: 165\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0170\n", "Epoch: 166\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0170\n", "Epoch: 167\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0015 - val_loss: 0.0171\n", "Epoch: 168\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0171\n", "Epoch: 169\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0172\n", "Epoch: 170\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0172\n", "Epoch: 171\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0173\n", "Epoch: 172\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0173\n", "Epoch: 173\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0174\n", "Epoch: 174\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0174\n", "Epoch: 175\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0175\n", "Epoch: 176\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0175\n", "Epoch: 177\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0175\n", "Epoch: 178\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0176\n", "Epoch: 179\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0176\n", "Epoch: 180\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0177\n", "Epoch: 181\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0177\n", "Epoch: 182\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0177\n", "Epoch: 183\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0178\n", "Epoch: 184\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0178\n", "Epoch: 185\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0178\n", "Epoch: 186\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0179\n", "Epoch: 187\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0179\n", "Epoch: 188\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0179\n", "Epoch: 189\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0179\n", "Epoch: 190\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0180\n", "Epoch: 191\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0180\n", "Epoch: 192\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0180\n", "Epoch: 193\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0180\n", "Epoch: 194\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 195\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 196\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 197\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 198\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 199\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 200\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 201\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 202\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 203\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 204\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 205\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 206\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 207\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 208\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0181\n", "Epoch: 209\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0180\n", "Epoch: 210\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0015 - val_loss: 0.0180\n", "Epoch: 211\n", "92/92 [==============================] - 2s 17ms/step - loss: 0.0015 - val_loss: 0.0180\n", "Epoch: 212\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0015 - val_loss: 0.0180\n", "Epoch: 213\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0179\n", "Epoch: 214\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0179\n", "Epoch: 215\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0179\n", "Epoch: 216\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0178\n", "Epoch: 217\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0178\n", "Epoch: 218\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0178\n", "Epoch: 219\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0177\n", "Epoch: 220\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0177\n", "Epoch: 221\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0176\n", "Epoch: 222\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0176\n", "Epoch: 223\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0175\n", "Epoch: 224\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0175\n", "Epoch: 225\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0174\n", "Epoch: 226\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0174\n", "Epoch: 227\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0173\n", "Epoch: 228\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0173\n", "Epoch: 229\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0015 - val_loss: 0.0172\n", "Epoch: 230\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0172\n", "Epoch: 231\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0015 - val_loss: 0.0171\n", "Epoch: 232\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0171\n", "Epoch: 233\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0170\n", "Epoch: 234\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0169\n", "Epoch: 235\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0169\n", "Epoch: 236\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0168\n", "Epoch: 237\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0168\n", "Epoch: 238\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0167\n", "Epoch: 239\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0166\n", "Epoch: 240\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0166\n", "Epoch: 241\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0165\n", "Epoch: 242\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0164\n", "Epoch: 243\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0164\n", "Epoch: 244\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0163\n", "Epoch: 245\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0163\n", "Epoch: 246\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0015 - val_loss: 0.0162\n", "Epoch: 247\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0015 - val_loss: 0.0161\n", "Epoch: 248\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0161\n", "Epoch: 249\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0160\n", "Epoch: 250\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0015 - val_loss: 0.0160\n", "Epoch: 251\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0015 - val_loss: 0.0159\n", "Epoch: 252\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0015 - val_loss: 0.0158\n", "Epoch: 253\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0158\n", "Epoch: 254\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0157\n", "Epoch: 255\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0156\n", "Epoch: 256\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0156\n", "Epoch: 257\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0015 - val_loss: 0.0155\n", "Epoch: 258\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0155\n", "Epoch: 259\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0154\n", "Epoch: 260\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0153\n", "Epoch: 261\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0153\n", "Epoch: 262\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0152\n", "Epoch: 263\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0152\n", "Epoch: 264\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0151\n", "Epoch: 265\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0150\n", "Epoch: 266\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0150\n", "Epoch: 267\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0149\n", "Epoch: 268\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0149\n", "Epoch: 269\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0148\n", "Epoch: 270\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0014 - val_loss: 0.0147\n", "Epoch: 271\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0147\n", "Epoch: 272\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0146\n", "Epoch: 273\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0146\n", "Epoch: 274\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0014 - val_loss: 0.0145\n", "Epoch: 275\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0145\n", "Epoch: 276\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0144\n", "Epoch: 277\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0144\n", "Epoch: 278\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0143\n", "Epoch: 279\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0142\n", "Epoch: 280\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0142\n", "Epoch: 281\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0141\n", "Epoch: 282\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0141\n", "Epoch: 283\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0140\n", "Epoch: 284\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0140\n", "Epoch: 285\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0014 - val_loss: 0.0139\n", "Epoch: 286\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0139\n", "Epoch: 287\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0138\n", "Epoch: 288\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0138\n", "Epoch: 289\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0137\n", "Epoch: 290\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0137\n", "Epoch: 291\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0136\n", "Epoch: 292\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0136\n", "Epoch: 293\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0135\n", "Epoch: 294\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0135\n", "Epoch: 295\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0134\n", "Epoch: 296\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0133\n", "Epoch: 297\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0133\n", "Epoch: 298\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0132\n", "Epoch: 299\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0014 - val_loss: 0.0132\n", "Epoch: 300\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0131\n", "Epoch: 301\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0130\n", "Epoch: 302\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0130\n", "Epoch: 303\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0129\n", "Epoch: 304\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0129\n", "Epoch: 305\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0128\n", "Epoch: 306\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0127\n", "Epoch: 307\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0126\n", "Epoch: 308\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0125\n", "Epoch: 309\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0014 - val_loss: 0.0125\n", "Epoch: 310\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0124\n", "Epoch: 311\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0123\n", "Epoch: 312\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0122\n", "Epoch: 313\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0121\n", "Epoch: 314\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0120\n", "Epoch: 315\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0119\n", "Epoch: 316\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0014 - val_loss: 0.0118\n", "Epoch: 317\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0014 - val_loss: 0.0117\n", "Epoch: 318\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0116\n", "Epoch: 319\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0115\n", "Epoch: 320\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0014 - val_loss: 0.0113\n", "Epoch: 321\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0014 - val_loss: 0.0112\n", "Epoch: 322\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0014 - val_loss: 0.0111\n", "Epoch: 323\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0013 - val_loss: 0.0110\n", "Epoch: 324\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0013 - val_loss: 0.0109\n", "Epoch: 325\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0013 - val_loss: 0.0108\n", "Epoch: 326\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0013 - val_loss: 0.0106\n", "Epoch: 327\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0013 - val_loss: 0.0105\n", "Epoch: 328\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0013 - val_loss: 0.0104\n", "Epoch: 329\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0013 - val_loss: 0.0103\n", "Epoch: 330\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0013 - val_loss: 0.0102\n", "Epoch: 331\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0013 - val_loss: 0.0100\n", "Epoch: 332\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0013 - val_loss: 0.0099\n", "Epoch: 333\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0013 - val_loss: 0.0098\n", "Epoch: 334\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0013 - val_loss: 0.0097\n", "Epoch: 335\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0013 - val_loss: 0.0096\n", "Epoch: 336\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0013 - val_loss: 0.0095\n", "Epoch: 337\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0013 - val_loss: 0.0094\n", "Epoch: 338\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0013 - val_loss: 0.0093\n", "Epoch: 339\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0013 - val_loss: 0.0092\n", "Epoch: 340\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0013 - val_loss: 0.0092\n", "Epoch: 341\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0013 - val_loss: 0.0091\n", "Epoch: 342\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0013 - val_loss: 0.0090\n", "Epoch: 343\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0013 - val_loss: 0.0090\n", "Epoch: 344\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0013 - val_loss: 0.0089\n", "Epoch: 345\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0013 - val_loss: 0.0089\n", "Epoch: 346\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0013 - val_loss: 0.0088\n", "Epoch: 347\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0013 - val_loss: 0.0088\n", "Epoch: 348\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0012 - val_loss: 0.0088\n", "Epoch: 349\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0012 - val_loss: 0.0088\n", "Epoch: 350\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0012 - val_loss: 0.0088\n", "Epoch: 351\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0012 - val_loss: 0.0088\n", "Epoch: 352\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0012 - val_loss: 0.0088\n", "Epoch: 353\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0012 - val_loss: 0.0088\n", "Epoch: 354\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0012 - val_loss: 0.0089\n", "Epoch: 355\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0012 - val_loss: 0.0089\n", "Epoch: 356\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0012 - val_loss: 0.0090\n", "Epoch: 357\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0012 - val_loss: 0.0090\n", "Epoch: 358\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0012 - val_loss: 0.0091\n", "Epoch: 359\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0012 - val_loss: 0.0092\n", "Epoch: 360\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0012 - val_loss: 0.0092\n", "Epoch: 361\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0012 - val_loss: 0.0093\n", "Epoch: 362\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0012 - val_loss: 0.0094\n", "Epoch: 363\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0012 - val_loss: 0.0095\n", "Epoch: 364\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0012 - val_loss: 0.0096\n", "Epoch: 365\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0011 - val_loss: 0.0098\n", "Epoch: 366\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0011 - val_loss: 0.0099\n", "Epoch: 367\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0011 - val_loss: 0.0100\n", "Epoch: 368\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0011 - val_loss: 0.0101\n", "Epoch: 369\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0011 - val_loss: 0.0102\n", "Epoch: 370\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0011 - val_loss: 0.0104\n", "Epoch: 371\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0011 - val_loss: 0.0105\n", "Epoch: 372\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0011 - val_loss: 0.0106\n", "Epoch: 373\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0011 - val_loss: 0.0107\n", "Epoch: 374\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0011 - val_loss: 0.0108\n", "Epoch: 375\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0011 - val_loss: 0.0108\n", "Epoch: 376\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0011 - val_loss: 0.0112\n", "Epoch: 377\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0011 - val_loss: 0.0090\n", "Epoch: 378\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0021 - val_loss: 0.0330\n", "Epoch: 379\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0026 - val_loss: 0.0277\n", "Epoch: 380\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0018 - val_loss: 0.0119\n", "Epoch: 381\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0085\n", "Epoch: 382\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0018 - val_loss: 0.0089\n", "Epoch: 383\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0018 - val_loss: 0.0080\n", "Epoch: 384\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0017 - val_loss: 0.0077\n", "Epoch: 385\n", "92/92 [==============================] - 2s 17ms/step - loss: 0.0016 - val_loss: 0.0076\n", "Epoch: 386\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0016 - val_loss: 0.0075\n", "Epoch: 387\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0017 - val_loss: 0.0075\n", "Epoch: 388\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0017 - val_loss: 0.0076\n", "Epoch: 389\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0017 - val_loss: 0.0077\n", "Epoch: 390\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0016 - val_loss: 0.0078\n", "Epoch: 391\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0016 - val_loss: 0.0079\n", "Epoch: 392\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0016 - val_loss: 0.0082\n", "Epoch: 393\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0016 - val_loss: 0.0085\n", "Epoch: 394\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0016 - val_loss: 0.0090\n", "Epoch: 395\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0016 - val_loss: 0.0097\n", "Epoch: 396\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0016 - val_loss: 0.0104\n", "Epoch: 397\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0016 - val_loss: 0.0112\n", "Epoch: 398\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0016 - val_loss: 0.0118\n", "Epoch: 399\n", "92/92 [==============================] - 2s 19ms/step - loss: 0.0016 - val_loss: 0.0124\n", "Epoch: 400\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0016 - val_loss: 0.0128\n", "Epoch: 401\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0016 - val_loss: 0.0131\n", "Epoch: 402\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0016 - val_loss: 0.0133\n", "Epoch: 403\n", "92/92 [==============================] - 2s 16ms/step - loss: 0.0016 - val_loss: 0.0134\n", "Epoch: 404\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0016 - val_loss: 0.0135\n", "Epoch: 405\n", "92/92 [==============================] - 2s 17ms/step - loss: 0.0016 - val_loss: 0.0136\n", "Epoch: 406\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0016 - val_loss: 0.0136\n", "Epoch: 407\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0015 - val_loss: 0.0137\n", "Epoch: 408\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0137\n", "Epoch: 409\n", "92/92 [==============================] - 2s 17ms/step - loss: 0.0015 - val_loss: 0.0137\n", "Epoch: 410\n", "92/92 [==============================] - 3s 33ms/step - loss: 0.0015 - val_loss: 0.0138\n", "Epoch: 411\n", "92/92 [==============================] - 3s 29ms/step - loss: 0.0015 - val_loss: 0.0138\n", "Epoch: 412\n", "92/92 [==============================] - 3s 30ms/step - loss: 0.0015 - val_loss: 0.0138\n", "Epoch: 413\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0138\n", "Epoch: 414\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0139\n", "Epoch: 415\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0015 - val_loss: 0.0139\n", "Epoch: 416\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0015 - val_loss: 0.0139\n", "Epoch: 417\n", "92/92 [==============================] - 2s 17ms/step - loss: 0.0015 - val_loss: 0.0139\n", "Epoch: 418\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0015 - val_loss: 0.0139\n", "Epoch: 419\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0139\n", "Epoch: 420\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0139\n", "Epoch: 421\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0015 - val_loss: 0.0139\n", "Epoch: 422\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0139\n", "Epoch: 423\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0015 - val_loss: 0.0139\n", "Epoch: 424\n", "92/92 [==============================] - 2s 17ms/step - loss: 0.0015 - val_loss: 0.0140\n", "Epoch: 425\n", "92/92 [==============================] - 2s 17ms/step - loss: 0.0015 - val_loss: 0.0140\n", "Epoch: 426\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0140\n", "Epoch: 427\n", "92/92 [==============================] - 2s 17ms/step - loss: 0.0015 - val_loss: 0.0140\n", "Epoch: 428\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0141\n", "Epoch: 429\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0141\n", "Epoch: 430\n", "92/92 [==============================] - 2s 17ms/step - loss: 0.0015 - val_loss: 0.0142\n", "Epoch: 431\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0015 - val_loss: 0.0143\n", "Epoch: 432\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0143\n", "Epoch: 433\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0145\n", "Epoch: 434\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0015 - val_loss: 0.0146\n", "Epoch: 435\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0015 - val_loss: 0.0147\n", "Epoch: 436\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0015 - val_loss: 0.0149\n", "Epoch: 437\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0151\n", "Epoch: 438\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0015 - val_loss: 0.0154\n", "Epoch: 439\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0157\n", "Epoch: 440\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0160\n", "Epoch: 441\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0015 - val_loss: 0.0163\n", "Epoch: 442\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0167\n", "Epoch: 443\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0015 - val_loss: 0.0172\n", "Epoch: 444\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0177\n", "Epoch: 445\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0015 - val_loss: 0.0183\n", "Epoch: 446\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0189\n", "Epoch: 447\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0015 - val_loss: 0.0196\n", "Epoch: 448\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0203\n", "Epoch: 449\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0014 - val_loss: 0.0211\n", "Epoch: 450\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0219\n", "Epoch: 451\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0014 - val_loss: 0.0226\n", "Epoch: 452\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0014 - val_loss: 0.0235\n", "Epoch: 453\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0246\n", "Epoch: 454\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0014 - val_loss: 0.0256\n", "Epoch: 455\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0014 - val_loss: 0.0267\n", "Epoch: 456\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0014 - val_loss: 0.0278\n", "Epoch: 457\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0288\n", "Epoch: 458\n", "92/92 [==============================] - 4s 17ms/step - loss: 0.0014 - val_loss: 0.0298\n", "Epoch: 459\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0308\n", "Epoch: 460\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0014 - val_loss: 0.0318\n", "Epoch: 461\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0327\n", "Epoch: 462\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0336\n", "Epoch: 463\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0345\n", "Epoch: 464\n", "92/92 [==============================] - 2s 21ms/step - loss: 0.0014 - val_loss: 0.0354\n", "Epoch: 465\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0363\n", "Epoch: 466\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0014 - val_loss: 0.0372\n", "Epoch: 467\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0014 - val_loss: 0.0381\n", "Epoch: 468\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0391\n", "Epoch: 469\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0400\n", "Epoch: 470\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0014 - val_loss: 0.0409\n", "Epoch: 471\n", "92/92 [==============================] - 1s 13ms/step - loss: 0.0014 - val_loss: 0.0418\n", "Epoch: 472\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0014 - val_loss: 0.0425\n", "Epoch: 473\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0431\n", "Epoch: 474\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0014 - val_loss: 0.0437\n", "Epoch: 475\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0455\n", "Epoch: 476\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0493\n", "Epoch: 477\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0014 - val_loss: 0.0531\n", "Epoch: 478\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0561\n", "Epoch: 479\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0014 - val_loss: 0.0586\n", "Epoch: 480\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0607\n", "Epoch: 481\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0626\n", "Epoch: 482\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0014 - val_loss: 0.0642\n", "Epoch: 483\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0654\n", "Epoch: 484\n", "92/92 [==============================] - 1s 16ms/step - loss: 0.0014 - val_loss: 0.0663\n", "Epoch: 485\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0669\n", "Epoch: 486\n", "92/92 [==============================] - 2s 17ms/step - loss: 0.0014 - val_loss: 0.0678\n", "Epoch: 487\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0014 - val_loss: 0.0702\n", "Epoch: 488\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0745\n", "Epoch: 489\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0014 - val_loss: 0.0786\n", "Epoch: 490\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0817\n", "Epoch: 491\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0014 - val_loss: 0.0841\n", "Epoch: 492\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0014 - val_loss: 0.0861\n", "Epoch: 493\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0878\n", "Epoch: 494\n", "92/92 [==============================] - 2s 23ms/step - loss: 0.0014 - val_loss: 0.0894\n", "Epoch: 495\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0014 - val_loss: 0.0909\n", "Epoch: 496\n", "92/92 [==============================] - 1s 15ms/step - loss: 0.0014 - val_loss: 0.0923\n", "Epoch: 497\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0937\n", "Epoch: 498\n", "92/92 [==============================] - 2s 18ms/step - loss: 0.0014 - val_loss: 0.0950\n", "Epoch: 499\n", "92/92 [==============================] - 1s 14ms/step - loss: 0.0014 - val_loss: 0.0962\n", "keys: dict_keys(['loss', 'val_loss'])\n", "--- Elapsed time: 595.9011082649231 seconds ---\n" ] } ], "source": [ "# reshape into X=t and Y=t+1\n", "look_back = 3\n", "trainX, trainY = create_dataset(train, look_back)\n", "testX, testY = create_dataset(test, look_back)\n", "# reshape input to be [samples, time steps, features]\n", "trainX = numpy.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))\n", "testX = numpy.reshape(testX, (testX.shape[0], testX.shape[1], 1))\n", "# create and fit the LSTM network\n", "batch_size = 1\n", "\n", "if 'model' in globals():\n", " print('Deleting \"model\"')\n", " del model\n", "model = Sequential()\n", "model.add(LSTM(4, batch_input_shape=(batch_size, look_back, 1), stateful=True, return_sequences=True))\n", "model.add(LSTM(4, batch_input_shape=(batch_size, look_back, 1), stateful=True))\n", "model.add(Dense(1))\n", "\n", "start_time = time.time()\n", "model.compile(loss='mean_squared_error', optimizer='adam')\n", "for i in range(500):\n", " print('Epoch: ',i)\n", " history = model.fit(trainX, trainY, epochs=1, batch_size=batch_size, verbose=1, shuffle=False, validation_data=(testX, testY))\n", " model.reset_states()\n", "print('keys: ',history.history.keys())\n", "print(\"--- Elapsed time: %s seconds ---\" % (time.time() - start_time))" ] }, { "cell_type": "code", "execution_count": 41, "id": "13c5b60e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train Score: 20.23 RMSE\n", "Train R^2: 0.9175058172948863\n", "Test Score: 160.35 RMSE\n", "Test R^2: -3.3148429717990124\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# make predictions\n", "trainPredict = model.predict(trainX, batch_size=batch_size) #Now we need to specify the batch_size \n", "model.reset_states()\n", "testPredict = model.predict(testX, batch_size=batch_size)\n", "# invert predictions\n", "trainPredict = scaler.inverse_transform(trainPredict)\n", "trainY = scaler.inverse_transform([trainY])\n", "testPredict = scaler.inverse_transform(testPredict)\n", "testY = scaler.inverse_transform([testY])\n", "# calculate root mean squared error\n", "trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))\n", "print('Train Score: %.2f RMSE' % (trainScore))\n", "print('Train R^2: ', r2_score(trainY[0], trainPredict[:,0]))\n", "testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))\n", "print('Test Score: %.2f RMSE' % (testScore))\n", "print('Test R^2: ', r2_score(testY[0], testPredict[:,0]))\n", "\n", "# shift train predictions for plotting\n", "trainPredictPlot = numpy.empty_like(dataset)\n", "trainPredictPlot[:, :] = numpy.nan\n", "trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict\n", "# shift test predictions for plotting\n", "testPredictPlot = numpy.empty_like(dataset)\n", "testPredictPlot[:, :] = numpy.nan\n", "testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict\n", "# plot baseline and predictions\n", "plt.plot(scaler.inverse_transform(dataset))\n", "plt.plot(trainPredictPlot)\n", "plt.plot(testPredictPlot)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 10, "id": "1065b758", "metadata": {}, "outputs": [], "source": [ "# Let's see what happens if we let it train for longer\n", "# Using Early stopping \n", "\n", "# reshape into X=t and Y=t+1\n", "look_back = 3\n", "trainX, trainY = create_dataset(train, look_back)\n", "testX, testY = create_dataset(test, look_back)\n", "print('trainX.shape: ',trainX.shape)\n", "print('trainY.shape: ',trainY.shape)\n", "print('trainX[:5]: ', trainX[:5].flatten())\n", "print('trainY[:5]: ', trainY[:5])\n", "\n", "# reshape input to be [samples, time steps, features]\n", "trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n", "testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))\n", "batch_size = 1\n", "\n", "if 'model' in globals():\n", " print('Deleting \"model\"')\n", " del model\n", "model = Sequential()\n", "model.add(LSTM(4, batch_input_shape=(batch_size,1,look_back), stateful=True, return_sequences=True))\n", "model.add(LSTM(4, batch_input_shape=(batch_size, 1,look_back), stateful=True))\n", "model.add(Dense(1))\n", "\n", "start_time = time.time()\n", "# Compile the model\n", "model.compile(loss='mean_squared_error', optimizer='adam')\n", "\n", "# Fit the model\n", "history = model.fit(trainX, trainY, epochs=5000, batch_size=1, verbose=0, validation_data=(testX, testY))\n", "# list all data in history\n", "print('keys: ',history.history.keys())\n", "print(\"--- Elapsed time: %s seconds ---\" % (time.time() - start_time))\n" ] }, { "cell_type": "code", "execution_count": null, "id": "0bd86ca8", "metadata": {}, "outputs": [], "source": [ "plot_hist(history)" ] }, { "cell_type": "code", "execution_count": null, "id": "f7cf2bf3", "metadata": {}, "outputs": [], "source": [ "# make predictions\n", "trainPredict = model.predict(trainX, batch_size=batch_size) #Now we need to specify the batch_size \n", "model.reset_states()\n", "testPredict = model.predict(testX, batch_size=batch_size)\n", "# invert predictions\n", "trainPredict = scaler.inverse_transform(trainPredict)\n", "trainY = scaler.inverse_transform([trainY])\n", "testPredict = scaler.inverse_transform(testPredict)\n", "testY = scaler.inverse_transform([testY])\n", "# calculate root mean squared error\n", "trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))\n", "print('Train Score: %.2f RMSE' % (trainScore))\n", "print('Train R^2: ', r2_score(trainY[0], trainPredict[:,0]))\n", "testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))\n", "print('Test Score: %.2f RMSE' % (testScore))\n", "print('Test R^2: ', r2_score(testY[0], testPredict[:,0]))\n", "\n", "# shift train predictions for plotting\n", "trainPredictPlot = numpy.empty_like(dataset)\n", "trainPredictPlot[:, :] = numpy.nan\n", "trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict\n", "# shift test predictions for plotting\n", "testPredictPlot = numpy.empty_like(dataset)\n", "testPredictPlot[:, :] = numpy.nan\n", "testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict\n", "# plot baseline and predictions\n", "plt.plot(scaler.inverse_transform(dataset))\n", "plt.plot(trainPredictPlot)\n", "plt.plot(testPredictPlot)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "ae93b0ec", "metadata": {}, "source": [ "## Adding Early Stopping\n", "\n", "A problem with training neural networks is in the choice of the number of training epochs to use.\n", "\n", "Too many epochs can lead to overfitting of the training dataset, whereas too few may result in an underfit model. Early stopping is a method that allows you to specify an arbitrary large number of training epochs and stop training once the model performance stops improving on a hold out validation dataset." ] }, { "cell_type": "code", "execution_count": 9, "id": "fa7bc677", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "trainX.shape: (92, 1, 3)\n", "trainY.shape: (92,)\n", "trainX[:5]: [0.01544401 0.02702703 0.05405405 0.02702703 0.05405405 0.04826255\n", " 0.05405405 0.04826255 0.03281853 0.04826255 0.03281853 0.05984557\n", " 0.03281853 0.05984557 0.08494207]\n", "trainY[:5]: [0.04826255 0.03281853 0.05984557 0.08494207 0.08494207]\n", "Deleting \"model\"\n", "Epoch 1/1000\n", "92/92 [==============================] - 4s 16ms/step - loss: 0.0291 - val_loss: 0.1044\n", "\n", "Epoch 00001: val_loss improved from inf to 0.10443, saving model to ./models/best_model_LSTM.h5\n", "Epoch 2/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0270 - val_loss: 0.1114\n", "\n", "Epoch 00002: val_loss did not improve from 0.10443\n", "Epoch 3/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0197 - val_loss: 0.0932\n", "\n", "Epoch 00003: val_loss improved from 0.10443 to 0.09320, saving model to ./models/best_model_LSTM.h5\n", "Epoch 4/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0229 - val_loss: 0.1033\n", "\n", "Epoch 00004: val_loss did not improve from 0.09320\n", "Epoch 5/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0214 - val_loss: 0.0760\n", "\n", "Epoch 00005: val_loss improved from 0.09320 to 0.07596, saving model to ./models/best_model_LSTM.h5\n", "Epoch 6/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0311 - val_loss: 0.0952\n", "\n", "Epoch 00006: val_loss did not improve from 0.07596\n", "Epoch 7/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0162 - val_loss: 0.0768\n", "\n", "Epoch 00007: val_loss did not improve from 0.07596\n", "Epoch 8/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0292 - val_loss: 0.0909\n", "\n", "Epoch 00008: val_loss did not improve from 0.07596\n", "Epoch 9/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0190 - val_loss: 0.0841\n", "\n", "Epoch 00009: val_loss did not improve from 0.07596\n", "Epoch 10/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0266 - val_loss: 0.0860\n", "\n", "Epoch 00010: val_loss did not improve from 0.07596\n", "Epoch 11/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0176 - val_loss: 0.0839\n", "\n", "Epoch 00011: val_loss did not improve from 0.07596\n", "Epoch 12/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0166 - val_loss: 0.0851\n", "\n", "Epoch 00012: val_loss did not improve from 0.07596\n", "Epoch 13/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0153 - val_loss: 0.0752\n", "\n", "Epoch 00013: val_loss improved from 0.07596 to 0.07520, saving model to ./models/best_model_LSTM.h5\n", "Epoch 14/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0111 - val_loss: 0.0611\n", "\n", "Epoch 00014: val_loss improved from 0.07520 to 0.06115, saving model to ./models/best_model_LSTM.h5\n", "Epoch 15/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0120 - val_loss: 0.0526\n", "\n", "Epoch 00015: val_loss improved from 0.06115 to 0.05264, saving model to ./models/best_model_LSTM.h5\n", "Epoch 16/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0191 - val_loss: 0.0550\n", "\n", "Epoch 00016: val_loss did not improve from 0.05264\n", "Epoch 17/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0121 - val_loss: 0.0463\n", "\n", "Epoch 00017: val_loss improved from 0.05264 to 0.04634, saving model to ./models/best_model_LSTM.h5\n", "Epoch 18/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0096 - val_loss: 0.0399\n", "\n", "Epoch 00018: val_loss improved from 0.04634 to 0.03987, saving model to ./models/best_model_LSTM.h5\n", "Epoch 19/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0076 - val_loss: 0.0381\n", "\n", "Epoch 00019: val_loss improved from 0.03987 to 0.03809, saving model to ./models/best_model_LSTM.h5\n", "Epoch 20/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0058 - val_loss: 0.0345\n", "\n", "Epoch 00020: val_loss improved from 0.03809 to 0.03454, saving model to ./models/best_model_LSTM.h5\n", "Epoch 21/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0052 - val_loss: 0.0349\n", "\n", "Epoch 00021: val_loss did not improve from 0.03454\n", "Epoch 22/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0045 - val_loss: 0.0319\n", "\n", "Epoch 00022: val_loss improved from 0.03454 to 0.03194, saving model to ./models/best_model_LSTM.h5\n", "Epoch 23/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0058 - val_loss: 0.0333\n", "\n", "Epoch 00023: val_loss did not improve from 0.03194\n", "Epoch 24/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0046 - val_loss: 0.0301\n", "\n", "Epoch 00024: val_loss improved from 0.03194 to 0.03013, saving model to ./models/best_model_LSTM.h5\n", "Epoch 25/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0038 - val_loss: 0.0308\n", "\n", "Epoch 00025: val_loss did not improve from 0.03013\n", "Epoch 26/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0037 - val_loss: 0.0298\n", "\n", "Epoch 00026: val_loss improved from 0.03013 to 0.02979, saving model to ./models/best_model_LSTM.h5\n", "Epoch 27/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0044 - val_loss: 0.0271\n", "\n", "Epoch 00027: val_loss improved from 0.02979 to 0.02713, saving model to ./models/best_model_LSTM.h5\n", "Epoch 28/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0046 - val_loss: 0.0315\n", "\n", "Epoch 00028: val_loss did not improve from 0.02713\n", "Epoch 29/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0046 - val_loss: 0.0311\n", "\n", "Epoch 00029: val_loss did not improve from 0.02713\n", "Epoch 30/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0039 - val_loss: 0.0316\n", "\n", "Epoch 00030: val_loss did not improve from 0.02713\n", "Epoch 31/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0037 - val_loss: 0.0341\n", "\n", "Epoch 00031: val_loss did not improve from 0.02713\n", "Epoch 32/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0044 - val_loss: 0.0329\n", "\n", "Epoch 00032: val_loss did not improve from 0.02713\n", "Epoch 33/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0041 - val_loss: 0.0318\n", "\n", "Epoch 00033: val_loss did not improve from 0.02713\n", "Epoch 34/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0043 - val_loss: 0.0319\n", "\n", "Epoch 00034: val_loss did not improve from 0.02713\n", "Epoch 35/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0046 - val_loss: 0.0324\n", "\n", "Epoch 00035: val_loss did not improve from 0.02713\n", "Epoch 36/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0046 - val_loss: 0.0297\n", "\n", "Epoch 00036: val_loss did not improve from 0.02713\n", "Epoch 37/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0050 - val_loss: 0.0328\n", "\n", "Epoch 00037: val_loss did not improve from 0.02713\n", "Epoch 38/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0033 - val_loss: 0.0353\n", "\n", "Epoch 00038: val_loss did not improve from 0.02713\n", "Epoch 39/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0043 - val_loss: 0.0325\n", "\n", "Epoch 00039: val_loss did not improve from 0.02713\n", "Epoch 40/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0038 - val_loss: 0.0339\n", "\n", "Epoch 00040: val_loss did not improve from 0.02713\n", "Epoch 41/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0035 - val_loss: 0.0320\n", "\n", "Epoch 00041: val_loss did not improve from 0.02713\n", "Epoch 42/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0038 - val_loss: 0.0376\n", "\n", "Epoch 00042: val_loss did not improve from 0.02713\n", "Epoch 43/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0041 - val_loss: 0.0322\n", "\n", "Epoch 00043: val_loss did not improve from 0.02713\n", "Epoch 44/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0034 - val_loss: 0.0340\n", "\n", "Epoch 00044: val_loss did not improve from 0.02713\n", "Epoch 45/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0041 - val_loss: 0.0349\n", "\n", "Epoch 00045: val_loss did not improve from 0.02713\n", "Epoch 46/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0046 - val_loss: 0.0382\n", "\n", "Epoch 00046: val_loss did not improve from 0.02713\n", "Epoch 47/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0032 - val_loss: 0.0337\n", "\n", "Epoch 00047: val_loss did not improve from 0.02713\n", "Epoch 48/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0033 - val_loss: 0.0349\n", "\n", "Epoch 00048: val_loss did not improve from 0.02713\n", "Epoch 49/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0032 - val_loss: 0.0353\n", "\n", "Epoch 00049: val_loss did not improve from 0.02713\n", "Epoch 50/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0032 - val_loss: 0.0317\n", "\n", "Epoch 00050: val_loss did not improve from 0.02713\n", "Epoch 51/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0040 - val_loss: 0.0326\n", "\n", "Epoch 00051: val_loss did not improve from 0.02713\n", "Epoch 52/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0031 - val_loss: 0.0368\n", "\n", "Epoch 00052: val_loss did not improve from 0.02713\n", "Epoch 53/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0024 - val_loss: 0.0378\n", "\n", "Epoch 00053: val_loss did not improve from 0.02713\n", "Epoch 54/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0041 - val_loss: 0.0328\n", "\n", "Epoch 00054: val_loss did not improve from 0.02713\n", "Epoch 55/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0043 - val_loss: 0.0350\n", "\n", "Epoch 00055: val_loss did not improve from 0.02713\n", "Epoch 56/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0027 - val_loss: 0.0328\n", "\n", "Epoch 00056: val_loss did not improve from 0.02713\n", "Epoch 57/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0028 - val_loss: 0.0345\n", "\n", "Epoch 00057: val_loss did not improve from 0.02713\n", "Epoch 58/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0043 - val_loss: 0.0353\n", "\n", "Epoch 00058: val_loss did not improve from 0.02713\n", "Epoch 59/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0044 - val_loss: 0.0292\n", "\n", "Epoch 00059: val_loss did not improve from 0.02713\n", "Epoch 60/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0039 - val_loss: 0.0295\n", "\n", "Epoch 00060: val_loss did not improve from 0.02713\n", "Epoch 61/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0037 - val_loss: 0.0367\n", "\n", "Epoch 00061: val_loss did not improve from 0.02713\n", "Epoch 62/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0035 - val_loss: 0.0358\n", "\n", "Epoch 00062: val_loss did not improve from 0.02713\n", "Epoch 63/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0030 - val_loss: 0.0354\n", "\n", "Epoch 00063: val_loss did not improve from 0.02713\n", "Epoch 64/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0032 - val_loss: 0.0325\n", "\n", "Epoch 00064: val_loss did not improve from 0.02713\n", "Epoch 65/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0027 - val_loss: 0.0333\n", "\n", "Epoch 00065: val_loss did not improve from 0.02713\n", "Epoch 66/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0030 - val_loss: 0.0338\n", "\n", "Epoch 00066: val_loss did not improve from 0.02713\n", "Epoch 67/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0034 - val_loss: 0.0343\n", "\n", "Epoch 00067: val_loss did not improve from 0.02713\n", "Epoch 68/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0031 - val_loss: 0.0350\n", "\n", "Epoch 00068: val_loss did not improve from 0.02713\n", "Epoch 69/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0039 - val_loss: 0.0320\n", "\n", "Epoch 00069: val_loss did not improve from 0.02713\n", "Epoch 70/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0027 - val_loss: 0.0288\n", "\n", "Epoch 00070: val_loss did not improve from 0.02713\n", "Epoch 71/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0030 - val_loss: 0.0349\n", "\n", "Epoch 00071: val_loss did not improve from 0.02713\n", "Epoch 72/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0022 - val_loss: 0.0341\n", "\n", "Epoch 00072: val_loss did not improve from 0.02713\n", "Epoch 73/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0033 - val_loss: 0.0315\n", "\n", "Epoch 00073: val_loss did not improve from 0.02713\n", "Epoch 74/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0032 - val_loss: 0.0344\n", "\n", "Epoch 00074: val_loss did not improve from 0.02713\n", "Epoch 75/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0034 - val_loss: 0.0340\n", "\n", "Epoch 00075: val_loss did not improve from 0.02713\n", "Epoch 76/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0032 - val_loss: 0.0363\n", "\n", "Epoch 00076: val_loss did not improve from 0.02713\n", "Epoch 77/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0030 - val_loss: 0.0318\n", "\n", "Epoch 00077: val_loss did not improve from 0.02713\n", "Epoch 78/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0026 - val_loss: 0.0388\n", "\n", "Epoch 00078: val_loss did not improve from 0.02713\n", "Epoch 79/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0034 - val_loss: 0.0401\n", "\n", "Epoch 00079: val_loss did not improve from 0.02713\n", "Epoch 80/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0032 - val_loss: 0.0311\n", "\n", "Epoch 00080: val_loss did not improve from 0.02713\n", "Epoch 81/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0036 - val_loss: 0.0317\n", "\n", "Epoch 00081: val_loss did not improve from 0.02713\n", "Epoch 82/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0025 - val_loss: 0.0306\n", "\n", "Epoch 00082: val_loss did not improve from 0.02713\n", "Epoch 83/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0028 - val_loss: 0.0359\n", "\n", "Epoch 00083: val_loss did not improve from 0.02713\n", "Epoch 84/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0349\n", "\n", "Epoch 00084: val_loss did not improve from 0.02713\n", "Epoch 85/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0029 - val_loss: 0.0312\n", "\n", "Epoch 00085: val_loss did not improve from 0.02713\n", "Epoch 86/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0036 - val_loss: 0.0367\n", "\n", "Epoch 00086: val_loss did not improve from 0.02713\n", "Epoch 87/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0030 - val_loss: 0.0324\n", "\n", "Epoch 00087: val_loss did not improve from 0.02713\n", "Epoch 88/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0039 - val_loss: 0.0330\n", "\n", "Epoch 00088: val_loss did not improve from 0.02713\n", "Epoch 89/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0026 - val_loss: 0.0310\n", "\n", "Epoch 00089: val_loss did not improve from 0.02713\n", "Epoch 90/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0032 - val_loss: 0.0364\n", "\n", "Epoch 00090: val_loss did not improve from 0.02713\n", "Epoch 91/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0023 - val_loss: 0.0347\n", "\n", "Epoch 00091: val_loss did not improve from 0.02713\n", "Epoch 92/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0029 - val_loss: 0.0324\n", "\n", "Epoch 00092: val_loss did not improve from 0.02713\n", "Epoch 93/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0037 - val_loss: 0.0243\n", "\n", "Epoch 00093: val_loss improved from 0.02713 to 0.02435, saving model to ./models/best_model_LSTM.h5\n", "Epoch 94/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0037 - val_loss: 0.0292\n", "\n", "Epoch 00094: val_loss did not improve from 0.02435\n", "Epoch 95/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0027 - val_loss: 0.0296\n", "\n", "Epoch 00095: val_loss did not improve from 0.02435\n", "Epoch 96/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0031 - val_loss: 0.0281\n", "\n", "Epoch 00096: val_loss did not improve from 0.02435\n", "Epoch 97/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0027 - val_loss: 0.0294\n", "\n", "Epoch 00097: val_loss did not improve from 0.02435\n", "Epoch 98/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0028 - val_loss: 0.0303\n", "\n", "Epoch 00098: val_loss did not improve from 0.02435\n", "Epoch 99/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0264\n", "\n", "Epoch 00099: val_loss did not improve from 0.02435\n", "Epoch 100/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0022 - val_loss: 0.0230\n", "\n", "Epoch 00100: val_loss improved from 0.02435 to 0.02297, saving model to ./models/best_model_LSTM.h5\n", "Epoch 101/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0025 - val_loss: 0.0255\n", "\n", "Epoch 00101: val_loss did not improve from 0.02297\n", "Epoch 102/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0028 - val_loss: 0.0305\n", "\n", "Epoch 00102: val_loss did not improve from 0.02297\n", "Epoch 103/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0040 - val_loss: 0.0288\n", "\n", "Epoch 00103: val_loss did not improve from 0.02297\n", "Epoch 104/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0023 - val_loss: 0.0217\n", "\n", "Epoch 00104: val_loss improved from 0.02297 to 0.02174, saving model to ./models/best_model_LSTM.h5\n", "Epoch 105/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0033 - val_loss: 0.0287\n", "\n", "Epoch 00105: val_loss did not improve from 0.02174\n", "Epoch 106/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0256\n", "\n", "Epoch 00106: val_loss did not improve from 0.02174\n", "Epoch 107/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0033 - val_loss: 0.0281\n", "\n", "Epoch 00107: val_loss did not improve from 0.02174\n", "Epoch 108/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0028 - val_loss: 0.0249\n", "\n", "Epoch 00108: val_loss did not improve from 0.02174\n", "Epoch 109/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0029 - val_loss: 0.0203\n", "\n", "Epoch 00109: val_loss improved from 0.02174 to 0.02027, saving model to ./models/best_model_LSTM.h5\n", "Epoch 110/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0270\n", "\n", "Epoch 00110: val_loss did not improve from 0.02027\n", "Epoch 111/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0021 - val_loss: 0.0254\n", "\n", "Epoch 00111: val_loss did not improve from 0.02027\n", "Epoch 112/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0023 - val_loss: 0.0212\n", "\n", "Epoch 00112: val_loss did not improve from 0.02027\n", "Epoch 113/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 0.0243\n", "\n", "Epoch 00113: val_loss did not improve from 0.02027\n", "Epoch 114/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0260\n", "\n", "Epoch 00114: val_loss did not improve from 0.02027\n", "Epoch 115/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0022 - val_loss: 0.0269\n", "\n", "Epoch 00115: val_loss did not improve from 0.02027\n", "Epoch 116/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0025 - val_loss: 0.0244\n", "\n", "Epoch 00116: val_loss did not improve from 0.02027\n", "Epoch 117/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0027 - val_loss: 0.0256\n", "\n", "Epoch 00117: val_loss did not improve from 0.02027\n", "Epoch 118/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0264\n", "\n", "Epoch 00118: val_loss did not improve from 0.02027\n", "Epoch 119/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0204\n", "\n", "Epoch 00119: val_loss did not improve from 0.02027\n", "Epoch 120/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0027 - val_loss: 0.0216\n", "\n", "Epoch 00120: val_loss did not improve from 0.02027\n", "Epoch 121/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0035 - val_loss: 0.0275\n", "\n", "Epoch 00121: val_loss did not improve from 0.02027\n", "Epoch 122/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0028 - val_loss: 0.0222\n", "\n", "Epoch 00122: val_loss did not improve from 0.02027\n", "Epoch 123/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0026 - val_loss: 0.0173\n", "\n", "Epoch 00123: val_loss improved from 0.02027 to 0.01725, saving model to ./models/best_model_LSTM.h5\n", "Epoch 124/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0268\n", "\n", "Epoch 00124: val_loss did not improve from 0.01725\n", "Epoch 125/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0025 - val_loss: 0.0236\n", "\n", "Epoch 00125: val_loss did not improve from 0.01725\n", "Epoch 126/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0032 - val_loss: 0.0223\n", "\n", "Epoch 00126: val_loss did not improve from 0.01725\n", "Epoch 127/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0220\n", "\n", "Epoch 00127: val_loss did not improve from 0.01725\n", "Epoch 128/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0261\n", "\n", "Epoch 00128: val_loss did not improve from 0.01725\n", "Epoch 129/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0213\n", "\n", "Epoch 00129: val_loss did not improve from 0.01725\n", "Epoch 130/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0022 - val_loss: 0.0222\n", "\n", "Epoch 00130: val_loss did not improve from 0.01725\n", "Epoch 131/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0025 - val_loss: 0.0212\n", "\n", "Epoch 00131: val_loss did not improve from 0.01725\n", "Epoch 132/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0240\n", "\n", "Epoch 00132: val_loss did not improve from 0.01725\n", "Epoch 133/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0238\n", "\n", "Epoch 00133: val_loss did not improve from 0.01725\n", "Epoch 134/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0264\n", "\n", "Epoch 00134: val_loss did not improve from 0.01725\n", "Epoch 135/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0026 - val_loss: 0.0230\n", "\n", "Epoch 00135: val_loss did not improve from 0.01725\n", "Epoch 136/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0024 - val_loss: 0.0222\n", "\n", "Epoch 00136: val_loss did not improve from 0.01725\n", "Epoch 137/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0026 - val_loss: 0.0231\n", "\n", "Epoch 00137: val_loss did not improve from 0.01725\n", "Epoch 138/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0023 - val_loss: 0.0268\n", "\n", "Epoch 00138: val_loss did not improve from 0.01725\n", "Epoch 139/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0253\n", "\n", "Epoch 00139: val_loss did not improve from 0.01725\n", "Epoch 140/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0198\n", "\n", "Epoch 00140: val_loss did not improve from 0.01725\n", "Epoch 141/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0028 - val_loss: 0.0210\n", "\n", "Epoch 00141: val_loss did not improve from 0.01725\n", "Epoch 142/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0199\n", "\n", "Epoch 00142: val_loss did not improve from 0.01725\n", "Epoch 143/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0231\n", "\n", "Epoch 00143: val_loss did not improve from 0.01725\n", "Epoch 144/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0207\n", "\n", "Epoch 00144: val_loss did not improve from 0.01725\n", "Epoch 145/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0221\n", "\n", "Epoch 00145: val_loss did not improve from 0.01725\n", "Epoch 146/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0015 - val_loss: 0.0146\n", "\n", "Epoch 00146: val_loss improved from 0.01725 to 0.01456, saving model to ./models/best_model_LSTM.h5\n", "Epoch 147/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0179\n", "\n", "Epoch 00147: val_loss did not improve from 0.01456\n", "Epoch 148/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0171\n", "\n", "Epoch 00148: val_loss did not improve from 0.01456\n", "Epoch 149/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0032 - val_loss: 0.0218\n", "\n", "Epoch 00149: val_loss did not improve from 0.01456\n", "Epoch 150/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0170\n", "\n", "Epoch 00150: val_loss did not improve from 0.01456\n", "Epoch 151/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0173\n", "\n", "Epoch 00151: val_loss did not improve from 0.01456\n", "Epoch 152/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0186\n", "\n", "Epoch 00152: val_loss did not improve from 0.01456\n", "Epoch 153/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0195\n", "\n", "Epoch 00153: val_loss did not improve from 0.01456\n", "Epoch 154/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0030 - val_loss: 0.0227\n", "\n", "Epoch 00154: val_loss did not improve from 0.01456\n", "Epoch 155/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0198\n", "\n", "Epoch 00155: val_loss did not improve from 0.01456\n", "Epoch 156/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0227\n", "\n", "Epoch 00156: val_loss did not improve from 0.01456\n", "Epoch 157/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0222\n", "\n", "Epoch 00157: val_loss did not improve from 0.01456\n", "Epoch 158/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0212\n", "\n", "Epoch 00158: val_loss did not improve from 0.01456\n", "Epoch 159/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0199\n", "\n", "Epoch 00159: val_loss did not improve from 0.01456\n", "Epoch 160/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0174\n", "\n", "Epoch 00160: val_loss did not improve from 0.01456\n", "Epoch 161/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0025 - val_loss: 0.0183\n", "\n", "Epoch 00161: val_loss did not improve from 0.01456\n", "Epoch 162/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0184\n", "\n", "Epoch 00162: val_loss did not improve from 0.01456\n", "Epoch 163/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0138\n", "\n", "Epoch 00163: val_loss improved from 0.01456 to 0.01382, saving model to ./models/best_model_LSTM.h5\n", "Epoch 164/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0166\n", "\n", "Epoch 00164: val_loss did not improve from 0.01382\n", "Epoch 165/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0031 - val_loss: 0.0235\n", "\n", "Epoch 00165: val_loss did not improve from 0.01382\n", "Epoch 166/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0020 - val_loss: 0.0231\n", "\n", "Epoch 00166: val_loss did not improve from 0.01382\n", "Epoch 167/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0179\n", "\n", "Epoch 00167: val_loss did not improve from 0.01382\n", "Epoch 168/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0190\n", "\n", "Epoch 00168: val_loss did not improve from 0.01382\n", "Epoch 169/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0200\n", "\n", "Epoch 00169: val_loss did not improve from 0.01382\n", "Epoch 170/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0025 - val_loss: 0.0242\n", "\n", "Epoch 00170: val_loss did not improve from 0.01382\n", "Epoch 171/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0161\n", "\n", "Epoch 00171: val_loss did not improve from 0.01382\n", "Epoch 172/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0027 - val_loss: 0.0176\n", "\n", "Epoch 00172: val_loss did not improve from 0.01382\n", "Epoch 173/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0173\n", "\n", "Epoch 00173: val_loss did not improve from 0.01382\n", "Epoch 174/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0017 - val_loss: 0.0150\n", "\n", "Epoch 00174: val_loss did not improve from 0.01382\n", "Epoch 175/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0153\n", "\n", "Epoch 00175: val_loss did not improve from 0.01382\n", "Epoch 176/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0195\n", "\n", "Epoch 00176: val_loss did not improve from 0.01382\n", "Epoch 177/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0019 - val_loss: 0.0163\n", "\n", "Epoch 00177: val_loss did not improve from 0.01382\n", "Epoch 178/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0024 - val_loss: 0.0167\n", "\n", "Epoch 00178: val_loss did not improve from 0.01382\n", "Epoch 179/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0022 - val_loss: 0.0175\n", "\n", "Epoch 00179: val_loss did not improve from 0.01382\n", "Epoch 180/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0183\n", "\n", "Epoch 00180: val_loss did not improve from 0.01382\n", "Epoch 181/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0194\n", "\n", "Epoch 00181: val_loss did not improve from 0.01382\n", "Epoch 182/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0025 - val_loss: 0.0151\n", "\n", "Epoch 00182: val_loss did not improve from 0.01382\n", "Epoch 183/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0019 - val_loss: 0.0167\n", "\n", "Epoch 00183: val_loss did not improve from 0.01382\n", "Epoch 184/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 0.0139\n", "\n", "Epoch 00184: val_loss did not improve from 0.01382\n", "Epoch 185/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0208\n", "\n", "Epoch 00185: val_loss did not improve from 0.01382\n", "Epoch 186/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0028 - val_loss: 0.0174\n", "\n", "Epoch 00186: val_loss did not improve from 0.01382\n", "Epoch 187/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0024 - val_loss: 0.0155\n", "\n", "Epoch 00187: val_loss did not improve from 0.01382\n", "Epoch 188/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0021 - val_loss: 0.0157\n", "\n", "Epoch 00188: val_loss did not improve from 0.01382\n", "Epoch 189/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0018 - val_loss: 0.0196\n", "\n", "Epoch 00189: val_loss did not improve from 0.01382\n", "Epoch 190/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0022 - val_loss: 0.0187\n", "\n", "Epoch 00190: val_loss did not improve from 0.01382\n", "Epoch 191/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0022 - val_loss: 0.0170\n", "\n", "Epoch 00191: val_loss did not improve from 0.01382\n", "Epoch 192/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0023 - val_loss: 0.0177\n", "\n", "Epoch 00192: val_loss did not improve from 0.01382\n", "Epoch 193/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0023 - val_loss: 0.0184\n", "\n", "Epoch 00193: val_loss did not improve from 0.01382\n", "Epoch 194/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0169\n", "\n", "Epoch 00194: val_loss did not improve from 0.01382\n", "Epoch 195/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0186\n", "\n", "Epoch 00195: val_loss did not improve from 0.01382\n", "Epoch 196/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0145\n", "\n", "Epoch 00196: val_loss did not improve from 0.01382\n", "Epoch 197/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0190\n", "\n", "Epoch 00197: val_loss did not improve from 0.01382\n", "Epoch 198/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0167\n", "\n", "Epoch 00198: val_loss did not improve from 0.01382\n", "Epoch 199/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0017 - val_loss: 0.0166\n", "\n", "Epoch 00199: val_loss did not improve from 0.01382\n", "Epoch 200/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0216\n", "\n", "Epoch 00200: val_loss did not improve from 0.01382\n", "Epoch 201/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0020 - val_loss: 0.0137\n", "\n", "Epoch 00201: val_loss improved from 0.01382 to 0.01372, saving model to ./models/best_model_LSTM.h5\n", "Epoch 202/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0141\n", "\n", "Epoch 00202: val_loss did not improve from 0.01372\n", "Epoch 203/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0025 - val_loss: 0.0172\n", "\n", "Epoch 00203: val_loss did not improve from 0.01372\n", "Epoch 204/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0019 - val_loss: 0.0181\n", "\n", "Epoch 00204: val_loss did not improve from 0.01372\n", "Epoch 205/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0028 - val_loss: 0.0186\n", "\n", "Epoch 00205: val_loss did not improve from 0.01372\n", "Epoch 206/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0021 - val_loss: 0.0211\n", "\n", "Epoch 00206: val_loss did not improve from 0.01372\n", "Epoch 207/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0028 - val_loss: 0.0121\n", "\n", "Epoch 00207: val_loss improved from 0.01372 to 0.01205, saving model to ./models/best_model_LSTM.h5\n", "Epoch 208/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0029 - val_loss: 0.0188\n", "\n", "Epoch 00208: val_loss did not improve from 0.01205\n", "Epoch 209/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0018 - val_loss: 0.0140\n", "\n", "Epoch 00209: val_loss did not improve from 0.01205\n", "Epoch 210/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0218\n", "\n", "Epoch 00210: val_loss did not improve from 0.01205\n", "Epoch 211/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0029 - val_loss: 0.0183\n", "\n", "Epoch 00211: val_loss did not improve from 0.01205\n", "Epoch 212/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0170\n", "\n", "Epoch 00212: val_loss did not improve from 0.01205\n", "Epoch 213/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0171\n", "\n", "Epoch 00213: val_loss did not improve from 0.01205\n", "Epoch 214/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0177\n", "\n", "Epoch 00214: val_loss did not improve from 0.01205\n", "Epoch 215/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0017 - val_loss: 0.0166\n", "\n", "Epoch 00215: val_loss did not improve from 0.01205\n", "Epoch 216/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0023 - val_loss: 0.0164\n", "\n", "Epoch 00216: val_loss did not improve from 0.01205\n", "Epoch 217/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0021 - val_loss: 0.0189\n", "\n", "Epoch 00217: val_loss did not improve from 0.01205\n", "Epoch 218/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0118\n", "\n", "Epoch 00218: val_loss improved from 0.01205 to 0.01183, saving model to ./models/best_model_LSTM.h5\n", "Epoch 219/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0022 - val_loss: 0.0151\n", "\n", "Epoch 00219: val_loss did not improve from 0.01183\n", "Epoch 220/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0025 - val_loss: 0.0189\n", "\n", "Epoch 00220: val_loss did not improve from 0.01183\n", "Epoch 221/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0032 - val_loss: 0.0191\n", "\n", "Epoch 00221: val_loss did not improve from 0.01183\n", "Epoch 222/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0162\n", "\n", "Epoch 00222: val_loss did not improve from 0.01183\n", "Epoch 223/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0016 - val_loss: 0.0160\n", "\n", "Epoch 00223: val_loss did not improve from 0.01183\n", "Epoch 224/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0030 - val_loss: 0.0166\n", "\n", "Epoch 00224: val_loss did not improve from 0.01183\n", "Epoch 225/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0029 - val_loss: 0.0142\n", "\n", "Epoch 00225: val_loss did not improve from 0.01183\n", "Epoch 226/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 0.0157\n", "\n", "Epoch 00226: val_loss did not improve from 0.01183\n", "Epoch 227/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0031 - val_loss: 0.0213\n", "\n", "Epoch 00227: val_loss did not improve from 0.01183\n", "Epoch 228/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 0.0185\n", "\n", "Epoch 00228: val_loss did not improve from 0.01183\n", "Epoch 229/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0017 - val_loss: 0.0165\n", "\n", "Epoch 00229: val_loss did not improve from 0.01183\n", "Epoch 230/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0151\n", "\n", "Epoch 00230: val_loss did not improve from 0.01183\n", "Epoch 231/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0153\n", "\n", "Epoch 00231: val_loss did not improve from 0.01183\n", "Epoch 232/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0015 - val_loss: 0.0150\n", "\n", "Epoch 00232: val_loss did not improve from 0.01183\n", "Epoch 233/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0021 - val_loss: 0.0147\n", "\n", "Epoch 00233: val_loss did not improve from 0.01183\n", "Epoch 234/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0140\n", "\n", "Epoch 00234: val_loss did not improve from 0.01183\n", "Epoch 235/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0028 - val_loss: 0.0153\n", "\n", "Epoch 00235: val_loss did not improve from 0.01183\n", "Epoch 236/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0028 - val_loss: 0.0169\n", "\n", "Epoch 00236: val_loss did not improve from 0.01183\n", "Epoch 237/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0139\n", "\n", "Epoch 00237: val_loss did not improve from 0.01183\n", "Epoch 238/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0119\n", "\n", "Epoch 00238: val_loss did not improve from 0.01183\n", "Epoch 239/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0150\n", "\n", "Epoch 00239: val_loss did not improve from 0.01183\n", "Epoch 240/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0152\n", "\n", "Epoch 00240: val_loss did not improve from 0.01183\n", "Epoch 241/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0022 - val_loss: 0.0127\n", "\n", "Epoch 00241: val_loss did not improve from 0.01183\n", "Epoch 242/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0019 - val_loss: 0.0122\n", "\n", "Epoch 00242: val_loss did not improve from 0.01183\n", "Epoch 243/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0028 - val_loss: 0.0140\n", "\n", "Epoch 00243: val_loss did not improve from 0.01183\n", "Epoch 244/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0151\n", "\n", "Epoch 00244: val_loss did not improve from 0.01183\n", "Epoch 245/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0149\n", "\n", "Epoch 00245: val_loss did not improve from 0.01183\n", "Epoch 246/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0173\n", "\n", "Epoch 00246: val_loss did not improve from 0.01183\n", "Epoch 247/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0014 - val_loss: 0.0150\n", "\n", "Epoch 00247: val_loss did not improve from 0.01183\n", "Epoch 248/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0125\n", "\n", "Epoch 00248: val_loss did not improve from 0.01183\n", "Epoch 249/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0117\n", "\n", "Epoch 00249: val_loss improved from 0.01183 to 0.01174, saving model to ./models/best_model_LSTM.h5\n", "Epoch 250/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0146\n", "\n", "Epoch 00250: val_loss did not improve from 0.01174\n", "Epoch 251/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0166\n", "\n", "Epoch 00251: val_loss did not improve from 0.01174\n", "Epoch 252/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0027 - val_loss: 0.0169\n", "\n", "Epoch 00252: val_loss did not improve from 0.01174\n", "Epoch 253/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0026 - val_loss: 0.0212\n", "\n", "Epoch 00253: val_loss did not improve from 0.01174\n", "Epoch 254/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0145\n", "\n", "Epoch 00254: val_loss did not improve from 0.01174\n", "Epoch 255/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0022 - val_loss: 0.0176\n", "\n", "Epoch 00255: val_loss did not improve from 0.01174\n", "Epoch 256/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0021 - val_loss: 0.0188\n", "\n", "Epoch 00256: val_loss did not improve from 0.01174\n", "Epoch 257/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0024 - val_loss: 0.0134\n", "\n", "Epoch 00257: val_loss did not improve from 0.01174\n", "Epoch 258/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0021 - val_loss: 0.0190\n", "\n", "Epoch 00258: val_loss did not improve from 0.01174\n", "Epoch 259/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0027 - val_loss: 0.0177\n", "\n", "Epoch 00259: val_loss did not improve from 0.01174\n", "Epoch 260/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0013 - val_loss: 0.0155\n", "\n", "Epoch 00260: val_loss did not improve from 0.01174\n", "Epoch 261/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0027 - val_loss: 0.0163\n", "\n", "Epoch 00261: val_loss did not improve from 0.01174\n", "Epoch 262/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0023 - val_loss: 0.0134\n", "\n", "Epoch 00262: val_loss did not improve from 0.01174\n", "Epoch 263/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0016 - val_loss: 0.0160\n", "\n", "Epoch 00263: val_loss did not improve from 0.01174\n", "Epoch 264/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0019 - val_loss: 0.0143\n", "\n", "Epoch 00264: val_loss did not improve from 0.01174\n", "Epoch 265/1000\n", "92/92 [==============================] - 0s 4ms/step - loss: 0.0019 - val_loss: 0.0136\n", "\n", "Epoch 00265: val_loss did not improve from 0.01174\n", "Epoch 266/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0015 - val_loss: 0.0113\n", "\n", "Epoch 00266: val_loss improved from 0.01174 to 0.01132, saving model to ./models/best_model_LSTM.h5\n", "Epoch 267/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0022 - val_loss: 0.0141\n", "\n", "Epoch 00267: val_loss did not improve from 0.01132\n", "Epoch 268/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0022 - val_loss: 0.0144\n", "\n", "Epoch 00268: val_loss did not improve from 0.01132\n", "Epoch 269/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0019 - val_loss: 0.0159\n", "\n", "Epoch 00269: val_loss did not improve from 0.01132\n", "Epoch 270/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0019 - val_loss: 0.0190\n", "\n", "Epoch 00270: val_loss did not improve from 0.01132\n", "Epoch 271/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0021 - val_loss: 0.0171\n", "\n", "Epoch 00271: val_loss did not improve from 0.01132\n", "Epoch 272/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0017 - val_loss: 0.0137\n", "\n", "Epoch 00272: val_loss did not improve from 0.01132\n", "Epoch 273/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0129\n", "\n", "Epoch 00273: val_loss did not improve from 0.01132\n", "Epoch 274/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0027 - val_loss: 0.0195\n", "\n", "Epoch 00274: val_loss did not improve from 0.01132\n", "Epoch 275/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0200\n", "\n", "Epoch 00275: val_loss did not improve from 0.01132\n", "Epoch 276/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0013 - val_loss: 0.0156\n", "\n", "Epoch 00276: val_loss did not improve from 0.01132\n", "Epoch 277/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0025 - val_loss: 0.0198\n", "\n", "Epoch 00277: val_loss did not improve from 0.01132\n", "Epoch 278/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0162\n", "\n", "Epoch 00278: val_loss did not improve from 0.01132\n", "Epoch 279/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0153\n", "\n", "Epoch 00279: val_loss did not improve from 0.01132\n", "Epoch 280/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0160\n", "\n", "Epoch 00280: val_loss did not improve from 0.01132\n", "Epoch 281/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0164\n", "\n", "Epoch 00281: val_loss did not improve from 0.01132\n", "Epoch 282/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0169\n", "\n", "Epoch 00282: val_loss did not improve from 0.01132\n", "Epoch 283/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0158\n", "\n", "Epoch 00283: val_loss did not improve from 0.01132\n", "Epoch 284/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0142\n", "\n", "Epoch 00284: val_loss did not improve from 0.01132\n", "Epoch 285/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 0.0163\n", "\n", "Epoch 00285: val_loss did not improve from 0.01132\n", "Epoch 286/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0028 - val_loss: 0.0192\n", "\n", "Epoch 00286: val_loss did not improve from 0.01132\n", "Epoch 287/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0130\n", "\n", "Epoch 00287: val_loss did not improve from 0.01132\n", "Epoch 288/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0024 - val_loss: 0.0129\n", "\n", "Epoch 00288: val_loss did not improve from 0.01132\n", "Epoch 289/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0182\n", "\n", "Epoch 00289: val_loss did not improve from 0.01132\n", "Epoch 290/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0169\n", "\n", "Epoch 00290: val_loss did not improve from 0.01132\n", "Epoch 291/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0016 - val_loss: 0.0188\n", "\n", "Epoch 00291: val_loss did not improve from 0.01132\n", "Epoch 292/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0016 - val_loss: 0.0132\n", "\n", "Epoch 00292: val_loss did not improve from 0.01132\n", "Epoch 293/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0021 - val_loss: 0.0207\n", "\n", "Epoch 00293: val_loss did not improve from 0.01132\n", "Epoch 294/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0199\n", "\n", "Epoch 00294: val_loss did not improve from 0.01132\n", "Epoch 295/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0026 - val_loss: 0.0185\n", "\n", "Epoch 00295: val_loss did not improve from 0.01132\n", "Epoch 296/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0021 - val_loss: 0.0180\n", "\n", "Epoch 00296: val_loss did not improve from 0.01132\n", "Epoch 297/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0022 - val_loss: 0.0165\n", "\n", "Epoch 00297: val_loss did not improve from 0.01132\n", "Epoch 298/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0015 - val_loss: 0.0145\n", "\n", "Epoch 00298: val_loss did not improve from 0.01132\n", "Epoch 299/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0019 - val_loss: 0.0173\n", "\n", "Epoch 00299: val_loss did not improve from 0.01132\n", "Epoch 300/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0025 - val_loss: 0.0202\n", "\n", "Epoch 00300: val_loss did not improve from 0.01132\n", "Epoch 301/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0156\n", "\n", "Epoch 00301: val_loss did not improve from 0.01132\n", "Epoch 302/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0015 - val_loss: 0.0144\n", "\n", "Epoch 00302: val_loss did not improve from 0.01132\n", "Epoch 303/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0018 - val_loss: 0.0151\n", "\n", "Epoch 00303: val_loss did not improve from 0.01132\n", "Epoch 304/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0017 - val_loss: 0.0152\n", "\n", "Epoch 00304: val_loss did not improve from 0.01132\n", "Epoch 305/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0015 - val_loss: 0.0132\n", "\n", "Epoch 00305: val_loss did not improve from 0.01132\n", "Epoch 306/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0016 - val_loss: 0.0169\n", "\n", "Epoch 00306: val_loss did not improve from 0.01132\n", "Epoch 307/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0175\n", "\n", "Epoch 00307: val_loss did not improve from 0.01132\n", "Epoch 308/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0147\n", "\n", "Epoch 00308: val_loss did not improve from 0.01132\n", "Epoch 309/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0025 - val_loss: 0.0130\n", "\n", "Epoch 00309: val_loss did not improve from 0.01132\n", "Epoch 310/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0021 - val_loss: 0.0142\n", "\n", "Epoch 00310: val_loss did not improve from 0.01132\n", "Epoch 311/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0022 - val_loss: 0.0175\n", "\n", "Epoch 00311: val_loss did not improve from 0.01132\n", "Epoch 312/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0025 - val_loss: 0.0181\n", "\n", "Epoch 00312: val_loss did not improve from 0.01132\n", "Epoch 313/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0018 - val_loss: 0.0170\n", "\n", "Epoch 00313: val_loss did not improve from 0.01132\n", "Epoch 314/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0026 - val_loss: 0.0160\n", "\n", "Epoch 00314: val_loss did not improve from 0.01132\n", "Epoch 315/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0020 - val_loss: 0.0136\n", "\n", "Epoch 00315: val_loss did not improve from 0.01132\n", "Epoch 316/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0152\n", "\n", "Epoch 00316: val_loss did not improve from 0.01132\n", "Epoch 317/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0156\n", "\n", "Epoch 00317: val_loss did not improve from 0.01132\n", "Epoch 318/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0130\n", "\n", "Epoch 00318: val_loss did not improve from 0.01132\n", "Epoch 319/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0173\n", "\n", "Epoch 00319: val_loss did not improve from 0.01132\n", "Epoch 320/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0112\n", "\n", "Epoch 00320: val_loss improved from 0.01132 to 0.01121, saving model to ./models/best_model_LSTM.h5\n", "Epoch 321/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0134\n", "\n", "Epoch 00321: val_loss did not improve from 0.01121\n", "Epoch 322/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0020 - val_loss: 0.0146\n", "\n", "Epoch 00322: val_loss did not improve from 0.01121\n", "Epoch 323/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0025 - val_loss: 0.0144\n", "\n", "Epoch 00323: val_loss did not improve from 0.01121\n", "Epoch 324/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0201\n", "\n", "Epoch 00324: val_loss did not improve from 0.01121\n", "Epoch 325/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0164\n", "\n", "Epoch 00325: val_loss did not improve from 0.01121\n", "Epoch 326/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0018 - val_loss: 0.0117\n", "\n", "Epoch 00326: val_loss did not improve from 0.01121\n", "Epoch 327/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0127\n", "\n", "Epoch 00327: val_loss did not improve from 0.01121\n", "Epoch 328/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0022 - val_loss: 0.0154\n", "\n", "Epoch 00328: val_loss did not improve from 0.01121\n", "Epoch 329/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0023 - val_loss: 0.0158\n", "\n", "Epoch 00329: val_loss did not improve from 0.01121\n", "Epoch 330/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0017 - val_loss: 0.0152\n", "\n", "Epoch 00330: val_loss did not improve from 0.01121\n", "Epoch 331/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0155\n", "\n", "Epoch 00331: val_loss did not improve from 0.01121\n", "Epoch 332/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0022 - val_loss: 0.0173\n", "\n", "Epoch 00332: val_loss did not improve from 0.01121\n", "Epoch 333/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0186\n", "\n", "Epoch 00333: val_loss did not improve from 0.01121\n", "Epoch 334/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0015 - val_loss: 0.0161\n", "\n", "Epoch 00334: val_loss did not improve from 0.01121\n", "Epoch 335/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0015 - val_loss: 0.0129\n", "\n", "Epoch 00335: val_loss did not improve from 0.01121\n", "Epoch 336/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0027 - val_loss: 0.0146\n", "\n", "Epoch 00336: val_loss did not improve from 0.01121\n", "Epoch 337/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0028 - val_loss: 0.0140\n", "\n", "Epoch 00337: val_loss did not improve from 0.01121\n", "Epoch 338/1000\n", "92/92 [==============================] - ETA: 0s - loss: 0.001 - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0106\n", "\n", "Epoch 00338: val_loss improved from 0.01121 to 0.01064, saving model to ./models/best_model_LSTM.h5\n", "Epoch 339/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0142\n", "\n", "Epoch 00339: val_loss did not improve from 0.01064\n", "Epoch 340/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0016 - val_loss: 0.0164\n", "\n", "Epoch 00340: val_loss did not improve from 0.01064\n", "Epoch 341/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0013 - val_loss: 0.0163\n", "\n", "Epoch 00341: val_loss did not improve from 0.01064\n", "Epoch 342/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0022 - val_loss: 0.0126\n", "\n", "Epoch 00342: val_loss did not improve from 0.01064\n", "Epoch 343/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0168\n", "\n", "Epoch 00343: val_loss did not improve from 0.01064\n", "Epoch 344/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0168\n", "\n", "Epoch 00344: val_loss did not improve from 0.01064\n", "Epoch 345/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0024 - val_loss: 0.0166\n", "\n", "Epoch 00345: val_loss did not improve from 0.01064\n", "Epoch 346/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0158\n", "\n", "Epoch 00346: val_loss did not improve from 0.01064\n", "Epoch 347/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0124\n", "\n", "Epoch 00347: val_loss did not improve from 0.01064\n", "Epoch 348/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0130\n", "\n", "Epoch 00348: val_loss did not improve from 0.01064\n", "Epoch 349/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0139\n", "\n", "Epoch 00349: val_loss did not improve from 0.01064\n", "Epoch 350/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0175\n", "\n", "Epoch 00350: val_loss did not improve from 0.01064\n", "Epoch 351/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0171\n", "\n", "Epoch 00351: val_loss did not improve from 0.01064\n", "Epoch 352/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0012 - val_loss: 0.0128\n", "\n", "Epoch 00352: val_loss did not improve from 0.01064\n", "Epoch 353/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0019 - val_loss: 0.0156\n", "\n", "Epoch 00353: val_loss did not improve from 0.01064\n", "Epoch 354/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0138\n", "\n", "Epoch 00354: val_loss did not improve from 0.01064\n", "Epoch 355/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0104\n", "\n", "Epoch 00355: val_loss improved from 0.01064 to 0.01045, saving model to ./models/best_model_LSTM.h5\n", "Epoch 356/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0101\n", "\n", "Epoch 00356: val_loss improved from 0.01045 to 0.01012, saving model to ./models/best_model_LSTM.h5\n", "Epoch 357/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0026 - val_loss: 0.0122\n", "\n", "Epoch 00357: val_loss did not improve from 0.01012\n", "Epoch 358/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0024 - val_loss: 0.0157\n", "\n", "Epoch 00358: val_loss did not improve from 0.01012\n", "Epoch 359/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0164\n", "\n", "Epoch 00359: val_loss did not improve from 0.01012\n", "Epoch 360/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0014 - val_loss: 0.0155\n", "\n", "Epoch 00360: val_loss did not improve from 0.01012\n", "Epoch 361/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0017 - val_loss: 0.0120\n", "\n", "Epoch 00361: val_loss did not improve from 0.01012\n", "Epoch 362/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0023 - val_loss: 0.0131\n", "\n", "Epoch 00362: val_loss did not improve from 0.01012\n", "Epoch 363/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0017 - val_loss: 0.0194\n", "\n", "Epoch 00363: val_loss did not improve from 0.01012\n", "Epoch 364/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0153\n", "\n", "Epoch 00364: val_loss did not improve from 0.01012\n", "Epoch 365/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0172\n", "\n", "Epoch 00365: val_loss did not improve from 0.01012\n", "Epoch 366/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0017 - val_loss: 0.0111\n", "\n", "Epoch 00366: val_loss did not improve from 0.01012\n", "Epoch 367/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0152\n", "\n", "Epoch 00367: val_loss did not improve from 0.01012\n", "Epoch 368/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0019 - val_loss: 0.0165\n", "\n", "Epoch 00368: val_loss did not improve from 0.01012\n", "Epoch 369/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0014 - val_loss: 0.0111\n", "\n", "Epoch 00369: val_loss did not improve from 0.01012\n", "Epoch 370/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0026 - val_loss: 0.0131\n", "\n", "Epoch 00370: val_loss did not improve from 0.01012\n", "Epoch 371/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0134\n", "\n", "Epoch 00371: val_loss did not improve from 0.01012\n", "Epoch 372/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0088\n", "\n", "Epoch 00372: val_loss improved from 0.01012 to 0.00875, saving model to ./models/best_model_LSTM.h5\n", "Epoch 373/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0025 - val_loss: 0.0099\n", "\n", "Epoch 00373: val_loss did not improve from 0.00875\n", "Epoch 374/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0177\n", "\n", "Epoch 00374: val_loss did not improve from 0.00875\n", "Epoch 375/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0147\n", "\n", "Epoch 00375: val_loss did not improve from 0.00875\n", "Epoch 376/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0110\n", "\n", "Epoch 00376: val_loss did not improve from 0.00875\n", "Epoch 377/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0099\n", "\n", "Epoch 00377: val_loss did not improve from 0.00875\n", "Epoch 378/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0019 - val_loss: 0.0142\n", "\n", "Epoch 00378: val_loss did not improve from 0.00875\n", "Epoch 379/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0116\n", "\n", "Epoch 00379: val_loss did not improve from 0.00875\n", "Epoch 380/1000\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0017 - val_loss: 0.0139\n", "\n", "Epoch 00380: val_loss did not improve from 0.00875\n", "Epoch 381/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0149\n", "\n", "Epoch 00381: val_loss did not improve from 0.00875\n", "Epoch 382/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0137\n", "\n", "Epoch 00382: val_loss did not improve from 0.00875\n", "Epoch 383/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0139\n", "\n", "Epoch 00383: val_loss did not improve from 0.00875\n", "Epoch 384/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0103\n", "\n", "Epoch 00384: val_loss did not improve from 0.00875\n", "Epoch 385/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0021 - val_loss: 0.0164\n", "\n", "Epoch 00385: val_loss did not improve from 0.00875\n", "Epoch 386/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0016 - val_loss: 0.0145\n", "\n", "Epoch 00386: val_loss did not improve from 0.00875\n", "Epoch 387/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0106\n", "\n", "Epoch 00387: val_loss did not improve from 0.00875\n", "Epoch 388/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0122\n", "\n", "Epoch 00388: val_loss did not improve from 0.00875\n", "Epoch 389/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0017 - val_loss: 0.0146\n", "\n", "Epoch 00389: val_loss did not improve from 0.00875\n", "Epoch 390/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0019 - val_loss: 0.0112\n", "\n", "Epoch 00390: val_loss did not improve from 0.00875\n", "Epoch 391/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0015 - val_loss: 0.0097\n", "\n", "Epoch 00391: val_loss did not improve from 0.00875\n", "Epoch 392/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0116\n", "\n", "Epoch 00392: val_loss did not improve from 0.00875\n", "Epoch 393/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0140\n", "\n", "Epoch 00393: val_loss did not improve from 0.00875\n", "Epoch 394/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0132\n", "\n", "Epoch 00394: val_loss did not improve from 0.00875\n", "Epoch 395/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0121\n", "\n", "Epoch 00395: val_loss did not improve from 0.00875\n", "Epoch 396/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0024 - val_loss: 0.0161\n", "\n", "Epoch 00396: val_loss did not improve from 0.00875\n", "Epoch 397/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0133\n", "\n", "Epoch 00397: val_loss did not improve from 0.00875\n", "Epoch 398/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0025 - val_loss: 0.0137\n", "\n", "Epoch 00398: val_loss did not improve from 0.00875\n", "Epoch 399/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0020 - val_loss: 0.0157\n", "\n", "Epoch 00399: val_loss did not improve from 0.00875\n", "Epoch 400/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0169\n", "\n", "Epoch 00400: val_loss did not improve from 0.00875\n", "Epoch 401/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0015 - val_loss: 0.0146\n", "\n", "Epoch 00401: val_loss did not improve from 0.00875\n", "Epoch 402/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0154\n", "\n", "Epoch 00402: val_loss did not improve from 0.00875\n", "Epoch 403/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0149\n", "\n", "Epoch 00403: val_loss did not improve from 0.00875\n", "Epoch 404/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0014 - val_loss: 0.0114\n", "\n", "Epoch 00404: val_loss did not improve from 0.00875\n", "Epoch 405/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0125\n", "\n", "Epoch 00405: val_loss did not improve from 0.00875\n", "Epoch 406/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0141\n", "\n", "Epoch 00406: val_loss did not improve from 0.00875\n", "Epoch 407/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0017 - val_loss: 0.0185\n", "\n", "Epoch 00407: val_loss did not improve from 0.00875\n", "Epoch 408/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0123\n", "\n", "Epoch 00408: val_loss did not improve from 0.00875\n", "Epoch 409/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0019 - val_loss: 0.0177\n", "\n", "Epoch 00409: val_loss did not improve from 0.00875\n", "Epoch 410/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0168\n", "\n", "Epoch 00410: val_loss did not improve from 0.00875\n", "Epoch 411/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0022 - val_loss: 0.0146\n", "\n", "Epoch 00411: val_loss did not improve from 0.00875\n", "Epoch 412/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0164\n", "\n", "Epoch 00412: val_loss did not improve from 0.00875\n", "Epoch 413/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0119\n", "\n", "Epoch 00413: val_loss did not improve from 0.00875\n", "Epoch 414/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0169\n", "\n", "Epoch 00414: val_loss did not improve from 0.00875\n", "Epoch 415/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0094\n", "\n", "Epoch 00415: val_loss did not improve from 0.00875\n", "Epoch 416/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0117\n", "\n", "Epoch 00416: val_loss did not improve from 0.00875\n", "Epoch 417/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0017 - val_loss: 0.0147\n", "\n", "Epoch 00417: val_loss did not improve from 0.00875\n", "Epoch 418/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0133\n", "\n", "Epoch 00418: val_loss did not improve from 0.00875\n", "Epoch 419/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0142\n", "\n", "Epoch 00419: val_loss did not improve from 0.00875\n", "Epoch 420/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0086\n", "\n", "Epoch 00420: val_loss improved from 0.00875 to 0.00855, saving model to ./models/best_model_LSTM.h5\n", "Epoch 421/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0137\n", "\n", "Epoch 00421: val_loss did not improve from 0.00855\n", "Epoch 422/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0152\n", "\n", "Epoch 00422: val_loss did not improve from 0.00855\n", "Epoch 423/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0098\n", "\n", "Epoch 00423: val_loss did not improve from 0.00855\n", "Epoch 424/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 0.0119\n", "\n", "Epoch 00424: val_loss did not improve from 0.00855\n", "Epoch 425/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 0.0103\n", "\n", "Epoch 00425: val_loss did not improve from 0.00855\n", "Epoch 426/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0122\n", "\n", "Epoch 00426: val_loss did not improve from 0.00855\n", "Epoch 427/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0015 - val_loss: 0.0132\n", "\n", "Epoch 00427: val_loss did not improve from 0.00855\n", "Epoch 428/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0096\n", "\n", "Epoch 00428: val_loss did not improve from 0.00855\n", "Epoch 429/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 0.0142\n", "\n", "Epoch 00429: val_loss did not improve from 0.00855\n", "Epoch 430/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0143\n", "\n", "Epoch 00430: val_loss did not improve from 0.00855\n", "Epoch 431/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0105\n", "\n", "Epoch 00431: val_loss did not improve from 0.00855\n", "Epoch 432/1000\n", "92/92 [==============================] - 1s 5ms/step - loss: 0.0023 - val_loss: 0.0153\n", "\n", "Epoch 00432: val_loss did not improve from 0.00855\n", "Epoch 433/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0110\n", "\n", "Epoch 00433: val_loss did not improve from 0.00855\n", "Epoch 434/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0022 - val_loss: 0.0146\n", "\n", "Epoch 00434: val_loss did not improve from 0.00855\n", "Epoch 435/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0121\n", "\n", "Epoch 00435: val_loss did not improve from 0.00855\n", "Epoch 436/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0110\n", "\n", "Epoch 00436: val_loss did not improve from 0.00855\n", "Epoch 437/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0112\n", "\n", "Epoch 00437: val_loss did not improve from 0.00855\n", "Epoch 438/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0095\n", "\n", "Epoch 00438: val_loss did not improve from 0.00855\n", "Epoch 439/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0016 - val_loss: 0.0141\n", "\n", "Epoch 00439: val_loss did not improve from 0.00855\n", "Epoch 440/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0018 - val_loss: 0.0167\n", "\n", "Epoch 00440: val_loss did not improve from 0.00855\n", "Epoch 441/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0022 - val_loss: 0.0135\n", "\n", "Epoch 00441: val_loss did not improve from 0.00855\n", "Epoch 442/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0017 - val_loss: 0.0148\n", "\n", "Epoch 00442: val_loss did not improve from 0.00855\n", "Epoch 443/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0025 - val_loss: 0.0144\n", "\n", "Epoch 00443: val_loss did not improve from 0.00855\n", "Epoch 444/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0017 - val_loss: 0.0140\n", "\n", "Epoch 00444: val_loss did not improve from 0.00855\n", "Epoch 445/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0128\n", "\n", "Epoch 00445: val_loss did not improve from 0.00855\n", "Epoch 446/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0099\n", "\n", "Epoch 00446: val_loss did not improve from 0.00855\n", "Epoch 447/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0018 - val_loss: 0.0136\n", "\n", "Epoch 00447: val_loss did not improve from 0.00855\n", "Epoch 448/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0014 - val_loss: 0.0139\n", "\n", "Epoch 00448: val_loss did not improve from 0.00855\n", "Epoch 449/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0017 - val_loss: 0.0165\n", "\n", "Epoch 00449: val_loss did not improve from 0.00855\n", "Epoch 450/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0136\n", "\n", "Epoch 00450: val_loss did not improve from 0.00855\n", "Epoch 451/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0020 - val_loss: 0.0124\n", "\n", "Epoch 00451: val_loss did not improve from 0.00855\n", "Epoch 452/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0154\n", "\n", "Epoch 00452: val_loss did not improve from 0.00855\n", "Epoch 453/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0125\n", "\n", "Epoch 00453: val_loss did not improve from 0.00855\n", "Epoch 454/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0013 - val_loss: 0.0141\n", "\n", "Epoch 00454: val_loss did not improve from 0.00855\n", "Epoch 455/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0134\n", "\n", "Epoch 00455: val_loss did not improve from 0.00855\n", "Epoch 456/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0165\n", "\n", "Epoch 00456: val_loss did not improve from 0.00855\n", "Epoch 457/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0141\n", "\n", "Epoch 00457: val_loss did not improve from 0.00855\n", "Epoch 458/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0016 - val_loss: 0.0088\n", "\n", "Epoch 00458: val_loss did not improve from 0.00855\n", "Epoch 459/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0027 - val_loss: 0.0139\n", "\n", "Epoch 00459: val_loss did not improve from 0.00855\n", "Epoch 460/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0024 - val_loss: 0.0122\n", "\n", "Epoch 00460: val_loss did not improve from 0.00855\n", "Epoch 461/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0018 - val_loss: 0.0135\n", "\n", "Epoch 00461: val_loss did not improve from 0.00855\n", "Epoch 462/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0018 - val_loss: 0.0127\n", "\n", "Epoch 00462: val_loss did not improve from 0.00855\n", "Epoch 463/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0020 - val_loss: 0.0107\n", "\n", "Epoch 00463: val_loss did not improve from 0.00855\n", "Epoch 464/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0018 - val_loss: 0.0118\n", "\n", "Epoch 00464: val_loss did not improve from 0.00855\n", "Epoch 465/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0144\n", "\n", "Epoch 00465: val_loss did not improve from 0.00855\n", "Epoch 466/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0020 - val_loss: 0.0162\n", "\n", "Epoch 00466: val_loss did not improve from 0.00855\n", "Epoch 467/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0020 - val_loss: 0.0120\n", "\n", "Epoch 00467: val_loss did not improve from 0.00855\n", "Epoch 468/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0019 - val_loss: 0.0124\n", "\n", "Epoch 00468: val_loss did not improve from 0.00855\n", "Epoch 469/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0104\n", "\n", "Epoch 00469: val_loss did not improve from 0.00855\n", "Epoch 470/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0111\n", "\n", "Epoch 00470: val_loss did not improve from 0.00855\n", "Epoch 471/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0104\n", "\n", "Epoch 00471: val_loss did not improve from 0.00855\n", "Epoch 472/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0016 - val_loss: 0.0134\n", "\n", "Epoch 00472: val_loss did not improve from 0.00855\n", "Epoch 473/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0098\n", "\n", "Epoch 00473: val_loss did not improve from 0.00855\n", "Epoch 474/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0118\n", "\n", "Epoch 00474: val_loss did not improve from 0.00855\n", "Epoch 475/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0116\n", "\n", "Epoch 00475: val_loss did not improve from 0.00855\n", "Epoch 476/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0026 - val_loss: 0.0157\n", "\n", "Epoch 00476: val_loss did not improve from 0.00855\n", "Epoch 477/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0131\n", "\n", "Epoch 00477: val_loss did not improve from 0.00855\n", "Epoch 478/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0136\n", "\n", "Epoch 00478: val_loss did not improve from 0.00855\n", "Epoch 479/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0185\n", "\n", "Epoch 00479: val_loss did not improve from 0.00855\n", "Epoch 480/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0126\n", "\n", "Epoch 00480: val_loss did not improve from 0.00855\n", "Epoch 481/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0015 - val_loss: 0.0118\n", "\n", "Epoch 00481: val_loss did not improve from 0.00855\n", "Epoch 482/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0104\n", "\n", "Epoch 00482: val_loss did not improve from 0.00855\n", "Epoch 483/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0154\n", "\n", "Epoch 00483: val_loss did not improve from 0.00855\n", "Epoch 484/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0139\n", "\n", "Epoch 00484: val_loss did not improve from 0.00855\n", "Epoch 485/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0106\n", "\n", "Epoch 00485: val_loss did not improve from 0.00855\n", "Epoch 486/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0136\n", "\n", "Epoch 00486: val_loss did not improve from 0.00855\n", "Epoch 487/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0099\n", "\n", "Epoch 00487: val_loss did not improve from 0.00855\n", "Epoch 488/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0139\n", "\n", "Epoch 00488: val_loss did not improve from 0.00855\n", "Epoch 489/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0129\n", "\n", "Epoch 00489: val_loss did not improve from 0.00855\n", "Epoch 490/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0109\n", "\n", "Epoch 00490: val_loss did not improve from 0.00855\n", "Epoch 491/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0104\n", "\n", "Epoch 00491: val_loss did not improve from 0.00855\n", "Epoch 492/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0015 - val_loss: 0.0121\n", "\n", "Epoch 00492: val_loss did not improve from 0.00855\n", "Epoch 493/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0019 - val_loss: 0.0131\n", "\n", "Epoch 00493: val_loss did not improve from 0.00855\n", "Epoch 494/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0126\n", "\n", "Epoch 00494: val_loss did not improve from 0.00855\n", "Epoch 495/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0076\n", "\n", "Epoch 00495: val_loss improved from 0.00855 to 0.00762, saving model to ./models/best_model_LSTM.h5\n", "Epoch 496/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0028 - val_loss: 0.0112\n", "\n", "Epoch 00496: val_loss did not improve from 0.00762\n", "Epoch 497/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0118\n", "\n", "Epoch 00497: val_loss did not improve from 0.00762\n", "Epoch 498/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0110\n", "\n", "Epoch 00498: val_loss did not improve from 0.00762\n", "Epoch 499/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0019 - val_loss: 0.0116\n", "\n", "Epoch 00499: val_loss did not improve from 0.00762\n", "Epoch 500/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0097\n", "\n", "Epoch 00500: val_loss did not improve from 0.00762\n", "Epoch 501/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0077\n", "\n", "Epoch 00501: val_loss did not improve from 0.00762\n", "Epoch 502/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0025 - val_loss: 0.0110\n", "\n", "Epoch 00502: val_loss did not improve from 0.00762\n", "Epoch 503/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0024 - val_loss: 0.0114\n", "\n", "Epoch 00503: val_loss did not improve from 0.00762\n", "Epoch 504/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0022 - val_loss: 0.0102\n", "\n", "Epoch 00504: val_loss did not improve from 0.00762\n", "Epoch 505/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0117\n", "\n", "Epoch 00505: val_loss did not improve from 0.00762\n", "Epoch 506/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0092\n", "\n", "Epoch 00506: val_loss did not improve from 0.00762\n", "Epoch 507/1000\n", "92/92 [==============================] - 0s 5ms/step - loss: 0.0022 - val_loss: 0.0095\n", "\n", "Epoch 00507: val_loss did not improve from 0.00762\n", "Epoch 508/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0100\n", "\n", "Epoch 00508: val_loss did not improve from 0.00762\n", "Epoch 509/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0023 - val_loss: 0.0109\n", "\n", "Epoch 00509: val_loss did not improve from 0.00762\n", "Epoch 510/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0017 - val_loss: 0.0099\n", "\n", "Epoch 00510: val_loss did not improve from 0.00762\n", "Epoch 511/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0016 - val_loss: 0.0083\n", "\n", "Epoch 00511: val_loss did not improve from 0.00762\n", "Epoch 512/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0018 - val_loss: 0.0126\n", "\n", "Epoch 00512: val_loss did not improve from 0.00762\n", "Epoch 513/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0095\n", "\n", "Epoch 00513: val_loss did not improve from 0.00762\n", "Epoch 514/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0024 - val_loss: 0.0114\n", "\n", "Epoch 00514: val_loss did not improve from 0.00762\n", "Epoch 515/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0020 - val_loss: 0.0112\n", "\n", "Epoch 00515: val_loss did not improve from 0.00762\n", "Epoch 516/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0019 - val_loss: 0.0111\n", "\n", "Epoch 00516: val_loss did not improve from 0.00762\n", "Epoch 517/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0022 - val_loss: 0.0083\n", "\n", "Epoch 00517: val_loss did not improve from 0.00762\n", "Epoch 518/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0122\n", "\n", "Epoch 00518: val_loss did not improve from 0.00762\n", "Epoch 519/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0109\n", "\n", "Epoch 00519: val_loss did not improve from 0.00762\n", "Epoch 520/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0016 - val_loss: 0.0124\n", "\n", "Epoch 00520: val_loss did not improve from 0.00762\n", "Epoch 521/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0095\n", "\n", "Epoch 00521: val_loss did not improve from 0.00762\n", "Epoch 522/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0133\n", "\n", "Epoch 00522: val_loss did not improve from 0.00762\n", "Epoch 523/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0020 - val_loss: 0.0166\n", "\n", "Epoch 00523: val_loss did not improve from 0.00762\n", "Epoch 524/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0018 - val_loss: 0.0129\n", "\n", "Epoch 00524: val_loss did not improve from 0.00762\n", "Epoch 525/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0023 - val_loss: 0.0129\n", "\n", "Epoch 00525: val_loss did not improve from 0.00762\n", "Epoch 526/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0018 - val_loss: 0.0092\n", "\n", "Epoch 00526: val_loss did not improve from 0.00762\n", "Epoch 527/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0023 - val_loss: 0.0091\n", "\n", "Epoch 00527: val_loss did not improve from 0.00762\n", "Epoch 528/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0017 - val_loss: 0.0087\n", "\n", "Epoch 00528: val_loss did not improve from 0.00762\n", "Epoch 529/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0018 - val_loss: 0.0080\n", "\n", "Epoch 00529: val_loss did not improve from 0.00762\n", "Epoch 530/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0023 - val_loss: 0.0140\n", "\n", "Epoch 00530: val_loss did not improve from 0.00762\n", "Epoch 531/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0013 - val_loss: 0.0109\n", "\n", "Epoch 00531: val_loss did not improve from 0.00762\n", "Epoch 532/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0017 - val_loss: 0.0094\n", "\n", "Epoch 00532: val_loss did not improve from 0.00762\n", "Epoch 533/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0019 - val_loss: 0.0104\n", "\n", "Epoch 00533: val_loss did not improve from 0.00762\n", "Epoch 534/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0015 - val_loss: 0.0092\n", "\n", "Epoch 00534: val_loss did not improve from 0.00762\n", "Epoch 535/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0014 - val_loss: 0.0100\n", "\n", "Epoch 00535: val_loss did not improve from 0.00762\n", "Epoch 536/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0024 - val_loss: 0.0087\n", "\n", "Epoch 00536: val_loss did not improve from 0.00762\n", "Epoch 537/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0020 - val_loss: 0.0093\n", "\n", "Epoch 00537: val_loss did not improve from 0.00762\n", "Epoch 538/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0016 - val_loss: 0.0073\n", "\n", "Epoch 00538: val_loss improved from 0.00762 to 0.00731, saving model to ./models/best_model_LSTM.h5\n", "Epoch 539/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0023 - val_loss: 0.0111\n", "\n", "Epoch 00539: val_loss did not improve from 0.00731\n", "Epoch 540/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0026 - val_loss: 0.0104\n", "\n", "Epoch 00540: val_loss did not improve from 0.00731\n", "Epoch 541/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0020 - val_loss: 0.0116\n", "\n", "Epoch 00541: val_loss did not improve from 0.00731\n", "Epoch 542/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0018 - val_loss: 0.0124\n", "\n", "Epoch 00542: val_loss did not improve from 0.00731\n", "Epoch 543/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0020 - val_loss: 0.0149\n", "\n", "Epoch 00543: val_loss did not improve from 0.00731\n", "Epoch 544/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0130\n", "\n", "Epoch 00544: val_loss did not improve from 0.00731\n", "Epoch 545/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0019 - val_loss: 0.0120\n", "\n", "Epoch 00545: val_loss did not improve from 0.00731\n", "Epoch 546/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0018 - val_loss: 0.0124\n", "\n", "Epoch 00546: val_loss did not improve from 0.00731\n", "Epoch 547/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0107\n", "\n", "Epoch 00547: val_loss did not improve from 0.00731\n", "Epoch 548/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0112\n", "\n", "Epoch 00548: val_loss did not improve from 0.00731\n", "Epoch 549/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0102\n", "\n", "Epoch 00549: val_loss did not improve from 0.00731\n", "Epoch 550/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0018 - val_loss: 0.0123\n", "\n", "Epoch 00550: val_loss did not improve from 0.00731\n", "Epoch 551/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0022 - val_loss: 0.0101\n", "\n", "Epoch 00551: val_loss did not improve from 0.00731\n", "Epoch 552/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0104\n", "\n", "Epoch 00552: val_loss did not improve from 0.00731\n", "Epoch 553/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0021 - val_loss: 0.0092\n", "\n", "Epoch 00553: val_loss did not improve from 0.00731\n", "Epoch 554/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0020 - val_loss: 0.0127\n", "\n", "Epoch 00554: val_loss did not improve from 0.00731\n", "Epoch 555/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0075\n", "\n", "Epoch 00555: val_loss did not improve from 0.00731\n", "Epoch 556/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0024 - val_loss: 0.0088\n", "\n", "Epoch 00556: val_loss did not improve from 0.00731\n", "Epoch 557/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0094\n", "\n", "Epoch 00557: val_loss did not improve from 0.00731\n", "Epoch 558/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0021 - val_loss: 0.0110\n", "\n", "Epoch 00558: val_loss did not improve from 0.00731\n", "Epoch 559/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0084\n", "\n", "Epoch 00559: val_loss did not improve from 0.00731\n", "Epoch 560/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0019 - val_loss: 0.0107\n", "\n", "Epoch 00560: val_loss did not improve from 0.00731\n", "Epoch 561/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0017 - val_loss: 0.0095\n", "\n", "Epoch 00561: val_loss did not improve from 0.00731\n", "Epoch 562/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0017 - val_loss: 0.0097\n", "\n", "Epoch 00562: val_loss did not improve from 0.00731\n", "Epoch 563/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0022 - val_loss: 0.0115\n", "\n", "Epoch 00563: val_loss did not improve from 0.00731\n", "Epoch 564/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0022 - val_loss: 0.0126\n", "\n", "Epoch 00564: val_loss did not improve from 0.00731\n", "Epoch 565/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0021 - val_loss: 0.0115\n", "\n", "Epoch 00565: val_loss did not improve from 0.00731\n", "Epoch 566/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0111\n", "\n", "Epoch 00566: val_loss did not improve from 0.00731\n", "Epoch 567/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0020 - val_loss: 0.0133\n", "\n", "Epoch 00567: val_loss did not improve from 0.00731\n", "Epoch 568/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0019 - val_loss: 0.0084\n", "\n", "Epoch 00568: val_loss did not improve from 0.00731\n", "Epoch 569/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0012 - val_loss: 0.0083\n", "\n", "Epoch 00569: val_loss did not improve from 0.00731\n", "Epoch 570/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0098\n", "\n", "Epoch 00570: val_loss did not improve from 0.00731\n", "Epoch 571/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0019 - val_loss: 0.0081\n", "\n", "Epoch 00571: val_loss did not improve from 0.00731\n", "Epoch 572/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0015 - val_loss: 0.0104\n", "\n", "Epoch 00572: val_loss did not improve from 0.00731\n", "Epoch 573/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0024 - val_loss: 0.0129\n", "\n", "Epoch 00573: val_loss did not improve from 0.00731\n", "Epoch 574/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0021 - val_loss: 0.0092\n", "\n", "Epoch 00574: val_loss did not improve from 0.00731\n", "Epoch 575/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0023 - val_loss: 0.0119\n", "\n", "Epoch 00575: val_loss did not improve from 0.00731\n", "Epoch 576/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0018 - val_loss: 0.0137\n", "\n", "Epoch 00576: val_loss did not improve from 0.00731\n", "Epoch 577/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0017 - val_loss: 0.0089\n", "\n", "Epoch 00577: val_loss did not improve from 0.00731\n", "Epoch 578/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0021 - val_loss: 0.0080\n", "\n", "Epoch 00578: val_loss did not improve from 0.00731\n", "Epoch 579/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0024 - val_loss: 0.0149\n", "\n", "Epoch 00579: val_loss did not improve from 0.00731\n", "Epoch 580/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0022 - val_loss: 0.0117\n", "\n", "Epoch 00580: val_loss did not improve from 0.00731\n", "Epoch 581/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0029 - val_loss: 0.0116\n", "\n", "Epoch 00581: val_loss did not improve from 0.00731\n", "Epoch 582/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0022 - val_loss: 0.0155\n", "\n", "Epoch 00582: val_loss did not improve from 0.00731\n", "Epoch 583/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0018 - val_loss: 0.0121\n", "\n", "Epoch 00583: val_loss did not improve from 0.00731\n", "Epoch 584/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0017 - val_loss: 0.0122\n", "\n", "Epoch 00584: val_loss did not improve from 0.00731\n", "Epoch 585/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0111\n", "\n", "Epoch 00585: val_loss did not improve from 0.00731\n", "Epoch 586/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0118\n", "\n", "Epoch 00586: val_loss did not improve from 0.00731\n", "Epoch 587/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0017 - val_loss: 0.0124\n", "\n", "Epoch 00587: val_loss did not improve from 0.00731\n", "Epoch 588/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0014 - val_loss: 0.0107\n", "\n", "Epoch 00588: val_loss did not improve from 0.00731\n", "Epoch 589/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0016 - val_loss: 0.0099\n", "\n", "Epoch 00589: val_loss did not improve from 0.00731\n", "Epoch 590/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0018 - val_loss: 0.0135\n", "\n", "Epoch 00590: val_loss did not improve from 0.00731\n", "Epoch 591/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0012 - val_loss: 0.0117\n", "\n", "Epoch 00591: val_loss did not improve from 0.00731\n", "Epoch 592/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0026 - val_loss: 0.0103\n", "\n", "Epoch 00592: val_loss did not improve from 0.00731\n", "Epoch 593/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0020 - val_loss: 0.0129\n", "\n", "Epoch 00593: val_loss did not improve from 0.00731\n", "Epoch 594/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0021 - val_loss: 0.0120\n", "\n", "Epoch 00594: val_loss did not improve from 0.00731\n", "Epoch 595/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0018 - val_loss: 0.0142\n", "\n", "Epoch 00595: val_loss did not improve from 0.00731\n", "Epoch 596/1000\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0020 - val_loss: 0.0096\n", "\n", "Epoch 00596: val_loss did not improve from 0.00731\n", "Epoch 597/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0023 - val_loss: 0.0090\n", "\n", "Epoch 00597: val_loss did not improve from 0.00731\n", "Epoch 598/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0021 - val_loss: 0.0119\n", "\n", "Epoch 00598: val_loss did not improve from 0.00731\n", "Epoch 599/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0016 - val_loss: 0.0127\n", "\n", "Epoch 00599: val_loss did not improve from 0.00731\n", "Epoch 600/1000\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0019 - val_loss: 0.0094\n", "\n", "Epoch 00600: val_loss did not improve from 0.00731\n", "Epoch 601/1000\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0016 - val_loss: 0.0107\n", "\n", "Epoch 00601: val_loss did not improve from 0.00731\n", "Epoch 602/1000\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0018 - val_loss: 0.0101\n", "\n", "Epoch 00602: val_loss did not improve from 0.00731\n", "Epoch 603/1000\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0019 - val_loss: 0.0122\n", "\n", "Epoch 00603: val_loss did not improve from 0.00731\n", "Epoch 604/1000\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0016 - val_loss: 0.0079\n", "\n", "Epoch 00604: val_loss did not improve from 0.00731\n", "Epoch 605/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0023 - val_loss: 0.0106\n", "\n", "Epoch 00605: val_loss did not improve from 0.00731\n", "Epoch 606/1000\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0019 - val_loss: 0.0094\n", "\n", "Epoch 00606: val_loss did not improve from 0.00731\n", "Epoch 607/1000\n", "92/92 [==============================] - 1s 12ms/step - loss: 0.0021 - val_loss: 0.0082\n", "\n", "Epoch 00607: val_loss did not improve from 0.00731\n", "Epoch 608/1000\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0023 - val_loss: 0.0095\n", "\n", "Epoch 00608: val_loss did not improve from 0.00731\n", "Epoch 609/1000\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0020 - val_loss: 0.0111\n", "\n", "Epoch 00609: val_loss did not improve from 0.00731\n", "Epoch 610/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0023 - val_loss: 0.0126\n", "\n", "Epoch 00610: val_loss did not improve from 0.00731\n", "Epoch 611/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0024 - val_loss: 0.0088\n", "\n", "Epoch 00611: val_loss did not improve from 0.00731\n", "Epoch 612/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0019 - val_loss: 0.0121\n", "\n", "Epoch 00612: val_loss did not improve from 0.00731\n", "Epoch 613/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0019 - val_loss: 0.0121\n", "\n", "Epoch 00613: val_loss did not improve from 0.00731\n", "Epoch 614/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0027 - val_loss: 0.0117\n", "\n", "Epoch 00614: val_loss did not improve from 0.00731\n", "Epoch 615/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0110\n", "\n", "Epoch 00615: val_loss did not improve from 0.00731\n", "Epoch 616/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0020 - val_loss: 0.0116\n", "\n", "Epoch 00616: val_loss did not improve from 0.00731\n", "Epoch 617/1000\n", "92/92 [==============================] - 1s 11ms/step - loss: 0.0020 - val_loss: 0.0136\n", "\n", "Epoch 00617: val_loss did not improve from 0.00731\n", "Epoch 618/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0022 - val_loss: 0.0107\n", "\n", "Epoch 00618: val_loss did not improve from 0.00731\n", "Epoch 619/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0016 - val_loss: 0.0122\n", "\n", "Epoch 00619: val_loss did not improve from 0.00731\n", "Epoch 620/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0016 - val_loss: 0.0108\n", "\n", "Epoch 00620: val_loss did not improve from 0.00731\n", "Epoch 621/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0025 - val_loss: 0.0103\n", "\n", "Epoch 00621: val_loss did not improve from 0.00731\n", "Epoch 622/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0020 - val_loss: 0.0135\n", "\n", "Epoch 00622: val_loss did not improve from 0.00731\n", "Epoch 623/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0017 - val_loss: 0.0124\n", "\n", "Epoch 00623: val_loss did not improve from 0.00731\n", "Epoch 624/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0022 - val_loss: 0.0142\n", "\n", "Epoch 00624: val_loss did not improve from 0.00731\n", "Epoch 625/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0022 - val_loss: 0.0133\n", "\n", "Epoch 00625: val_loss did not improve from 0.00731\n", "Epoch 626/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0017 - val_loss: 0.0104\n", "\n", "Epoch 00626: val_loss did not improve from 0.00731\n", "Epoch 627/1000\n", "92/92 [==============================] - 1s 9ms/step - loss: 0.0013 - val_loss: 0.0112\n", "\n", "Epoch 00627: val_loss did not improve from 0.00731\n", "Epoch 628/1000\n", "92/92 [==============================] - 1s 10ms/step - loss: 0.0020 - val_loss: 0.0129\n", "\n", "Epoch 00628: val_loss did not improve from 0.00731\n", "Epoch 629/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0027 - val_loss: 0.0109\n", "\n", "Epoch 00629: val_loss did not improve from 0.00731\n", "Epoch 630/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0014 - val_loss: 0.0119\n", "\n", "Epoch 00630: val_loss did not improve from 0.00731\n", "Epoch 631/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0020 - val_loss: 0.0103\n", "\n", "Epoch 00631: val_loss did not improve from 0.00731\n", "Epoch 632/1000\n", "92/92 [==============================] - 1s 6ms/step - loss: 0.0021 - val_loss: 0.0095\n", "\n", "Epoch 00632: val_loss did not improve from 0.00731\n", "Epoch 633/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0023 - val_loss: 0.0122\n", "\n", "Epoch 00633: val_loss did not improve from 0.00731\n", "Epoch 634/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0022 - val_loss: 0.0115\n", "\n", "Epoch 00634: val_loss did not improve from 0.00731\n", "Epoch 635/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0021 - val_loss: 0.0090\n", "\n", "Epoch 00635: val_loss did not improve from 0.00731\n", "Epoch 636/1000\n", "92/92 [==============================] - 1s 8ms/step - loss: 0.0020 - val_loss: 0.0091\n", "\n", "Epoch 00636: val_loss did not improve from 0.00731\n", "Epoch 637/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0022 - val_loss: 0.0086\n", "\n", "Epoch 00637: val_loss did not improve from 0.00731\n", "Epoch 638/1000\n", "92/92 [==============================] - 1s 7ms/step - loss: 0.0014 - val_loss: 0.0106\n", "\n", "Epoch 00638: val_loss did not improve from 0.00731\n", "Epoch 00638: early stopping\n", "keys: dict_keys(['loss', 'val_loss'])\n", "--- Elapsed time: 404.7491202354431 seconds ---\n" ] } ], "source": [ "# Using Early stopping \n", "# reshape into X=t and Y=t+1\n", "look_back = 3\n", "trainX, trainY = create_dataset(train, look_back)\n", "testX, testY = create_dataset(test, look_back)\n", "\n", "# reshape input to be [samples, time steps, features]\n", "trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n", "testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))\n", "batch_size=1\n", "print('trainX.shape: ',trainX.shape)\n", "print('trainY.shape: ',trainY.shape)\n", "print('trainX[:5]: ', trainX[:5].flatten())\n", "print('trainY[:5]: ', trainY[:5])\n", "\n", "es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=100)\n", "mc = ModelCheckpoint('./models/best_model_LSTM.h5', monitor='val_loss', mode='min', verbose=1, save_best_only=True)\n", "\n", "if 'model' in globals():\n", " print('Deleting \"model\"')\n", " del model\n", "model = Sequential()\n", "model.add(LSTM(4, batch_input_shape=(batch_size,1,look_back), stateful=True, return_sequences=True))\n", "model.add(LSTM(4, batch_input_shape=(batch_size, 1,look_back), stateful=True))\n", "model.add(Dense(1))\n", "\n", "start_time = time.time()\n", "# Compile the model\n", "model.compile(loss='mean_squared_error', optimizer='adam')\n", "\n", "# Fit the model\n", "history = model.fit(trainX, trainY, epochs=1000, batch_size=1, verbose=1, validation_data=(testX, testY),callbacks=[es, mc])\n", "# list all data in history\n", "print('keys: ',history.history.keys())\n", "print(\"--- Elapsed time: %s seconds ---\" % (time.time() - start_time))\n", "\n", "# load the saved model\n", "model = load_model('./models/best_model_LSTM.h5')" ] }, { "cell_type": "code", "execution_count": 15, "id": "d28354ed", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_hist(history)" ] }, { "cell_type": "code", "execution_count": 16, "id": "99333cba", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train Score: 23.50 RMSE\n", "Train R^2: 0.8886510211012983\n", "Test Score: 44.57 RMSE\n", "Test R^2: 0.6666832178313974\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# make predictions\n", "trainPredict = model.predict(trainX, batch_size=batch_size) #Now we need to specify the batch_size \n", "model.reset_states()\n", "testPredict = model.predict(testX, batch_size=batch_size)\n", "# invert predictions\n", "trainPredict = scaler.inverse_transform(trainPredict)\n", "trainY = scaler.inverse_transform([trainY])\n", "testPredict = scaler.inverse_transform(testPredict)\n", "testY = scaler.inverse_transform([testY])\n", "# calculate root mean squared error\n", "trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))\n", "print('Train Score: %.2f RMSE' % (trainScore))\n", "print('Train R^2: ', r2_score(trainY[0], trainPredict[:,0]))\n", "testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))\n", "print('Test Score: %.2f RMSE' % (testScore))\n", "print('Test R^2: ', r2_score(testY[0], testPredict[:,0]))\n", "\n", "# shift train predictions for plotting\n", "trainPredictPlot = numpy.empty_like(dataset)\n", "trainPredictPlot[:, :] = numpy.nan\n", "trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict\n", "# shift test predictions for plotting\n", "testPredictPlot = numpy.empty_like(dataset)\n", "testPredictPlot[:, :] = numpy.nan\n", "testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict\n", "# plot baseline and predictions\n", "plt.plot(scaler.inverse_transform(dataset))\n", "plt.plot(trainPredictPlot)\n", "plt.plot(testPredictPlot)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 17, "id": "40d36840", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "trainX.shape: (92, 1, 3)\n", "trainY.shape: (92,)\n", "trainX[:5]: [0.01544401 0.02702703 0.05405405 0.02702703 0.05405405 0.04826255\n", " 0.05405405 0.04826255 0.03281853 0.04826255 0.03281853 0.05984557\n", " 0.03281853 0.05984557 0.08494207]\n", "trainY[:5]: [0.04826255 0.03281853 0.05984557 0.08494207 0.08494207]\n", "Deleting \"model\"\n", "\n", "Epoch 00001: val_loss improved from inf to 0.19883, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00002: val_loss improved from 0.19883 to 0.11433, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00003: val_loss improved from 0.11433 to 0.08161, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00004: val_loss improved from 0.08161 to 0.05638, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00005: val_loss improved from 0.05638 to 0.04173, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00006: val_loss improved from 0.04173 to 0.02648, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00007: val_loss improved from 0.02648 to 0.02372, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00008: val_loss improved from 0.02372 to 0.02294, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00009: val_loss improved from 0.02294 to 0.01916, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00010: val_loss improved from 0.01916 to 0.01546, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00011: val_loss did not improve from 0.01546\n", "\n", "Epoch 00012: val_loss improved from 0.01546 to 0.01503, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00013: val_loss improved from 0.01503 to 0.01459, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00014: val_loss did not improve from 0.01459\n", "\n", "Epoch 00015: val_loss improved from 0.01459 to 0.01418, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00016: val_loss did not improve from 0.01418\n", "\n", "Epoch 00017: val_loss did not improve from 0.01418\n", "\n", "Epoch 00018: val_loss did not improve from 0.01418\n", "\n", "Epoch 00019: val_loss improved from 0.01418 to 0.01406, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00020: val_loss did not improve from 0.01406\n", "\n", "Epoch 00021: val_loss improved from 0.01406 to 0.01393, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00022: val_loss did not improve from 0.01393\n", "\n", "Epoch 00023: val_loss improved from 0.01393 to 0.01221, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00024: val_loss did not improve from 0.01221\n", "\n", "Epoch 00025: val_loss did not improve from 0.01221\n", "\n", "Epoch 00026: val_loss did not improve from 0.01221\n", "\n", "Epoch 00027: val_loss did not improve from 0.01221\n", "\n", "Epoch 00028: val_loss did not improve from 0.01221\n", "\n", "Epoch 00029: val_loss improved from 0.01221 to 0.01217, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00030: val_loss did not improve from 0.01217\n", "\n", "Epoch 00031: val_loss did not improve from 0.01217\n", "\n", "Epoch 00032: val_loss improved from 0.01217 to 0.01198, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00033: val_loss did not improve from 0.01198\n", "\n", "Epoch 00034: val_loss did not improve from 0.01198\n", "\n", "Epoch 00035: val_loss improved from 0.01198 to 0.01101, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00036: val_loss did not improve from 0.01101\n", "\n", "Epoch 00037: val_loss did not improve from 0.01101\n", "\n", "Epoch 00038: val_loss did not improve from 0.01101\n", "\n", "Epoch 00039: val_loss did not improve from 0.01101\n", "\n", "Epoch 00040: val_loss did not improve from 0.01101\n", "\n", "Epoch 00041: val_loss did not improve from 0.01101\n", "\n", "Epoch 00042: val_loss did not improve from 0.01101\n", "\n", "Epoch 00043: val_loss did not improve from 0.01101\n", "\n", "Epoch 00044: val_loss did not improve from 0.01101\n", "\n", "Epoch 00045: val_loss did not improve from 0.01101\n", "\n", "Epoch 00046: val_loss did not improve from 0.01101\n", "\n", "Epoch 00047: val_loss did not improve from 0.01101\n", "\n", "Epoch 00048: val_loss did not improve from 0.01101\n", "\n", "Epoch 00049: val_loss did not improve from 0.01101\n", "\n", "Epoch 00050: val_loss improved from 0.01101 to 0.01080, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00051: val_loss improved from 0.01080 to 0.01008, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00052: val_loss did not improve from 0.01008\n", "\n", "Epoch 00053: val_loss improved from 0.01008 to 0.01007, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00054: val_loss did not improve from 0.01007\n", "\n", "Epoch 00055: val_loss did not improve from 0.01007\n", "\n", "Epoch 00056: val_loss improved from 0.01007 to 0.00950, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00057: val_loss did not improve from 0.00950\n", "\n", "Epoch 00058: val_loss did not improve from 0.00950\n", "\n", "Epoch 00059: val_loss did not improve from 0.00950\n", "\n", "Epoch 00060: val_loss did not improve from 0.00950\n", "\n", "Epoch 00061: val_loss improved from 0.00950 to 0.00924, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00062: val_loss did not improve from 0.00924\n", "\n", "Epoch 00063: val_loss did not improve from 0.00924\n", "\n", "Epoch 00064: val_loss did not improve from 0.00924\n", "\n", "Epoch 00065: val_loss did not improve from 0.00924\n", "\n", "Epoch 00066: val_loss did not improve from 0.00924\n", "\n", "Epoch 00067: val_loss did not improve from 0.00924\n", "\n", "Epoch 00068: val_loss improved from 0.00924 to 0.00831, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00069: val_loss did not improve from 0.00831\n", "\n", "Epoch 00070: val_loss did not improve from 0.00831\n", "\n", "Epoch 00071: val_loss did not improve from 0.00831\n", "\n", "Epoch 00072: val_loss did not improve from 0.00831\n", "\n", "Epoch 00073: val_loss did not improve from 0.00831\n", "\n", "Epoch 00074: val_loss improved from 0.00831 to 0.00804, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00075: val_loss did not improve from 0.00804\n", "\n", "Epoch 00076: val_loss did not improve from 0.00804\n", "\n", "Epoch 00077: val_loss did not improve from 0.00804\n", "\n", "Epoch 00078: val_loss did not improve from 0.00804\n", "\n", "Epoch 00079: val_loss did not improve from 0.00804\n", "\n", "Epoch 00080: val_loss did not improve from 0.00804\n", "\n", "Epoch 00081: val_loss did not improve from 0.00804\n", "\n", "Epoch 00082: val_loss did not improve from 0.00804\n", "\n", "Epoch 00083: val_loss did not improve from 0.00804\n", "\n", "Epoch 00084: val_loss did not improve from 0.00804\n", "\n", "Epoch 00085: val_loss did not improve from 0.00804\n", "\n", "Epoch 00086: val_loss did not improve from 0.00804\n", "\n", "Epoch 00087: val_loss did not improve from 0.00804\n", "\n", "Epoch 00088: val_loss did not improve from 0.00804\n", "\n", "Epoch 00089: val_loss did not improve from 0.00804\n", "\n", "Epoch 00090: val_loss did not improve from 0.00804\n", "\n", "Epoch 00091: val_loss did not improve from 0.00804\n", "\n", "Epoch 00092: val_loss did not improve from 0.00804\n", "\n", "Epoch 00093: val_loss did not improve from 0.00804\n", "\n", "Epoch 00094: val_loss did not improve from 0.00804\n", "\n", "Epoch 00095: val_loss did not improve from 0.00804\n", "\n", "Epoch 00096: val_loss did not improve from 0.00804\n", "\n", "Epoch 00097: val_loss did not improve from 0.00804\n", "\n", "Epoch 00098: val_loss did not improve from 0.00804\n", "\n", "Epoch 00099: val_loss did not improve from 0.00804\n", "\n", "Epoch 00100: val_loss did not improve from 0.00804\n", "\n", "Epoch 00101: val_loss did not improve from 0.00804\n", "\n", "Epoch 00102: val_loss did not improve from 0.00804\n", "\n", "Epoch 00103: val_loss did not improve from 0.00804\n", "\n", "Epoch 00104: val_loss did not improve from 0.00804\n", "\n", "Epoch 00105: val_loss did not improve from 0.00804\n", "\n", "Epoch 00106: val_loss did not improve from 0.00804\n", "\n", "Epoch 00107: val_loss did not improve from 0.00804\n", "\n", "Epoch 00108: val_loss did not improve from 0.00804\n", "\n", "Epoch 00109: val_loss did not improve from 0.00804\n", "\n", "Epoch 00110: val_loss did not improve from 0.00804\n", "\n", "Epoch 00111: val_loss did not improve from 0.00804\n", "\n", "Epoch 00112: val_loss did not improve from 0.00804\n", "\n", "Epoch 00113: val_loss did not improve from 0.00804\n", "\n", "Epoch 00114: val_loss did not improve from 0.00804\n", "\n", "Epoch 00115: val_loss did not improve from 0.00804\n", "\n", "Epoch 00116: val_loss did not improve from 0.00804\n", "\n", "Epoch 00117: val_loss did not improve from 0.00804\n", "\n", "Epoch 00118: val_loss did not improve from 0.00804\n", "\n", "Epoch 00119: val_loss did not improve from 0.00804\n", "\n", "Epoch 00120: val_loss did not improve from 0.00804\n", "\n", "Epoch 00121: val_loss did not improve from 0.00804\n", "\n", "Epoch 00122: val_loss did not improve from 0.00804\n", "\n", "Epoch 00123: val_loss did not improve from 0.00804\n", "\n", "Epoch 00124: val_loss did not improve from 0.00804\n", "\n", "Epoch 00125: val_loss did not improve from 0.00804\n", "\n", "Epoch 00126: val_loss did not improve from 0.00804\n", "\n", "Epoch 00127: val_loss did not improve from 0.00804\n", "\n", "Epoch 00128: val_loss did not improve from 0.00804\n", "\n", "Epoch 00129: val_loss did not improve from 0.00804\n", "\n", "Epoch 00130: val_loss did not improve from 0.00804\n", "\n", "Epoch 00131: val_loss did not improve from 0.00804\n", "\n", "Epoch 00132: val_loss did not improve from 0.00804\n", "\n", "Epoch 00133: val_loss did not improve from 0.00804\n", "\n", "Epoch 00134: val_loss did not improve from 0.00804\n", "\n", "Epoch 00135: val_loss did not improve from 0.00804\n", "\n", "Epoch 00136: val_loss did not improve from 0.00804\n", "\n", "Epoch 00137: val_loss did not improve from 0.00804\n", "\n", "Epoch 00138: val_loss did not improve from 0.00804\n", "\n", "Epoch 00139: val_loss did not improve from 0.00804\n", "\n", "Epoch 00140: val_loss did not improve from 0.00804\n", "\n", "Epoch 00141: val_loss did not improve from 0.00804\n", "\n", "Epoch 00142: val_loss did not improve from 0.00804\n", "\n", "Epoch 00143: val_loss did not improve from 0.00804\n", "\n", "Epoch 00144: val_loss did not improve from 0.00804\n", "\n", "Epoch 00145: val_loss did not improve from 0.00804\n", "\n", "Epoch 00146: val_loss improved from 0.00804 to 0.00769, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00147: val_loss did not improve from 0.00769\n", "\n", "Epoch 00148: val_loss did not improve from 0.00769\n", "\n", "Epoch 00149: val_loss did not improve from 0.00769\n", "\n", "Epoch 00150: val_loss did not improve from 0.00769\n", "\n", "Epoch 00151: val_loss did not improve from 0.00769\n", "\n", "Epoch 00152: val_loss did not improve from 0.00769\n", "\n", "Epoch 00153: val_loss did not improve from 0.00769\n", "\n", "Epoch 00154: val_loss did not improve from 0.00769\n", "\n", "Epoch 00155: val_loss did not improve from 0.00769\n", "\n", "Epoch 00156: val_loss did not improve from 0.00769\n", "\n", "Epoch 00157: val_loss did not improve from 0.00769\n", "\n", "Epoch 00158: val_loss did not improve from 0.00769\n", "\n", "Epoch 00159: val_loss did not improve from 0.00769\n", "\n", "Epoch 00160: val_loss did not improve from 0.00769\n", "\n", "Epoch 00161: val_loss did not improve from 0.00769\n", "\n", "Epoch 00162: val_loss did not improve from 0.00769\n", "\n", "Epoch 00163: val_loss did not improve from 0.00769\n", "\n", "Epoch 00164: val_loss did not improve from 0.00769\n", "\n", "Epoch 00165: val_loss did not improve from 0.00769\n", "\n", "Epoch 00166: val_loss did not improve from 0.00769\n", "\n", "Epoch 00167: val_loss did not improve from 0.00769\n", "\n", "Epoch 00168: val_loss did not improve from 0.00769\n", "\n", "Epoch 00169: val_loss did not improve from 0.00769\n", "\n", "Epoch 00170: val_loss did not improve from 0.00769\n", "\n", "Epoch 00171: val_loss did not improve from 0.00769\n", "\n", "Epoch 00172: val_loss did not improve from 0.00769\n", "\n", "Epoch 00173: val_loss did not improve from 0.00769\n", "\n", "Epoch 00174: val_loss did not improve from 0.00769\n", "\n", "Epoch 00175: val_loss did not improve from 0.00769\n", "\n", "Epoch 00176: val_loss did not improve from 0.00769\n", "\n", "Epoch 00177: val_loss did not improve from 0.00769\n", "\n", "Epoch 00178: val_loss did not improve from 0.00769\n", "\n", "Epoch 00179: val_loss did not improve from 0.00769\n", "\n", "Epoch 00180: val_loss did not improve from 0.00769\n", "\n", "Epoch 00181: val_loss did not improve from 0.00769\n", "\n", "Epoch 00182: val_loss did not improve from 0.00769\n", "\n", "Epoch 00183: val_loss did not improve from 0.00769\n", "\n", "Epoch 00184: val_loss did not improve from 0.00769\n", "\n", "Epoch 00185: val_loss did not improve from 0.00769\n", "\n", "Epoch 00186: val_loss did not improve from 0.00769\n", "\n", "Epoch 00187: val_loss did not improve from 0.00769\n", "\n", "Epoch 00188: val_loss did not improve from 0.00769\n", "\n", "Epoch 00189: val_loss did not improve from 0.00769\n", "\n", "Epoch 00190: val_loss did not improve from 0.00769\n", "\n", "Epoch 00191: val_loss did not improve from 0.00769\n", "\n", "Epoch 00192: val_loss did not improve from 0.00769\n", "\n", "Epoch 00193: val_loss did not improve from 0.00769\n", "\n", "Epoch 00194: val_loss did not improve from 0.00769\n", "\n", "Epoch 00195: val_loss did not improve from 0.00769\n", "\n", "Epoch 00196: val_loss did not improve from 0.00769\n", "\n", "Epoch 00197: val_loss did not improve from 0.00769\n", "\n", "Epoch 00198: val_loss did not improve from 0.00769\n", "\n", "Epoch 00199: val_loss did not improve from 0.00769\n", "\n", "Epoch 00200: val_loss did not improve from 0.00769\n", "\n", "Epoch 00201: val_loss improved from 0.00769 to 0.00706, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00202: val_loss did not improve from 0.00706\n", "\n", "Epoch 00203: val_loss did not improve from 0.00706\n", "\n", "Epoch 00204: val_loss did not improve from 0.00706\n", "\n", "Epoch 00205: val_loss did not improve from 0.00706\n", "\n", "Epoch 00206: val_loss did not improve from 0.00706\n", "\n", "Epoch 00207: val_loss did not improve from 0.00706\n", "\n", "Epoch 00208: val_loss did not improve from 0.00706\n", "\n", "Epoch 00209: val_loss did not improve from 0.00706\n", "\n", "Epoch 00210: val_loss did not improve from 0.00706\n", "\n", "Epoch 00211: val_loss did not improve from 0.00706\n", "\n", "Epoch 00212: val_loss did not improve from 0.00706\n", "\n", "Epoch 00213: val_loss did not improve from 0.00706\n", "\n", "Epoch 00214: val_loss did not improve from 0.00706\n", "\n", "Epoch 00215: val_loss did not improve from 0.00706\n", "\n", "Epoch 00216: val_loss did not improve from 0.00706\n", "\n", "Epoch 00217: val_loss did not improve from 0.00706\n", "\n", "Epoch 00218: val_loss did not improve from 0.00706\n", "\n", "Epoch 00219: val_loss did not improve from 0.00706\n", "\n", "Epoch 00220: val_loss did not improve from 0.00706\n", "\n", "Epoch 00221: val_loss did not improve from 0.00706\n", "\n", "Epoch 00222: val_loss did not improve from 0.00706\n", "\n", "Epoch 00223: val_loss did not improve from 0.00706\n", "\n", "Epoch 00224: val_loss did not improve from 0.00706\n", "\n", "Epoch 00225: val_loss did not improve from 0.00706\n", "\n", "Epoch 00226: val_loss did not improve from 0.00706\n", "\n", "Epoch 00227: val_loss did not improve from 0.00706\n", "\n", "Epoch 00228: val_loss did not improve from 0.00706\n", "\n", "Epoch 00229: val_loss did not improve from 0.00706\n", "\n", "Epoch 00230: val_loss did not improve from 0.00706\n", "\n", "Epoch 00231: val_loss did not improve from 0.00706\n", "\n", "Epoch 00232: val_loss did not improve from 0.00706\n", "\n", "Epoch 00233: val_loss did not improve from 0.00706\n", "\n", "Epoch 00234: val_loss did not improve from 0.00706\n", "\n", "Epoch 00235: val_loss did not improve from 0.00706\n", "\n", "Epoch 00236: val_loss did not improve from 0.00706\n", "\n", "Epoch 00237: val_loss did not improve from 0.00706\n", "\n", "Epoch 00238: val_loss did not improve from 0.00706\n", "\n", "Epoch 00239: val_loss did not improve from 0.00706\n", "\n", "Epoch 00240: val_loss did not improve from 0.00706\n", "\n", "Epoch 00241: val_loss did not improve from 0.00706\n", "\n", "Epoch 00242: val_loss did not improve from 0.00706\n", "\n", "Epoch 00243: val_loss did not improve from 0.00706\n", "\n", "Epoch 00244: val_loss did not improve from 0.00706\n", "\n", "Epoch 00245: val_loss did not improve from 0.00706\n", "\n", "Epoch 00246: val_loss did not improve from 0.00706\n", "\n", "Epoch 00247: val_loss did not improve from 0.00706\n", "\n", "Epoch 00248: val_loss did not improve from 0.00706\n", "\n", "Epoch 00249: val_loss did not improve from 0.00706\n", "\n", "Epoch 00250: val_loss did not improve from 0.00706\n", "\n", "Epoch 00251: val_loss did not improve from 0.00706\n", "\n", "Epoch 00252: val_loss did not improve from 0.00706\n", "\n", "Epoch 00253: val_loss did not improve from 0.00706\n", "\n", "Epoch 00254: val_loss did not improve from 0.00706\n", "\n", "Epoch 00255: val_loss did not improve from 0.00706\n", "\n", "Epoch 00256: val_loss did not improve from 0.00706\n", "\n", "Epoch 00257: val_loss did not improve from 0.00706\n", "\n", "Epoch 00258: val_loss did not improve from 0.00706\n", "\n", "Epoch 00259: val_loss did not improve from 0.00706\n", "\n", "Epoch 00260: val_loss did not improve from 0.00706\n", "\n", "Epoch 00261: val_loss did not improve from 0.00706\n", "\n", "Epoch 00262: val_loss did not improve from 0.00706\n", "\n", "Epoch 00263: val_loss did not improve from 0.00706\n", "\n", "Epoch 00264: val_loss did not improve from 0.00706\n", "\n", "Epoch 00265: val_loss did not improve from 0.00706\n", "\n", "Epoch 00266: val_loss did not improve from 0.00706\n", "\n", "Epoch 00267: val_loss did not improve from 0.00706\n", "\n", "Epoch 00268: val_loss did not improve from 0.00706\n", "\n", "Epoch 00269: val_loss did not improve from 0.00706\n", "\n", "Epoch 00270: val_loss did not improve from 0.00706\n", "\n", "Epoch 00271: val_loss did not improve from 0.00706\n", "\n", "Epoch 00272: val_loss did not improve from 0.00706\n", "\n", "Epoch 00273: val_loss did not improve from 0.00706\n", "\n", "Epoch 00274: val_loss did not improve from 0.00706\n", "\n", "Epoch 00275: val_loss did not improve from 0.00706\n", "\n", "Epoch 00276: val_loss did not improve from 0.00706\n", "\n", "Epoch 00277: val_loss did not improve from 0.00706\n", "\n", "Epoch 00278: val_loss did not improve from 0.00706\n", "\n", "Epoch 00279: val_loss did not improve from 0.00706\n", "\n", "Epoch 00280: val_loss did not improve from 0.00706\n", "\n", "Epoch 00281: val_loss did not improve from 0.00706\n", "\n", "Epoch 00282: val_loss did not improve from 0.00706\n", "\n", "Epoch 00283: val_loss did not improve from 0.00706\n", "\n", "Epoch 00284: val_loss did not improve from 0.00706\n", "\n", "Epoch 00285: val_loss did not improve from 0.00706\n", "\n", "Epoch 00286: val_loss did not improve from 0.00706\n", "\n", "Epoch 00287: val_loss did not improve from 0.00706\n", "\n", "Epoch 00288: val_loss did not improve from 0.00706\n", "\n", "Epoch 00289: val_loss did not improve from 0.00706\n", "\n", "Epoch 00290: val_loss did not improve from 0.00706\n", "\n", "Epoch 00291: val_loss did not improve from 0.00706\n", "\n", "Epoch 00292: val_loss did not improve from 0.00706\n", "\n", "Epoch 00293: val_loss did not improve from 0.00706\n", "\n", "Epoch 00294: val_loss did not improve from 0.00706\n", "\n", "Epoch 00295: val_loss did not improve from 0.00706\n", "\n", "Epoch 00296: val_loss did not improve from 0.00706\n", "\n", "Epoch 00297: val_loss did not improve from 0.00706\n", "\n", "Epoch 00298: val_loss did not improve from 0.00706\n", "\n", "Epoch 00299: val_loss did not improve from 0.00706\n", "\n", "Epoch 00300: val_loss did not improve from 0.00706\n", "\n", "Epoch 00301: val_loss did not improve from 0.00706\n", "Epoch 00301: early stopping\n", "keys: dict_keys(['loss', 'val_loss'])\n", "--- Elapsed time: 106.0821533203125 seconds ---\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEWCAYAAABxMXBSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAA/UklEQVR4nO3dd5hU5dn48e89s7OVDisioKBiAQsKYjcaSxSjaGwkxpjEWN5ojHlNMckviXnfFGNiiomKGkn0tdeIESuxxM5iUEBEiiBLXerusnVm7t8f95ndmd3Z2RncYRe4P9c118yc+pw5c577KaeIquKcc85lK9TdCXDOObd98cDhnHMuJx44nHPO5cQDh3POuZx44HDOOZcTDxzOOedy4oHDuTwSkb+LyC+ynHapiJz0aZfjXL554HDOOZcTDxzOOedy4oHD7fSCJqLvicj7IrJFRO4SkcEi8oyI1IjIiyLSP2n6M0VknohsEpGXRWT/pHGHiMi7wXwPAcVt1vV5EZkdzPuGiBy0lWm+VEQWicgGEZkmIrsFw0VE/iAia0Vkc7BNBwTjJorIB0HaVojId7fqB3M7PQ8czplzgJOBfYAzgGeAHwGDsOPkagAR2Qd4ALgGKAemA0+JSKGIFAL/AP4PGAA8EiyXYN5DganA5cBA4HZgmogU5ZJQEfks8GvgfGAIsAx4MBh9CnBcsB39gAuA9cG4u4DLVbU3cADwr1zW61yCBw7nzJ9VdY2qrgD+Dbytqv9R1UbgCeCQYLoLgKdV9QVVbQZ+B5QARwFHABHgj6rarKqPAjOT1nEpcLuqvq2qMVW9G2gM5svFhcBUVX03SN8PgSNFZATQDPQG9gNEVeer6qpgvmZgtIj0UdWNqvpujut1DvDA4VzCmqTP9Wm+9wo+74aV8AFQ1TiwHBgajFuhqXcOXZb0eQ/g2qCZapOIbAKGB/Plom0aarFaxVBV/RfwF+AWYI2I3CEifYJJzwEmAstE5BUROTLH9ToHeOBwLlcrsQAAWJ8ClvmvAFYBQ4NhCbsnfV4O/FJV+yW9SlX1gU+ZhjKs6WsFgKrerKrjgDFYk9X3guEzVXUSsAvWpPZwjut1DvDA4VyuHgZOF5ETRSQCXIs1N70BvAlEgatFpEBEvgBMSJr3TuAKETk86MQuE5HTRaR3jmm4H/iaiIwN+kd+hTWtLRWRw4LlR4AtQAMQC/pgLhSRvkETWzUQ+xS/g9uJeeBwLgequgD4MvBnYB3WkX6GqjapahPwBeCrwEasP+TxpHkrsH6OvwTjFwXT5pqGGcBPgMewWs5ewORgdB8sQG3EmrPWY/0wABcBS0WkGrgi2A7ncib+ICfnnHO58BqHc865nHjgcM45lxMPHM4553LigcM551xOCro7AdvCoEGDdMSIEd2dDOec267MmjVrnaqWtx2+UwSOESNGUFFR0d3JcM657YqILEs33JuqnHPO5cQDh3POuZx44HDOOZeTnaKPI53m5mYqKytpaGjo7qTkVXFxMcOGDSMSiXR3UpxzO4i8Bg4RORX4ExAG/qqqN7QZfyHwg+BrLfBfqvpepnlFZADwEDACWAqcr6obc01bZWUlvXv3ZsSIEaTezHTHoaqsX7+eyspKRo4c2d3Jcc7tIPLWVCUiYeyZAKcBo4EvisjoNpN9DHxGVQ8C/he4I4t5rwNmqOooYEbwPWcNDQ0MHDhwhw0aACLCwIEDd/halXNu28pnH8cEYJGqLgnuGvogMCl5AlV9I6m28BYwLIt5JwF3B5/vBs7a2gTuyEEjYWfYRufctpXPwDEUe3BNQmUwrCOXYM957mzewYlHYQbvu6RbmIhcJiIVIlJRVVW1FckHGjZDzeqtm9c553ZQ+Qwc6Yq6ae/hLiInYIEj0d+R9bwdUdU7VHW8qo4vL2934WN2Gqqhdu3WzduJTZs2ceutt+Y838SJE9m0aVPXJ8g557KUz8BRiT1SM2EY9sjLFCJyEPBXYJKqrs9i3jUiMiSYdwiQn5zdVpC3RXcUOGKxzA9lmz59Ov369ctTqpxzrnP5DBwzgVEiMlJECrEnlE1LnkBEdseekHaRqn6U5bzTgIuDzxcDT+ZxG8ixopO16667jsWLFzN27FgOO+wwTjjhBL70pS9x4IEHAnDWWWcxbtw4xowZwx133NEy34gRI1i3bh1Lly5l//3359JLL2XMmDGccsop1NfX5yWtzjmXLG+n46pqVESuAp7DTqmdqqrzROSKYPwU4KfAQODWoBM3GjQvpZ03WPQNwMMicgnwCXDep03rz5+axwcrq9uPiDVCrBkK38x5maN368PPzhjT4fgbbriBuXPnMnv2bF5++WVOP/105s6d23La7NSpUxkwYAD19fUcdthhnHPOOQwcODBlGQsXLuSBBx7gzjvv5Pzzz+exxx7jy1/2p4E65/Irr9dxqOp0YHqbYVOSPn8D+Ea28wbD1wMndm1Ku9+ECRNSrrW4+eabeeKJJwBYvnw5CxcubBc4Ro4cydixYwEYN24cS5cu3VbJdc7txHbaK8eTdVgzqF5pneO7jc17GsrKylo+v/zyy7z44ou8+eablJaWcvzxx6e9FqOoqKjlczgc9qYq59w24feq6lR++jh69+5NTU1N2nGbN2+mf//+lJaW8uGHH/LWW2/lJQ3OObc1vMaRSeKsKtUuP8Nq4MCBHH300RxwwAGUlJQwePDglnGnnnoqU6ZM4aCDDmLffffliCOO6NJ1O+fcpyGq+SlR9yTjx4/Xtg9ymj9/Pvvvv3/mGWtWQ80qGHIwyPZbOctqW51zrg0RmaWq49sO335zw21px4+tzjmXNQ8cGSWapzxyOOdcggeOTPz+gM45144Hjoy8xuGcc2154MgocVZV96bCOed6Eg8cmbQ0VXnkcM65BA8cGfWcpqpevXp1dxKccw7wwJGd7o8bzjnXY/iV45lI/mocP/jBD9hjjz345je/CcD111+PiPDqq6+yceNGmpub+cUvfsGkSZM6WZJzzm1bHjgAnrkOVs9pPzzeDNEGiJTlfuX4rgfCaTd0OHry5Mlcc801LYHj4Ycf5tlnn+U73/kOffr0Yd26dRxxxBGceeaZ/txw51yP4oGjmxxyyCGsXbuWlStXUlVVRf/+/RkyZAjf+c53ePXVVwmFQqxYsYI1a9aw6667dndynXOuhQcO6LhmULcBNi2D8v0hUtzlqz333HN59NFHWb16NZMnT+a+++6jqqqKWbNmEYlEGDFiRNrbqTvnXHfKa+e4iJwqIgtEZJGIXJdm/H4i8qaINIrId5OG7ysis5Ne1SJyTTDuehFZkTRuYh43IPiQn97xyZMn8+CDD/Loo49y7rnnsnnzZnbZZRcikQgvvfQSy5Yty8t6nXPu08hbjUNEwsAtwMlAJTBTRKap6gdJk20ArgbOSp5XVRcAY5OWswJ4ImmSP6jq7/KV9lZJt1XPgzFjxlBTU8PQoUMZMmQIF154IWeccQbjx49n7Nix7LfffnlZr3POfRr5bKqaACxS1SUAIvIgMAloCRyquhZYKyKnZ1jOicBiVe2G4nf+O6XnzGntlB80aBBvvpn++ea1tbV5T4tzzmUjn01VQ4HlSd8rg2G5mgw80GbYVSLyvohMFZH+6WYSkctEpEJEKqqqqrZitfiV4845l0Y+A0e64npOObCIFAJnAo8kDb4N2AtryloF3JRuXlW9Q1XHq+r48vLyXFabnIKtnM8553Zc+QwclcDwpO/DgJU5LuM04F1VXZMYoKprVDWmqnHgTqxJbKtk/fTD7fgpiTvDEx6dc9tWPgPHTGCUiIwMag6TgWk5LuOLtGmmEpEhSV/PBuZuTeKKi4tZv3595ow1z2dV5Zuqsn79eoqLu/5UYufczitvneOqGhWRq4DngDAwVVXnicgVwfgpIrIrUAH0AeLBKbejVbVaREqxM7Iub7PoG0VkLJabL00zPivDhg2jsrKSjP0f0QaoXQvrgYLtM/MtLi5m2LBh3Z0M59wORHaGpozx48drRUVF7jMuexP+dipc9ATs9dmuT5hzzvVgIjJLVce3He53x80kFLb3eLx70+Gccz2IB45MJAgcGuvedDjnXA/igSOTUPDzxD1wOOdcggeOTLzG4Zxz7XjgyKSlj8MDh3POJXjgyMRrHM45144Hjkz8rCrnnGvHA0cmLYEj2r3pcM65HsQDRybeVOWcc+144MjEO8edc64dDxyZeI3DOefa8cCRidc4nHOuHQ8cmbTUOPysKuecS/DAkYnfcsQ559rxwJGJ93E451w7Hjgy8T4O55xrJ6+BQ0ROFZEFIrJIRK5LM34/EXlTRBpF5Lttxi0VkTkiMltEKpKGDxCRF0RkYfDeP38b4DUO55xrK2+BQ0TCwC3AacBo4IsiMrrNZBuAq4HfdbCYE1R1bJsnUF0HzFDVUcCM4Ht++C1HnHOunXzWOCYAi1R1iao2AQ8Ck5InUNW1qjoTaM5huZOAu4PPdwNndUFa0/Mah3POtZPPwDEUWJ70vTIYli0FnheRWSJyWdLwwaq6CiB43yXdzCJymYhUiEhFVVVVjkkP+FlVzjnXTj4Dh6QZpjnMf7SqHoo1dV0pIsflsnJVvUNVx6vq+PLy8lxmTSVhr3E451ySfAaOSmB40vdhwMpsZ1bVlcH7WuAJrOkLYI2IDAEI3td2SWo7Egp7jcM555LkM3DMBEaJyEgRKQQmA9OymVFEykSkd+IzcAowNxg9Dbg4+Hwx8GSXprqtUIHfVt0555IU5GvBqhoVkauA54AwMFVV54nIFcH4KSKyK1AB9AHiInINdgbWIOAJEUmk8X5VfTZY9A3AwyJyCfAJcF6+tgEImqr8rCrnnEvIW+AAUNXpwPQ2w6YkfV6NNWG1VQ0c3MEy1wMndmEyMwuFvKnKOeeS+JXjnfHOceecS+GBozPeOe6ccyk8cHTGaxzOOZfCA0dnQmG/5YhzziXxwNEZr3E451wKDxyd8bOqnHMuhQeOzniNwznnUnjg6IyfVeWccyk8cHTGaxzOOZfCA0dn/Kwq55xL4YGjMxLyGodzziXxwNEZ7+NwzrkUHjg647dVd865FB44OuOd4845l8IDR2e8c9w551J44OiMd44751yKvAYOETlVRBaIyCIRuS7N+P1E5E0RaRSR7yYNHy4iL4nIfBGZJyLfThp3vYisEJHZwWtiPrfBO8edcy5V3p4AKCJh4BbgZKASmCki01T1g6TJNgBXA2e1mT0KXKuq7wbPHp8lIi8kzfsHVf1dvtKewvs4nHMuRT5rHBOARaq6RFWbgAeBSckTqOpaVZ0JNLcZvkpV3w0+1wDzgaF5TGvHvMbhnHMp8hk4hgLLk75XshWZv4iMAA4B3k4afJWIvC8iU0WkfwfzXSYiFSJSUVVVletqkxbkNQ7nnEuWz8AhaYZpTgsQ6QU8BlyjqtXB4NuAvYCxwCrgpnTzquodqjpeVceXl5fnstpUflaVc86lyGfgqASGJ30fBqzMdmYRiWBB4z5VfTwxXFXXqGpMVePAnViTWP74WVXOOZcin4FjJjBKREaKSCEwGZiWzYwiIsBdwHxV/X2bcUOSvp4NzO2i9KbnfRzOOZcib2dVqWpURK4CngPCwFRVnSciVwTjp4jIrkAF0AeIi8g1wGjgIOAiYI6IzA4W+SNVnQ7cKCJjsWavpcDl+doGwPs4nHOujbwFDoAgo5/eZtiUpM+rsSastl4jfR8JqnpRV6axU17jcM65FH7leGckDOqd4845l+CBozOhkNc4nHMuiQeOzvht1Z1zLoUHjs5457hzzqXwwNEZ7xx3zrkUHjg6Ey70pirnnEvigaMzBUUQbejuVDjnXI/hgaMzBcVW44h5rcM558ADR+cKiuw91ti96XDOuR7CA0dnwkHgiHrgcM458MDRuUSNw/s5nHMO8MDRuYJie/fA4ZxzgAeOzrXUOJq6Nx3OOddDZBU4ROTbItJHzF0i8q6InJLvxPUIXuNwzrkU2dY4vh48uvUUoBz4GnBD3lLVkxR457hzziXLNnAkno0xEfibqr5HB8/L2OF4jcM551JkGzhmicjzWOB4TkR6A50+pEJEThWRBSKySESuSzN+PxF5U0QaReS72cwrIgNE5AURWRi8989yG7ZOS+DwGodzzkH2geMS4DrgMFWtAyJYc1WHRCQM3AKchj0O9osiMrrNZBuAq4Hf5TDvdcAMVR0FzAi+54+fjuuccymyDRxHAgtUdZOIfBn4f8DmTuaZACxS1SWq2gQ8CExKnkBV16rqTKA5h3knAXcHn+8GzspyG7aO1ziccy5FtoHjNqBORA4Gvg8sA+7pZJ6hwPKk75XBsGxkmnewqq4CCN53SbcAEblMRCpEpKKqqirL1abhNQ7nnEuRbeCIqqpipf0/qeqfgN6dzJOu81yzXN+nmdcmVr1DVcer6vjy8vJcZk3lnePOOZci28BRIyI/BC4Cng76ICKdzFMJDE/6PgxYmeX6Ms27RkSGAATva7Nc5tbx03Gdcy5FtoHjAqARu55jNdZs9NtO5pkJjBKRkSJSCEwGpmW5vkzzTgMuDj5fDDyZ5TK3TqLG4XfHdc45AAqymUhVV4vIfcBhIvJ54B1VzdjHoapREbkKeA4IA1NVdZ6IXBGMnyIiuwIVQB8gLiLXAKNVtTrdvMGibwAeFpFLgE+A83Lc5tyEg4qV1ziccw7IMnCIyPlYDeNlrP/hzyLyPVV9NNN8qjodmN5m2JSkz6uxZqis5g2GrwdOzCbdXULEah3ex+Gcc0CWgQP4MXYNx1oAESkHXgQyBo4dRkGR1ziccy6QbR9HKBE0AutzmHf75zUO55xrkW2N41kReQ54IPh+AWmakXZYXuNwzrkW2XaOf09EzgGOxvo47lDVJ/Kasp7EaxzOOdci2xoHqvoY8Fge09JzeY3DOedaZAwcIlJD+iu2BVBV7ZOXVPU0XuNwzrkWGQOHqnZ2W5GdQ0Gx1ziccy6w85wZ9Wl4U5VzzrXwwJENr3E451wLDxzZKCjyPg7nnAt44MiG1zicc66FB45shAu9xuGccwEPHNnw03Gdc66FB45sREqgub67U+Gccz2CB45sREoh3gyx5u5OiXPOdTsPHNmIlNi71zqccy6/gUNEThWRBSKySESuSzNeROTmYPz7InJoMHxfEZmd9KoOng6IiFwvIiuSxk3M5zYAUFhq7811eV+Vc871dFnf5DBXIhIGbgFOBiqBmSIyTVU/SJrsNGBU8DocuA04XFUXAGOTlrMCSL4b7x9U9Xf5Sns7EQ8czjmXkM8axwRgkaouUdUm4EFgUptpJgH3qHkL6CciQ9pMcyKwWFWX5TGtmXlTlXPOtchn4BgKLE/6XhkMy3WaybQ+QCrhqqBpa6qI9E+3chG5TEQqRKSiqqoq99QnS9Q4mrzG4Zxz+QwckmZY21u0Z5xGRAqBM4FHksbfBuyFNWWtAm5Kt3JVvUNVx6vq+PLy8hySnYY3VTnnXIt8Bo5KYHjS92HAyhynOQ14V1XXJAao6hpVjalqHLgTaxLLL2+qcs65FvkMHDOBUSIyMqg5TAamtZlmGvCV4OyqI4DNqroqafwXadNM1aYP5GxgbtcnvQ2vcTjnXIu8nVWlqlERuQp4DggDU1V1nohcEYyfAkwHJgKLgDrga4n5RaQUOyPr8jaLvlFExmJNWkvTjO96LTUODxzOOZe3wAGgqtOx4JA8bErSZwWu7GDeOmBgmuEXdXEyO1dYZu/eVOWcc37leFa8xuGccy08cGSjIAgcfjquc8554MhKKGS3Vvcah3POeeDIWqTU+ziccw4PHNnzwOGcc4AHjuxFSqB5S3enwjnnup0Hjmz5UwCdcw7wwJG9SKl3jjvnHB44sldY6qfjOuccHjiy553jzjkHeODIXqTEm6qccw4PHNnzznHnnAM8cGQvUuY1DuecwwNH9op6QWMNxOPdnRLnnOtWHjiyVdwPUGis7u6UOOdct/LAka2S/vbesKlbk+Gcc90tr4FDRE4VkQUiskhErkszXkTk5mD8+yJyaNK4pSIyR0Rmi0hF0vABIvKCiCwM3vvncxtalPSz9/qN22R1zjnXU+UtcIhIGLgFOA0YDXxRREa3mew0YFTwugy4rc34E1R1rKqOTxp2HTBDVUcBM4Lv+Vfcz97rN22T1TnnXE+VzxrHBGCRqi5R1SbgQWBSm2kmAfeoeQvoJyJDOlnuJODu4PPdwFldmOaOeVOVc84B+Q0cQ4HlSd8rg2HZTqPA8yIyS0QuS5pmsKquAgjed0m3chG5TEQqRKSiqqrqU2xGwJuqnHMOyG/gkDTDNIdpjlbVQ7HmrCtF5LhcVq6qd6jqeFUdX15ensus6XlTlXPOAfkNHJXA8KTvw4CV2U6jqon3tcATWNMXwJpEc1bwvrbLU55OpATCRd5U5Zzb6eUzcMwERonISBEpBCYD09pMMw34SnB21RHAZlVdJSJlItIbQETKgFOAuUnzXBx8vhh4Mo/b0ErEmqu8qco5t5MryNeCVTUqIlcBzwFhYKqqzhORK4LxU4DpwERgEVAHfC2YfTDwhIgk0ni/qj4bjLsBeFhELgE+Ac7L1za0U9zPm6qcczu9vAUOAFWdjgWH5GFTkj4rcGWa+ZYAB3ewzPXAiV2b0iyV9PemKufcTs+vHM+FN1U555wHjpwU94P6zd2dCuec61YeOHLhTVXOOeeBIycl/ezuuLFod6fEOee6jQeOXCQuAmzw5irn3M7LA0cG81dV89KHSdcX+v2qnHPOA0cm97/9Cdc+8l7rAL9flXPOeeDIpLQwzJbGpP4Mv1+Vc8554MikpDBMYzROLB7cd9GbqpxzzgNHJmWFdmF9fXPMBnhTlXPOeeDIpKQwDEBdU9Bc5U1VzjnngSOT0kTgaAxqHAWFECnzpirn3E7NA0cGLYGjKdY6sKSf1zicczs1DxwZlLb0cbQ5s8r7OJxzOzEPHBmkr3H4/aqcczs3DxwZJDrHtzR6U5VzziXkNXCIyKkiskBEFonIdWnGi4jcHIx/X0QODYYPF5GXRGS+iMwTkW8nzXO9iKwQkdnBa2K+0u9NVc45117engAoImHgFuBkoBKYKSLTVPWDpMlOA0YFr8OB24L3KHCtqr4bPHt8loi8kDTvH1T1d/lKe0JZh53jG0HVnkPunHM7mXzWOCYAi1R1iao2AQ8Ck9pMMwm4R81bQD8RGaKqq1T1XQBVrQHmA0PzmNa0Ek1V9cmBY/AYiNbD8ne2dXKcc65HyGfgGAosT/peSfvMv9NpRGQEcAjwdtLgq4Kmraki0j/dykXkMhGpEJGKqqqqrdqARFNVSh/H/mdAQQm898BWLdM557Z3+Qwc6dpxNJdpRKQX8BhwjapWB4NvA/YCxgKrgJvSrVxV71DV8ao6vry8PMekm3BIKCwIUZfcx1HU24LHnEfg439v1XKd2+7VroWa1d2dCtdN8hk4KoHhSd+HASuznUZEIljQuE9VH09MoKprVDWmqnHgTqxJLG/KCsOpTVUAJ/wI+uwG950HDdXpZ3RuR/bklfD4Zd2dCtdN8hk4ZgKjRGSkiBQCk4FpbaaZBnwlOLvqCGCzqq4SEQHuAuar6u+TZxCRIUlfzwbm5m8TrLmqrm3gGDASPv8H6+tY+lo+V+9cdlTh/UegsXbbrK9qAWz6ZNusy/U4eQscqhoFrgKewzq3H1bVeSJyhYhcEUw2HVgCLMJqD98Mhh8NXAR8Ns1ptzeKyBwReR84AfhOvrYBrIO85SaHyYZNsPtWLf5XPlfvPo33H4YNS7o7FdvG+sXw+Ddg7qP5X1c8BtUrYMu6/K+rK62c7Y997iJ5Ox0XQFWnY8EhediUpM8KXJlmvtdI3/+Bql7UxcnMqLQw3L7GAXbDwxFHw5KXtmVyXLYaquHxS+HwK+C032ybdUaboLmu9fb721L1iuB9Vf7XVbMa4lFoqoHmBogUdzzt7PthySvwhdtzW8fGZfDWrXDKLyHcQTYVbYL/3AOHfMWOx2TxGMy8C0YeB7vsZ7/LHZ+xcVe+A+X75paefGjYbMF34F7dnZKc+ZXjnegwcADseQKsX9RxlT0WhWVv5i9x26Olr8Pv9oG6DflbRywKa+fb5w0f5289bc34Odx2NMTjuc1XvQpm/C+s+QDuOSv3C0zXzofqoPuwtoMO6+UzobGm82Ute8NqL5lsrmz9XNdJreM/99mJJPEOjqGOzHsc3p4CVR92PM3C5+Hpa+GjZ9qPW/pveOZ7cOvh1pxcNb913Py2LeZZiMda92tjDTTX576Mtl76FdxxPDTVffplbWMeODphfRxpmqoA9jrB3hd3UOuYfR/87VT45O3047dWtGnr5nvlt9Z882mtXwwfPb918y55CWrXwJosu6ZizfDqb7O/zUssCv87EB660L5v7CBwLH8HNi7teJ21VdZvkC1VmP8UVFfCJ2/Ainc7ni5h7YfwjyvhP/fCv38H//qF/T7znsh+vesXw61HwDt32Pfate2naay1/+Frf4Snvg0fv5p+WQ2b4f++AH8/Hbasbz9+3j9gwTOwOekM+i0ZTnWPRWHlu6Ax2+cdWfKydbYnB9x1C+09Uz9K4j+0Ypb9H5OD06IX7b2gGGbdDesWtY5LDnxtzX8q/f/iryfCCz+xz/eeC9O/2/EysrViFjRWw8Ln7Pt/7oNfD7fCVQ/ngaMTJZlqHOX7Qe8hMPex9Afj4hn2PucROwAeuzR9aVLV/ujZlMoaquGmfeGBL+YeQN66Ff7zf7nNk86rv4WHvrx1AWzNPHvPtu9h+duWoc6+P7vpq4NMIZGhbVzWvgagCvdfAM//JP0yHrwQfrc3/N9ZFkSysWEJbFpmn+87H6ae2v6Mu7mPw+/3b82YKqbC7HutuQVaM5C5j6fO11QH//59a/BMBJ81H7T+niuDQJXuFNnNy61p6b0HYNbfW4NMW/P+YSd81K6Bl3/dOnzG/8Kbt1pm+dyPUzPz2qr2v1HlLDsm1sy1pjuAzSvSr3PJK3DPJAue6xa0Dk8EjuQg1VYicLxzJ9x/XmvAraywbRn5GTjofFgwHdbMgcJeMGQsbFpuv9u0b8Gq91uXV78JHv4K/LvNGf6bV8DK/1hQAVj7QccFg4Slr1mQbTf8dXj7DvtPrgluhJHY3wuft0By/wW2LXeeaMF31Xv2n3ztj7kVZvLIA0cnSiNpTsdNELE21I9fgbvPsIN79v1w+3F2cCWu85j3hI2b87CVKtp6/yG49xw72Dqz9DWo32AHQ0cZAMDMv1rzRELDZptvw9LO19GZtfMh1ghr53U+bUM1LJrR+j2R0a1fZJ2VydI1X60PSoqLZ7Qfl07bEmqsEWratPtXr7DfYsWs9MtY9Z69L3kZXr6h83XG41a7BCjqA81bbL2LXkidrrLC0vLYNyyzTZSKE2mOBzXbpa+l1hw+etaawe46BT58Gn6zB1T8DW47El7/U+o6kkv2Hz1vgWTT8tbtBvtf/ude+Mc3U5tS33sABu0LexxtGSVYOl77g5W2t1TBhsXwyVut89x/HvzxwNTg8coN8MQVsDBp+6vTlPJnPwD3nJn6+1TOsoxz9fupvw1YwH30661NbquDwJEITgtfsEz4rydawNn7JBhzNjTVwrv3wMC9od9wa/666xQb9tat1k+jatul8dZtBwuUzwa32du0zP6/jdVW08tU0Hvxeph2dfuM/pXfWBParL/Z/6RsFwswK2a1FnaaauClX8OKCtj8iRXUPvwnvPizzE13ba16z37jPFxv44GjE31LImysa6Ix2sGfZMLlMPos2Pd0O7j/8V+2w+49xzKnA8+zduBZf7Pp37oV7p9sOzMWhQ+m2Z8JWjOSZPG4VbXrNliT14f/tCvX+wyDT96Ef/0y9Y8OVtp6+lp4YHLrmS+Jtv7qyvY1hed+DC/8FOY8aoFt4QuWWaRre43HYd1H9rmywub728T2B4iqvR67BO79ggWbxprWUvnMu6yzsjLIvJe+BjeOtHbff98EVcE6EoFj6et2gCfS0FG78MZlrZ/77m7vq+ek1joSGU71ivadydFG6yc4/kew70QrCKQr5b1+s9W6VOHlIM0jjoX9Pg+hArsZ5odPp85TvQLCRVA50zLtDWn6EvY8HtDUoJbIRNctgAe/ZIWAF35qw1ZUpM5fu8a2ddkblqnfdpQFnmQNm6xp6L0HWptfmuqs+W7/z1vH8bqFwSm+D1tTUzypuXbhc9B/ZOv3mlXw1m1J6Z0DsSb7TUoH2rDNK+w/vPglK0yowmu/hyEHw49WQlFf2+bZ91p6ow2ty3r7djtWHvqyFa6WvWHNbxs/bk2HhOH9B+HZH8LgA+D4H8KhF8GI46Bf8D8YNAr6Drf90FRrQX7hC/DLwfDmX2BZcGr92vnWjLjsDRs+f5otH+C9B+091thxM1qiNrFlbWp/UbTRatAAT/+3vZ89BXrvatfEbFwGux/Zuq/B9smCZ2Cf0+x7ZZv93ZFFL1oB9h9XtM8fuoAHjk4ctfdAGprjvLk4TZsvwLBxcP7dcP49cPYdcMSVcNpvremiqC987ldw7LWWmUy43P60Hz1jHX/PfB8evsim7be7ndq7ZT08eVVrO+dbt8BTV1vb9NRTrGS72yGwx5FWkn/1Rng16X6PzfUw/XswaB/LYF76lQ1PtPVrPPUPH22y0uusv1sp6eUb4Jkf2Oepp1iGsm6RNbM9/xMrASVKeNO/ayXeZa9bphBttAznnTvh96OtRLcw6At55vvw62H2uaC4dRmJjspEJvvKb2DG/1hpesUsWL8EEGtCWfa6dQL/dk/41W7wyo3t98emZSAhOPQrcHxQUnzgAph2Ves0a+a0fk408TRtse1MNCP12x32+izUrLRlNtcH0yy0YDf7Pmu6mPOIpX2PY+Cif8CJP4GvPAmjz7QS/+KX4J/faT2Fdfcj4JCLrPYJdlo3wIDgzJqDJtv7ew/Anw62JpFV78OuB8LF/7SCSFm5lXrTiUetz+OJKyzTbqqzJrHESYp7n2Tvg/aBE39mQezfN8EHT1qAGDrOxjVutkz7rdvs/9ZrV2vmSTiyzcmQ795t77VVrTW8aD2cfhNESq0G8NBF1vx329FWg1z3kZ31VlgGQw+1ILjkldZlhousNv/M9+GNmy09YMtK1ECPuQb2OhFO+GGw/tVwxs2270v62xlZ477Wury+w1qXf+x/t3buv/egHXOhSPAbHm4FooJiCxp7nwSlg2x/JySa09ra+LHVJsD+s6oW6G/azwLiMf/dOu0eR9k2rF9khbqRx1mhI+G1P1h6Troeivva/srGW7dZM/pVs+z36WJ5PR13R3DUXoMoKwzz/AdrOH7fXTqeMFwAB19gL7DSTihiw0/8KRz1LftDHHS+/Rlev9kO1COvgiO+aWeBPHE5/O00K23Mvg8OusBqAZB6JsiB51iGn/gTL3rRSmBFvazZa8taOHeqZdxzH7XglXx20calMGhv+7z8LfuTN9N6jnuoAAbsaQfqcz+yP/XSoNlteJsL9XvvZpnr+oVB6eyfdrBF6y1o9d4N+u+R2ge0z+csowJrcjv555ZhDBkLoydZhn33mdauvn4R7H2i1bbmPga9Bls6R50CL/0Sdj0I9j01aduWWW3szD9b88mTwaVBs++DA75gGcDquXZQ1a61A3HEMTDlGAuofYKMpd/urafVLnrRgnOf3WzbVs+1jBWxYFq7Gj77E9vXfXazV9MW+/0f/brVPHc7xILeyM/AGX+CA8+1ALdpuQXIo79tAXvP46H/iNbf5+GLrXS870QYeay9/vVLKzC0/PeKrATcf4Tt20Rp9aTrLXh98oaVzA+7BPY+GfY9DXY/CvoMaQ3UiRL1bodaRg9w+7H2+fx7IBSybV8xy7ZtwqWtHcR7Hm+ZbizaGpSPuNJ+vzFn2//g7eAs/DFnW9PttKstYx9ztg0fNt6aZJKNOKY1QMz4uf3eKCz6lzUjDj7AAum4r1qa6jfB2C/ZjUiTTbjUSuqHX9ZaMOg73I6vF6+37w3VFtgPntza7FjcxwL5Xp+13/aFn7b2Q4EFvn1OoZ1E34uELHBsWZvapHjMNTDkIGuZiJTA0PGt4/rtAbuNte0Da5rqO9xOKR463n7/+o2WL+x/JvQe3H796xfbf/aEH7ce513MA0cniiNhjt93F56ft5rrzxhDYUGWlbRISer3kuBejMPGW4lj2et2cB17rR2U+55mTR1LX4NTb7BS5nv327A9jrIDfNgE+NJDtqxElbewt7WJPv9jKxXO+rtlpiOOscxkzsMWPDYsgXChNSHcdw4MPwLO+KPVWiRsQSwhHrU/3fK3rUkJtRLxhsXWDAZWqvv4FfjMD+CWCZaxLnrBMuS69RZ8alfD2AutFLv8HbjkeTsw5j1uGeOIYy0gPfI16y856Xo4Jriec+yX4J3brYa072lWnZ/3DwhHLBM97+9w416w4OnUwLHpk9amiXAELn7Kvt97rpX8r3jdahlDx1lmM3OqNStsrrRMM1ED6bc79BlqF3k+fa0Nq1mV+lsdfXVrhrDH0an7e+RnbN76DTbPiz+30m3foRAKB01SWLPGHkdaoD54MhQUWYa4call9psrId5sGU3C3ida4Njv89Z0uednrGY3ZGxrxvidDyyA1W2wwNFvdyu8gGVCCd+YYf1hFXdZkO8zxH7zhJOut1p1wi77087+Z1pG98E/WpvQjr0WyoJmqqI+9j7iWDj7dsv4q1dYoSlxnIz7amvg+Ma/rDDz3kPB8s+wmsxnf2zBdUFQO518n9VWwN4/98v2aQO7v9wXg5MrEk1uQw623+eLD9ny3g1OUDjwPDtW9j7JCnQFRba/wDL0ROAo6pvamf/+w3aMDh1vv7WE7HeZ+7j9ngeeZ+vcuNRqDmPObg2ag8cEha0GK2QNHWcFrbJd7BgaFgSWRHB96tt2/LzwU6vl7n546vYmCpljv5T+9+gCHjiycO64YTw9ZxXPzF3FpLFdcHf3YePg+x+nPs+juC989Z+pF1Qd9S1rl61eac0JB54LpQNs3K4H2Z/3mG9bk8msv9vwIQfDxJuCjvvj7U/8ZNCsMGif1v6J1XPsXlvxqF3IuHmFtX3XrW9dztBx1uyE2kH76Ncto+ozDMZdbK94zALSohesT+GqmbaMxy+zNuM9j4cDzoX9TrfMHyzjXz0HTv4fO3vnvYcs0Oyb9EyuCZfC20G7+cC9YNTJ1qFb3A+O+54FhT2OsgPsuR/bQbj4JatBjb2wdTkjj7P3M2+22txfT7LgcuLPrBYw5RhL+0nXW1PEk9+0tPQeYgH9kC/bKbJ7n2zNhhqzTCEUsXb0+U/Zbzf00NR9HCmGUSfZAX7c96zDGCyzShYKWdAAy6TAmqU+/KfVWov7WXv48KTMYfcjLHPtPdg6ug+/3PqPDjrfMu+9TrQABTDsMHvvl3xLuCSDR1uwrpjaug3JaTzky+nnAzurcP1iewfb5xqzgJsIGtAaaE/+H9vG/SZaU9z4r7dO03cYXD3bCk5DD7X/b3OD9Xmc8gsr8YP9Vms/sO+JYbnoNwIQ+2+DFToSneehAqtRf/3Z9PMOOdjey8pt/oUvWK127QfWt1lYZjX+8v1g4CirWW5YYjXk02+yYzydcMSWvfxtK1gd9S27RuzNv1h/T6JGcsA51lLxwZMw5guwarb1eR082dY7YC8raIRCVohIbpbrYh44svCZfcrZs7yMu177mDMP3g3pigc4dbSM5KtwB4+29/57wLdmWZU1obAUvj3b/ozHXmtt8BJOvYI2XGAlyrmPw7M/sD9jrNkOlPPvsYxUQlZyq99kQeDpa62UPGCvoCY00arLo8+Gwm9b7WZ00mNVQmE7mKs+tCaoSLFlWqNOsgNh5GdsOYmgAZaJTfqLfZ74WzjtRqsJJTJOsGDxX29Ys96oz1kmefFTFjATTUgjjrb+ojf/Yk0hidLkwDTV8z2Osia7535sHZAHnGP74OvPWal30KjWjvU+Q1uvVp4YNAmpWhNL/QbLAGvX2nxn/tkyz+S0J3zmOmsSGnN2UuDI4mDe/Ujbl/tOtBL+6ElQNih1mkQt4IdBf1Wi7+KCe61pJSHRtJgpk+033AJroolHxGrF/XZvLdGnc/mrVppuOU04Zk2Ip7Qp+Z91mxUUEoHpxJ9Zxtf2iukBI+2VsM8p8LNNqcdKYvzuR3WcrkzKBsJXn7baQ8IuwXG226GZtzcROPrsZjWkBybbqcQrZlkwufARmHKsXWx42m/tf3rpS1bzz7RcsH2+JqglhsLWJJno90sE//J94axb7aSCz/3KjuP7z7f///DDrd8w1gjVVdaPlk+qusO/xo0bp5/WPW8u1T1+8E+d+fH6T72sbtFUp9rcoNpQbZ9VVV//s+rMqanTTf++6qPfaP3eUKNau84+33Wq6s/6qK6cnTrPA1+y4Queax3W3Ki6dkHXb0eyFe/aeqccq/rLoarP/kh16euW5o6smqO6JcM+/P0Bqn//fPpxb92uOuN/ty6tP+tjr1Vzspu+bsPWrSedhS9k3uZPKx5X/cWutn0fPJW/9aiqzrzL1jPr7q5bZnOj6q+Gq77068zTxeOqv9lT9f7JqrGo6h8OVP2fQar//G/Vqo9smoe/qvq30218LhpqWpeR8OF01VuPUm2q73i+xi2qi/6lGovZ96VvqP7xINV1i3JbfweACk2Tp4r2kAtK8mn8+PFaUZHlaWwdqGuKcuSv/8VRew3kti+P63yGHdHbt1tb9uT7U0uBr/4W3vgz/PeHVhPaVuJxeO0maz/uPSR9qT9Xn7xttaZE6bKr/H60tev/YGlrf9eO5LajrVP4e4vb14660rqF1id24SPWH9NVqlfZWWht73nV1qIXrXYx5ODgCnRpbRZM2IEeKy0is1R1fLvhHjiyd+OzH3LbK4t58sqjOWhYv0+fsB1FtMnacXtt3QOzdgqblltfyaFf6e6U5McT/2UnOFzewe1M3HbJA0cXBI7N9c2ceNMr7Nq3iPsvPYI+xZEuSJ1zO4CmOjv7q6MOYLdd6ihw+AWAOehbEuEXZx3A/FU1nHXL6zz9/irmVG5mfW0jFUs3EI/v+EHYubQKSz1o7ES8xrEV3li0ju89+j4rNqXeWnnXPsX0KSmgqCBMee8iahuj7D6glA9XVzN6SB+KI2FmLdvI8fuW07+0kLgqpYUF9C4uoKggxLraJnYfUEqv4gIioRD9SiOsrWmkJBJmYK9CBpQVEgmHqG+KUVgQIhzaMdpRnXM9U7c0VYnIqcCfgDDwV1W9oc14CcZPBOqAr6rqu5nmFZEBwEPACGApcL6qZnyAQVcHDoCG5hhzV2xm6fo6Pl5Xy+4DSvn3wnXE4kptY5SqmkYi4RCL1tZy4NC+LFxbQ01DlP2G9Gbuig5uF5GFXkUF1DZGCQkM7FVEfVMMVaUoEqaoIERhQYiighBFBfa9KBKiMGzfhw8ooSAIPJGwUBAO8XHVFjbXNzOgVyGDygoZUFZEr+ICwgLhcIhIyKYrCAmxuLK5vpmCsLBL7yLqmmKIQJ/iCPXNMQpCQnNMqWuKsmvfEgaWFVLXFKM5FqeoIMTGumYiYbG0RUKoQlVNAwWhEMURG1ZcEEYE1tU2MrhPMetqG9l7l16oQnVDM03ROP1LCykIW3ricYipUhASCsJCWISq2kaWb6hn1eZ6dh9QSu/iCEUFIfqXFtK31D6rgqLBO8RV0WBZsbgSD97LCguobYoSjcXpX1bIms0NNMeUAWWF1DVFqWuKEYtrS9qLIhbQi8JhSovCRMJWqY/HtWXZ1Q3NrK1upDgSpqwoTGHY9lthge0rEUFVaYzahXgiEBIJXrQ7HTwWV1ZsrCcaj7NbvxKKI/bUyqKCME3RuO3fskIKQkJdc4y6xij9ywpRhWg8TkiEcMh+u4ZojEg4RCQcojEaIxpTSgvDiAjxuNIcj9PQHKcwHKKkMIyqEo0rYRFEIBrXlv9Kc0wpKggRalPAaY7FqWuM0aekoGW5yb97OCREQq3zxeNKTWOUPsUFHZ4KH4sr62obKe9VlLI+DZbbHFOaYnFUld7FEcJBGkMCcSXld12xqZ5eRQX0LcncFK1qyxWhZT8ntq8xGqcs+N0S6UseXxwJZ1x2YruBdr+fqhJX0hYcY3H7/aKxOAXhT9+gtM0Dh4iEgY+Ak4FK7BnkX1TVD5KmmQh8CwschwN/UtXDM80rIjcCG1T1BhG5Duivqj/IlJZ8BI6tkdipNQ3NKHYDhfqmGDWNUeqbYvQvK+ST9XU0RGM0R+NsrGuivHcRTdE462qbWF/bxMa6Jgb1KqQxGmdtdSOlRWHCIjRG4zRGYzRG4zRF463fm+M0xeLUN8VYtqEOVaUkEiYaV5qicQb3KWbXvsVs2NLE+tpGqhs6ePaI2yqJjCmX6csKC6hrjqVkNummSwSTeJB5JxSGQzTF4oi03p8xJBYgE98jYSEa1w7v0t2vNEJtQ5Ro3DJGof129C2JtGTqheEQoRA0NKeuN5GeSFhaMtH6YNvCIUt7R2kQgUgo1LJ9pYX2X7ft0JbtUZRozKYpiYSJhIW4QlMsTnMs3m75Ipb26vpmCsIhmqLxlt+9KGI1fwm+J/LHxCKKI2E7bptjNDTHWn6TcEgoiYQpLQyzqd4KOFZgC9EYi7d8D4eE+uZYSlCKq7YEz3hS4SWhd1EBJYVhGqNxGppjLQWK3kUFdlJXSYRNdXZ34trGKMWREA3NcQb1KqQwHOKm88dy5F5JF2TmoKPAkc8LACcAi1R1SZCAB4FJwAdJ00wC7gnOF35LRPqJyBCsNtHRvJOA44P57wZeBjIGjp4iUULondSp3rs4QvIdsIb2a3Orki7UHIsjkLEkkigNxlSJxuNEY4kSW5xwSOhTHKExGmddbSO9igqIxpWahmbKigpaMoOSSJjV1Q1s3NJEaWEB4ZCVZAeWFRKNK43NFtRUobx3EXFVGoJhDc1xYvE4A8qKWLW5noFlRSxZV0skHKJPcYTCghAbtjRaiUuEUEgIhyAWh2gsTnNcGVhWyPD+pezat5jFVbU0BcF0U30zm+qaaI7ZQZnIENuW6MOhYLki1DZGW2pxNQ1RBvay5sLN9c2UFRZYZhaSlIPatjFGfZN9D4WC5YrV3koiIYb0K6EhmKYp1hrsG5pj1DREKSsKU1ZUgJDIXK2UGQ/e7bt9FmCPgaVEwiGWb6inrjlK35IIDU0xigvD9CmOsLa6AUToVRSmJBJm5eaGllqD1dws4y2OhGmMxlhX20if4gh9SyJsaYwSVygIC5EgM2yKxVm1qYGQwKBeRdQ2RYnFlL4lEZpjts2FBZYpNzRbBp5QEgm33HW6IPitE+8hsZqA/e9sfwqWOa6taSSuiiAp+06CGtPg3kV8sqGeuCohESIFYrW5cIhIgdWaRYTNdU2s39JE/9JCqw1HrOZU2xilrjHGqMG92NIYo7rBMuPkcn1DcJfs4oIwxZEwxRE7luqbY9Q1xVpqUgN7FbGxrommaJyiApuuvjlGc1TpU1LAhi1NQfpt6eGQbYPV/lr/23GFmoZm6ptiFBUkauYWvDbXN6NqrQD9y+w04t7FEeoao5QWFVBVY7Xj/mVdfxJPPgPHUCD5KSyVWK2is2mGdjLvYFVdBaCqq0Qkw50HXbJIFlXXSDhE39LOp9u1b4bnTAPDB3Td9RzHjNr66wLKe3fBtR3OuRT5PKsqXWNk20ppR9NkM2/mlYtcJiIVIlJRVZXh8ZbOOedyks/AUQkk31ltGLAyy2kyzbsmaM4ieE/zkGVQ1TtUdbyqji8v9wvTnHOuq+QzcMwERonISBEpBCYD09pMMw34ipgjgM1BM1SmeacBFwefLwaezOM2OOecayNvfRyqGhWRq4DnsFNqp6rqPBG5Ihg/BZiOnVG1CDsd92uZ5g0WfQPwsIhcAnwCnJevbXDOOdeeXwDonHMuLb/liHPOuS7hgcM551xOPHA455zLyU7RxyEiVcCyrZx9ELCuC5PTnXxbep4dZTvAt6Wn+jTbsoeqtrueYacIHJ+GiFSk6xzaHvm29Dw7ynaAb0tPlY9t8aYq55xzOfHA4ZxzLiceODp3R3cnoAv5tvQ8O8p2gG9LT9Xl2+J9HM4553LiNQ7nnHM58cDhnHMuJx44MhCRU0VkgYgsCh5Tu90QkaUiMkdEZotIRTBsgIi8ICILg/f+3Z3OdERkqoisFZG5ScM6TLuI/DDYRwtE5HPdk+r0OtiW60VkRbBvZgePUE6M65HbIiLDReQlEZkvIvNE5NvB8O1uv2TYlu1xvxSLyDsi8l6wLT8Phud3v2jwWEp/pb6wu/IuBvYECoH3gNHdna4c0r8UGNRm2I3AdcHn64DfdHc6O0j7ccChwNzO0g6MDvZNETAy2Gfh7t6GTrbleuC7aabtsdsCDAEODT73Bj4K0rvd7ZcM27I97hcBegWfI8DbwBH53i9e4+hYyzPTVbUJSDz3fHs2CXtOO8H7Wd2XlI6p6qvAhjaDO0r7JOBBVW1U1Y+xW/RP2BbpzEYH29KRHrstqrpKVd8NPtcA87FHPG93+yXDtnSkJ2+Lqmpt8DUSvJQ87xcPHB3r6Hno2wsFnheRWSJyWTAs5XntwPb0vPaO0r697qerROT9oCkr0YywXWyLiIwADsFKt9v1fmmzLbAd7hcRCYvIbOxpqC+oat73iweOjn3q5553s6NV9VDgNOBKETmuuxOUJ9vjfroN2AsYC6wCbgqG9/htEZFewGPANapanWnSNMN6+rZsl/tFVWOqOhZ7xPYEETkgw+Rdsi0eODqWzTPTeyxVXRm8rwWewKqjWT2vvYfqKO3b3X5S1TXBwR4H7qS1qaBHb4uIRLCM9j5VfTwYvF3ul3Tbsr3ulwRV3QS8DJxKnveLB46OZfPM9B5JRMpEpHfiM3AKMJft+3ntHaV9GjBZRIpEZCQwCninG9KXtcQBHTgb2zfQg7dFRAS4C5ivqr9PGrXd7ZeOtmU73S/lItIv+FwCnAR8SL73S3efFdCTX9jz0D/Czjz4cXenJ4d074mdOfEeMC+RdmAgMANYGLwP6O60dpD+B7CmgmashHRJprQDPw720QLgtO5Ofxbb8n/AHOD94EAe0tO3BTgGa9J4H5gdvCZuj/slw7Zsj/vlIOA/QZrnAj8Nhud1v/gtR5xzzuXEm6qcc87lxAOHc865nHjgcM45lxMPHM4553LigcM551xOPHA418OJyPEi8s/uTodzCR44nHPO5cQDh3NdRES+HDwbYbaI3B7cfK5WRG4SkXdFZIaIlAfTjhWRt4Ib6j2RuKGeiOwtIi8Gz1d4V0T2ChbfS0QeFZEPReS+4Opn57qFBw7nuoCI7A9cgN1cciwQAy4EyoB31W44+Qrws2CWe4AfqOpB2NXKieH3Abeo6sHAUdhV52B3cL0Ge57CnsDRed4k5zpU0N0JcG4HcSIwDpgZVAZKsBvLxYGHgmnuBR4Xkb5AP1V9JRh+N/BIcH+xoar6BICqNgAEy3tHVSuD77OBEcBred8q59LwwOFc1xDgblX9YcpAkZ+0mS7TPX4yNT81Jn2O4ceu60beVOVc15gBnCsiu0DLM5/3wI6xc4NpvgS8pqqbgY0icmww/CLgFbVnQlSKyFnBMopEpHRbboRz2fBSi3NdQFU/EJH/hz11MYTdDfdKYAswRkRmAZuxfhCwW11PCQLDEuBrwfCLgNtF5H+CZZy3DTfDuaz43XGdyyMRqVXVXt2dDue6kjdVOeecy4nXOJxzzuXEaxzOOedy4oHDOedcTjxwOOecy4kHDueccznxwOGccy4n/x8nCn5j0hwbZQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Train Score: 26.21 RMSE\n", "Train R^2: 0.8615236280628619\n", "Test Score: 43.51 RMSE\n", "Test R^2: 0.6822753881553338\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Try more nodes in the LSTM\n", "# Using Early stopping \n", "\n", "# reshape into X=t and Y=t+1\n", "look_back = 3\n", "trainX, trainY = create_dataset(train, look_back)\n", "testX, testY = create_dataset(test, look_back)\n", "\n", "# reshape input to be [samples, time steps, features]\n", "trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n", "testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))\n", "print('trainX.shape: ',trainX.shape)\n", "print('trainY.shape: ',trainY.shape)\n", "print('trainX[:5]: ', trainX[:5].flatten())\n", "print('trainY[:5]: ', trainY[:5])\n", "\n", "es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=100)\n", "mc = ModelCheckpoint('./models/best_model_LSTM.h5', monitor='val_loss', mode='min', verbose=1, save_best_only=True)\n", "\n", "if 'model' in globals():\n", " print('Deleting \"model\"')\n", " del model\n", "model = Sequential()\n", "model.add(LSTM(8, batch_input_shape=(batch_size,1,look_back), return_sequences=True))\n", "model.add(LSTM(8, batch_input_shape=(batch_size, 1,look_back)))\n", "model.add(Dense(1))\n", "\n", "start_time = time.time()\n", "# Compile the model\n", "model.compile(loss='mean_squared_error', optimizer='adam')\n", "\n", "# Fit the model\n", "history = model.fit(trainX, trainY, epochs=1000, batch_size=1, verbose=0, validation_data=(testX, testY),callbacks=[es, mc])\n", "# list all data in history\n", "print('keys: ',history.history.keys())\n", "print(\"--- Elapsed time: %s seconds ---\" % (time.time() - start_time))\n", "\n", "# load the saved model\n", "model = load_model('./models/best_model_LSTM.h5')\n", "\n", "plot_hist(history)\n", "\n", "# make predictions\n", "trainPredict = model.predict(trainX, batch_size=batch_size) #Now we need to specify the batch_size \n", "model.reset_states()\n", "testPredict = model.predict(testX, batch_size=batch_size)\n", "# invert predictions\n", "trainPredict = scaler.inverse_transform(trainPredict)\n", "trainY = scaler.inverse_transform([trainY])\n", "testPredict = scaler.inverse_transform(testPredict)\n", "testY = scaler.inverse_transform([testY])\n", "# calculate root mean squared error\n", "trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))\n", "print('Train Score: %.2f RMSE' % (trainScore))\n", "print('Train R^2: ', r2_score(trainY[0], trainPredict[:,0]))\n", "testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))\n", "print('Test Score: %.2f RMSE' % (testScore))\n", "print('Test R^2: ', r2_score(testY[0], testPredict[:,0]))\n", "\n", "# shift train predictions for plotting\n", "trainPredictPlot = numpy.empty_like(dataset)\n", "trainPredictPlot[:, :] = numpy.nan\n", "trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict\n", "# shift test predictions for plotting\n", "testPredictPlot = numpy.empty_like(dataset)\n", "testPredictPlot[:, :] = numpy.nan\n", "testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict\n", "# plot baseline and predictions\n", "plt.plot(scaler.inverse_transform(dataset))\n", "plt.plot(trainPredictPlot)\n", "plt.plot(testPredictPlot)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 18, "id": "749ad3fc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "trainX.shape: (92, 1, 3)\n", "trainY.shape: (92,)\n", "trainX[:5]: [0.01544401 0.02702703 0.05405405 0.02702703 0.05405405 0.04826255\n", " 0.05405405 0.04826255 0.03281853 0.04826255 0.03281853 0.05984557\n", " 0.03281853 0.05984557 0.08494207]\n", "trainY[:5]: [0.04826255 0.03281853 0.05984557 0.08494207 0.08494207]\n", "Deleting \"model\"\n", "\n", "Epoch 00001: val_loss improved from inf to 0.25496, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00002: val_loss improved from 0.25496 to 0.14877, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00003: val_loss improved from 0.14877 to 0.11585, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00004: val_loss improved from 0.11585 to 0.08729, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00005: val_loss improved from 0.08729 to 0.08058, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00006: val_loss improved from 0.08058 to 0.03734, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00007: val_loss improved from 0.03734 to 0.02527, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00008: val_loss improved from 0.02527 to 0.02019, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00009: val_loss improved from 0.02019 to 0.01810, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00010: val_loss did not improve from 0.01810\n", "\n", "Epoch 00011: val_loss did not improve from 0.01810\n", "\n", "Epoch 00012: val_loss improved from 0.01810 to 0.01611, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00013: val_loss did not improve from 0.01611\n", "\n", "Epoch 00014: val_loss did not improve from 0.01611\n", "\n", "Epoch 00015: val_loss did not improve from 0.01611\n", "\n", "Epoch 00016: val_loss did not improve from 0.01611\n", "\n", "Epoch 00017: val_loss did not improve from 0.01611\n", "\n", "Epoch 00018: val_loss did not improve from 0.01611\n", "\n", "Epoch 00019: val_loss did not improve from 0.01611\n", "\n", "Epoch 00020: val_loss did not improve from 0.01611\n", "\n", "Epoch 00021: val_loss did not improve from 0.01611\n", "\n", "Epoch 00022: val_loss did not improve from 0.01611\n", "\n", "Epoch 00023: val_loss did not improve from 0.01611\n", "\n", "Epoch 00024: val_loss did not improve from 0.01611\n", "\n", "Epoch 00025: val_loss did not improve from 0.01611\n", "\n", "Epoch 00026: val_loss did not improve from 0.01611\n", "\n", "Epoch 00027: val_loss did not improve from 0.01611\n", "\n", "Epoch 00028: val_loss did not improve from 0.01611\n", "\n", "Epoch 00029: val_loss did not improve from 0.01611\n", "\n", "Epoch 00030: val_loss did not improve from 0.01611\n", "\n", "Epoch 00031: val_loss did not improve from 0.01611\n", "\n", "Epoch 00032: val_loss did not improve from 0.01611\n", "\n", "Epoch 00033: val_loss did not improve from 0.01611\n", "\n", "Epoch 00034: val_loss did not improve from 0.01611\n", "\n", "Epoch 00035: val_loss did not improve from 0.01611\n", "\n", "Epoch 00036: val_loss did not improve from 0.01611\n", "\n", "Epoch 00037: val_loss did not improve from 0.01611\n", "\n", "Epoch 00038: val_loss did not improve from 0.01611\n", "\n", "Epoch 00039: val_loss did not improve from 0.01611\n", "\n", "Epoch 00040: val_loss did not improve from 0.01611\n", "\n", "Epoch 00041: val_loss did not improve from 0.01611\n", "\n", "Epoch 00042: val_loss did not improve from 0.01611\n", "\n", "Epoch 00043: val_loss did not improve from 0.01611\n", "\n", "Epoch 00044: val_loss did not improve from 0.01611\n", "\n", "Epoch 00045: val_loss did not improve from 0.01611\n", "\n", "Epoch 00046: val_loss did not improve from 0.01611\n", "\n", "Epoch 00047: val_loss did not improve from 0.01611\n", "\n", "Epoch 00048: val_loss did not improve from 0.01611\n", "\n", "Epoch 00049: val_loss did not improve from 0.01611\n", "\n", "Epoch 00050: val_loss did not improve from 0.01611\n", "\n", "Epoch 00051: val_loss did not improve from 0.01611\n", "\n", "Epoch 00052: val_loss did not improve from 0.01611\n", "\n", "Epoch 00053: val_loss did not improve from 0.01611\n", "\n", "Epoch 00054: val_loss did not improve from 0.01611\n", "\n", "Epoch 00055: val_loss did not improve from 0.01611\n", "\n", "Epoch 00056: val_loss improved from 0.01611 to 0.01599, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00057: val_loss did not improve from 0.01599\n", "\n", "Epoch 00058: val_loss did not improve from 0.01599\n", "\n", "Epoch 00059: val_loss did not improve from 0.01599\n", "\n", "Epoch 00060: val_loss did not improve from 0.01599\n", "\n", "Epoch 00061: val_loss did not improve from 0.01599\n", "\n", "Epoch 00062: val_loss did not improve from 0.01599\n", "\n", "Epoch 00063: val_loss did not improve from 0.01599\n", "\n", "Epoch 00064: val_loss did not improve from 0.01599\n", "\n", "Epoch 00065: val_loss did not improve from 0.01599\n", "\n", "Epoch 00066: val_loss did not improve from 0.01599\n", "\n", "Epoch 00067: val_loss did not improve from 0.01599\n", "\n", "Epoch 00068: val_loss did not improve from 0.01599\n", "\n", "Epoch 00069: val_loss did not improve from 0.01599\n", "\n", "Epoch 00070: val_loss improved from 0.01599 to 0.01481, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00071: val_loss did not improve from 0.01481\n", "\n", "Epoch 00072: val_loss did not improve from 0.01481\n", "\n", "Epoch 00073: val_loss did not improve from 0.01481\n", "\n", "Epoch 00074: val_loss did not improve from 0.01481\n", "\n", "Epoch 00075: val_loss did not improve from 0.01481\n", "\n", "Epoch 00076: val_loss did not improve from 0.01481\n", "\n", "Epoch 00077: val_loss did not improve from 0.01481\n", "\n", "Epoch 00078: val_loss did not improve from 0.01481\n", "\n", "Epoch 00079: val_loss did not improve from 0.01481\n", "\n", "Epoch 00080: val_loss did not improve from 0.01481\n", "\n", "Epoch 00081: val_loss improved from 0.01481 to 0.01380, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00082: val_loss did not improve from 0.01380\n", "\n", "Epoch 00083: val_loss did not improve from 0.01380\n", "\n", "Epoch 00084: val_loss did not improve from 0.01380\n", "\n", "Epoch 00085: val_loss did not improve from 0.01380\n", "\n", "Epoch 00086: val_loss did not improve from 0.01380\n", "\n", "Epoch 00087: val_loss did not improve from 0.01380\n", "\n", "Epoch 00088: val_loss did not improve from 0.01380\n", "\n", "Epoch 00089: val_loss did not improve from 0.01380\n", "\n", "Epoch 00090: val_loss did not improve from 0.01380\n", "\n", "Epoch 00091: val_loss did not improve from 0.01380\n", "\n", "Epoch 00092: val_loss did not improve from 0.01380\n", "\n", "Epoch 00093: val_loss did not improve from 0.01380\n", "\n", "Epoch 00094: val_loss did not improve from 0.01380\n", "\n", "Epoch 00095: val_loss did not improve from 0.01380\n", "\n", "Epoch 00096: val_loss did not improve from 0.01380\n", "\n", "Epoch 00097: val_loss did not improve from 0.01380\n", "\n", "Epoch 00098: val_loss improved from 0.01380 to 0.01308, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00099: val_loss did not improve from 0.01308\n", "\n", "Epoch 00100: val_loss did not improve from 0.01308\n", "\n", "Epoch 00101: val_loss did not improve from 0.01308\n", "\n", "Epoch 00102: val_loss did not improve from 0.01308\n", "\n", "Epoch 00103: val_loss did not improve from 0.01308\n", "\n", "Epoch 00104: val_loss did not improve from 0.01308\n", "\n", "Epoch 00105: val_loss did not improve from 0.01308\n", "\n", "Epoch 00106: val_loss did not improve from 0.01308\n", "\n", "Epoch 00107: val_loss did not improve from 0.01308\n", "\n", "Epoch 00108: val_loss did not improve from 0.01308\n", "\n", "Epoch 00109: val_loss improved from 0.01308 to 0.01294, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00110: val_loss did not improve from 0.01294\n", "\n", "Epoch 00111: val_loss did not improve from 0.01294\n", "\n", "Epoch 00112: val_loss did not improve from 0.01294\n", "\n", "Epoch 00113: val_loss did not improve from 0.01294\n", "\n", "Epoch 00114: val_loss did not improve from 0.01294\n", "\n", "Epoch 00115: val_loss did not improve from 0.01294\n", "\n", "Epoch 00116: val_loss did not improve from 0.01294\n", "\n", "Epoch 00117: val_loss improved from 0.01294 to 0.01251, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00118: val_loss did not improve from 0.01251\n", "\n", "Epoch 00119: val_loss did not improve from 0.01251\n", "\n", "Epoch 00120: val_loss did not improve from 0.01251\n", "\n", "Epoch 00121: val_loss improved from 0.01251 to 0.00854, saving model to ./models/best_model_LSTM.h5\n", "\n", "Epoch 00122: val_loss did not improve from 0.00854\n", "\n", "Epoch 00123: val_loss did not improve from 0.00854\n", "\n", "Epoch 00124: val_loss did not improve from 0.00854\n", "\n", "Epoch 00125: val_loss did not improve from 0.00854\n", "\n", "Epoch 00126: val_loss did not improve from 0.00854\n", "\n", "Epoch 00127: val_loss did not improve from 0.00854\n", "\n", "Epoch 00128: val_loss did not improve from 0.00854\n", "\n", "Epoch 00129: val_loss did not improve from 0.00854\n", "\n", "Epoch 00130: val_loss did not improve from 0.00854\n", "\n", "Epoch 00131: val_loss did not improve from 0.00854\n", "\n", "Epoch 00132: val_loss did not improve from 0.00854\n", "\n", "Epoch 00133: val_loss did not improve from 0.00854\n", "\n", "Epoch 00134: val_loss did not improve from 0.00854\n", "\n", "Epoch 00135: val_loss did not improve from 0.00854\n", "\n", "Epoch 00136: val_loss did not improve from 0.00854\n", "\n", "Epoch 00137: val_loss did not improve from 0.00854\n", "\n", "Epoch 00138: val_loss did not improve from 0.00854\n", "\n", "Epoch 00139: val_loss did not improve from 0.00854\n", "\n", "Epoch 00140: val_loss did not improve from 0.00854\n", "\n", "Epoch 00141: val_loss did not improve from 0.00854\n", "\n", "Epoch 00142: val_loss did not improve from 0.00854\n", "\n", "Epoch 00143: val_loss did not improve from 0.00854\n", "\n", "Epoch 00144: val_loss did not improve from 0.00854\n", "\n", "Epoch 00145: val_loss did not improve from 0.00854\n", "\n", "Epoch 00146: val_loss did not improve from 0.00854\n", "\n", "Epoch 00147: val_loss did not improve from 0.00854\n", "\n", "Epoch 00148: val_loss did not improve from 0.00854\n", "\n", "Epoch 00149: val_loss did not improve from 0.00854\n", "\n", "Epoch 00150: val_loss did not improve from 0.00854\n", "\n", "Epoch 00151: val_loss did not improve from 0.00854\n", "\n", "Epoch 00152: val_loss did not improve from 0.00854\n", "\n", "Epoch 00153: val_loss did not improve from 0.00854\n", "\n", "Epoch 00154: val_loss did not improve from 0.00854\n", "\n", "Epoch 00155: val_loss did not improve from 0.00854\n", "\n", "Epoch 00156: val_loss did not improve from 0.00854\n", "\n", "Epoch 00157: val_loss did not improve from 0.00854\n", "\n", "Epoch 00158: val_loss did not improve from 0.00854\n", "\n", "Epoch 00159: val_loss did not improve from 0.00854\n", "\n", "Epoch 00160: val_loss did not improve from 0.00854\n", "\n", "Epoch 00161: val_loss did not improve from 0.00854\n", "\n", "Epoch 00162: val_loss did not improve from 0.00854\n", "\n", "Epoch 00163: val_loss did not improve from 0.00854\n", "\n", "Epoch 00164: val_loss did not improve from 0.00854\n", "\n", "Epoch 00165: val_loss did not improve from 0.00854\n", "\n", "Epoch 00166: val_loss did not improve from 0.00854\n", "\n", "Epoch 00167: val_loss did not improve from 0.00854\n", "\n", "Epoch 00168: val_loss did not improve from 0.00854\n", "\n", "Epoch 00169: val_loss did not improve from 0.00854\n", "\n", "Epoch 00170: val_loss did not improve from 0.00854\n", "\n", "Epoch 00171: val_loss did not improve from 0.00854\n", "\n", "Epoch 00172: val_loss did not improve from 0.00854\n", "\n", "Epoch 00173: val_loss did not improve from 0.00854\n", "\n", "Epoch 00174: val_loss did not improve from 0.00854\n", "\n", "Epoch 00175: val_loss did not improve from 0.00854\n", "\n", "Epoch 00176: val_loss did not improve from 0.00854\n", "\n", "Epoch 00177: val_loss did not improve from 0.00854\n", "\n", "Epoch 00178: val_loss did not improve from 0.00854\n", "\n", "Epoch 00179: val_loss did not improve from 0.00854\n", "\n", "Epoch 00180: val_loss did not improve from 0.00854\n", "\n", "Epoch 00181: val_loss did not improve from 0.00854\n", "\n", "Epoch 00182: val_loss did not improve from 0.00854\n", "\n", "Epoch 00183: val_loss did not improve from 0.00854\n", "\n", "Epoch 00184: val_loss did not improve from 0.00854\n", "\n", "Epoch 00185: val_loss did not improve from 0.00854\n", "\n", "Epoch 00186: val_loss did not improve from 0.00854\n", "\n", "Epoch 00187: val_loss did not improve from 0.00854\n", "\n", "Epoch 00188: val_loss did not improve from 0.00854\n", "\n", "Epoch 00189: val_loss did not improve from 0.00854\n", "\n", "Epoch 00190: val_loss did not improve from 0.00854\n", "\n", "Epoch 00191: val_loss did not improve from 0.00854\n", "\n", "Epoch 00192: val_loss did not improve from 0.00854\n", "\n", "Epoch 00193: val_loss did not improve from 0.00854\n", "\n", "Epoch 00194: val_loss did not improve from 0.00854\n", "\n", "Epoch 00195: val_loss did not improve from 0.00854\n", "\n", "Epoch 00196: val_loss did not improve from 0.00854\n", "\n", "Epoch 00197: val_loss did not improve from 0.00854\n", "\n", "Epoch 00198: val_loss did not improve from 0.00854\n", "\n", "Epoch 00199: val_loss did not improve from 0.00854\n", "\n", "Epoch 00200: val_loss did not improve from 0.00854\n", "\n", "Epoch 00201: val_loss did not improve from 0.00854\n", "\n", "Epoch 00202: val_loss did not improve from 0.00854\n", "\n", "Epoch 00203: val_loss did not improve from 0.00854\n", "\n", "Epoch 00204: val_loss did not improve from 0.00854\n", "\n", "Epoch 00205: val_loss did not improve from 0.00854\n", "\n", "Epoch 00206: val_loss did not improve from 0.00854\n", "\n", "Epoch 00207: val_loss did not improve from 0.00854\n", "\n", "Epoch 00208: val_loss did not improve from 0.00854\n", "\n", "Epoch 00209: val_loss did not improve from 0.00854\n", "\n", "Epoch 00210: val_loss did not improve from 0.00854\n", "\n", "Epoch 00211: val_loss did not improve from 0.00854\n", "\n", "Epoch 00212: val_loss did not improve from 0.00854\n", "\n", "Epoch 00213: val_loss did not improve from 0.00854\n", "\n", "Epoch 00214: val_loss did not improve from 0.00854\n", "\n", "Epoch 00215: val_loss did not improve from 0.00854\n", "\n", "Epoch 00216: val_loss did not improve from 0.00854\n", "\n", "Epoch 00217: val_loss did not improve from 0.00854\n", "\n", "Epoch 00218: val_loss did not improve from 0.00854\n", "\n", "Epoch 00219: val_loss did not improve from 0.00854\n", "\n", "Epoch 00220: val_loss did not improve from 0.00854\n", "\n", "Epoch 00221: val_loss did not improve from 0.00854\n", "Epoch 00221: early stopping\n", "keys: dict_keys(['loss', 'val_loss'])\n", "--- Elapsed time: 85.25104475021362 seconds ---\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Train Score: 30.65 RMSE\n", "Train R^2: 0.8105941682722654\n", "Test Score: 47.88 RMSE\n", "Test R^2: 0.615250920793732\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# More layers\n", "# Try more nodes in the LSTM\n", "# Using Early stopping \n", "\n", "# reshape into X=t and Y=t+1\n", "look_back = 3\n", "trainX, trainY = create_dataset(train, look_back)\n", "testX, testY = create_dataset(test, look_back)\n", "\n", "# reshape input to be [samples, time steps, features]\n", "trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n", "testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))\n", "print('trainX.shape: ',trainX.shape)\n", "print('trainY.shape: ',trainY.shape)\n", "print('trainX[:5]: ', trainX[:5].flatten())\n", "print('trainY[:5]: ', trainY[:5])\n", "\n", "es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=100)\n", "mc = ModelCheckpoint('./models/best_model_LSTM.h5', monitor='val_loss', mode='min', verbose=1, save_best_only=True)\n", "\n", "if 'model' in globals():\n", " print('Deleting \"model\"')\n", " del model\n", "model = Sequential()\n", "model.add(LSTM(8, batch_input_shape=(batch_size,1,look_back), return_sequences=True))\n", "model.add(LSTM(8, batch_input_shape=(batch_size, 1,look_back),return_sequences=True))\n", "model.add(LSTM(8, batch_input_shape=(batch_size, 1,look_back)))\n", "model.add(Dense(1))\n", "\n", "start_time = time.time()\n", "# Compile the model\n", "model.compile(loss='mean_squared_error', optimizer='adam')\n", "\n", "# Fit the model\n", "history = model.fit(trainX, trainY, epochs=1000, batch_size=1, verbose=0, validation_data=(testX, testY),callbacks=[es, mc])\n", "# list all data in history\n", "print('keys: ',history.history.keys())\n", "print(\"--- Elapsed time: %s seconds ---\" % (time.time() - start_time))\n", "\n", "# load the saved model\n", "model = load_model('./models/best_model_LSTM.h5')\n", "\n", "plot_hist(history)\n", "\n", "# make predictions\n", "trainPredict = model.predict(trainX, batch_size=batch_size) #Now we need to specify the batch_size \n", "model.reset_states()\n", "testPredict = model.predict(testX, batch_size=batch_size)\n", "# invert predictions\n", "trainPredict = scaler.inverse_transform(trainPredict)\n", "trainY = scaler.inverse_transform([trainY])\n", "testPredict = scaler.inverse_transform(testPredict)\n", "testY = scaler.inverse_transform([testY])\n", "# calculate root mean squared error\n", "trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))\n", "print('Train Score: %.2f RMSE' % (trainScore))\n", "print('Train R^2: ', r2_score(trainY[0], trainPredict[:,0]))\n", "testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))\n", "print('Test Score: %.2f RMSE' % (testScore))\n", "print('Test R^2: ', r2_score(testY[0], testPredict[:,0]))\n", "\n", "# shift train predictions for plotting\n", "trainPredictPlot = numpy.empty_like(dataset)\n", "trainPredictPlot[:, :] = numpy.nan\n", "trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict\n", "# shift test predictions for plotting\n", "testPredictPlot = numpy.empty_like(dataset)\n", "testPredictPlot[:, :] = numpy.nan\n", "testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict\n", "# plot baseline and predictions\n", "plt.plot(scaler.inverse_transform(dataset))\n", "plt.plot(trainPredictPlot)\n", "plt.plot(testPredictPlot)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "05371e55", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.5" } }, "nbformat": 4, "nbformat_minor": 5 }