{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"authorship_tag": "ABX9TyOc5/oQ0Z2ie5dOI46PpyV0",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"gpuClass": "standard",
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"
"
]
},
{
"cell_type": "code",
"source": [
"from google.colab import drive\n",
"drive.mount('/content/drive')\n",
"project_path = '/content/drive/MyDrive/projects/Stock_Predicter'\n",
"%cd $project_path"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Xr3Qozgfktoc",
"outputId": "b4ce9a19-4dc1-43e9-b09e-af91a2b07343"
},
"execution_count": 90,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n",
"/content/drive/MyDrive/projects/Stock_Predicter\n"
]
}
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {
"id": "e8SQqogMQYLh"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import pandas_datareader as web\n",
"import datetime as dt\n",
"import yfinance as yfin\n",
"import tensorflow as tf\n",
"import os\n",
"import re\n",
"\n",
"from sklearn.preprocessing import MinMaxScaler\n",
"from tensorflow.keras.models import Sequential\n",
"from tensorflow.keras.layers import Dense, Dropout, LSTM\n"
]
},
{
"cell_type": "markdown",
"source": [
"# Get Data"
],
"metadata": {
"id": "5vO8pty3VwkG"
}
},
{
"cell_type": "code",
"source": [
"# Select a company for now\n",
"ticker = 'AAPL'\n",
"\n",
"start = dt.datetime(2013,1,1)\n",
"end = dt.datetime(2023,4,5)"
],
"metadata": {
"id": "O6dtJpJwS5Eg"
},
"execution_count": 92,
"outputs": []
},
{
"cell_type": "code",
"source": [
"yfin.pdr_override()\n",
"data = web.data.get_data_yahoo(ticker, start, end)\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "LwPyk8Uh-Zz_",
"outputId": "2217df50-87e9-48e3-e096-71163331f570"
},
"execution_count": 93,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\r[*********************100%***********************] 1 of 1 completed\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# Preprocess_data"
],
"metadata": {
"id": "SSuS9OONV5-a"
}
},
{
"cell_type": "code",
"source": [
"def create_remove_columns(data):\n",
" # create jump column\n",
" data = pd.DataFrame.copy(data)\n",
" data['Jump'] = data['Open'] - data['Close'].shift(1)\n",
" data['Jump'].fillna(0, inplace=True)\n",
" # data = data.reindex(columns=['Open', 'High', 'Low', 'Close', 'Adj Close', 'Jump'])\n",
" data.insert(0,'Jump', data.pop('Jump'))\n",
" return data"
],
"metadata": {
"id": "Bpym8x-Kxf0p"
},
"execution_count": 94,
"outputs": []
},
{
"cell_type": "code",
"source": [
"def normalize_data(data, scaler=None):\n",
" the_data = pd.DataFrame.copy(data)\n",
" # substract the open value to all columns but the first one and the last one which are \"Jump\" and \"Volume\"\n",
" the_data.iloc[:, 1:-1] = the_data.iloc[:,1:-1] - the_data['Open'].values[:, np.newaxis]\n",
" # print('the_data')\n",
" # print(the_data)\n",
"\n",
" the_data.pop('Open')\n",
" # todo save an csv with the values for the scaler\n",
" if scaler is None:\n",
" # Create the scaler\n",
" values = np.abs(the_data.values)\n",
" max_value = np.max(values[:,:-1])\n",
" max_volume = np.max(values[:,-1])\n",
" def scaler(d):\n",
" data = pd.DataFrame.copy(d)\n",
" print('max_value: ', max_value)\n",
" print('max_volume: ', max_volume)\n",
" data.iloc[:, :-1] = data.iloc[:,:-1].apply(lambda x: x/max_value)\n",
" data.iloc[:, -1] = data.iloc[:,-1].apply(lambda x: x/max_volume)\n",
" return data\n",
" def decoder(values):\n",
" decoded_values = values * max_value\n",
" return decoded_values\n",
" else:\n",
" decoder = None\n",
" \n",
" normalized_data = scaler(the_data)\n",
"\n",
" return normalized_data, scaler, decoder\n",
"\n",
"\n"
],
"metadata": {
"id": "v9RoqzBvtrOb"
},
"execution_count": 95,
"outputs": []
},
{
"cell_type": "code",
"source": [
"def create_training_data(norm_data):\n",
" prediction_days = 500\n",
" \n",
" x_train_list = []\n",
" y_train_list = []\n",
" \n",
" for i in range(prediction_days, len(norm_data)):\n",
" x_train_list.append(norm_data[i-prediction_days:i])\n",
" y_train_list.append(norm_data.iloc[i].values[0:4])\n",
" \n",
" x_train = np.array(x_train_list)\n",
" y_train = np.array(y_train_list)\n",
" return x_train, y_train"
],
"metadata": {
"id": "jMXkRAYFomHM"
},
"execution_count": 96,
"outputs": []
},
{
"cell_type": "code",
"source": [
"#Make all the preprocesing\n",
"def preprocessing(data, scaler=None):\n",
" # print(data.head(3))\n",
" data_0 = create_remove_columns(data)\n",
" # print(data_0.head(3))\n",
" #todo: save the_scaler somehow to use in new runtimes\n",
" norm_data, scaler, decoder = normalize_data(data_0, scaler=scaler)\n",
" # print(norm_data.head(3))\n",
" x_train, y_train = create_training_data(norm_data)\n",
" # print(x_train.shape, y_train.shape)\n",
" return x_train, y_train, scaler, decoder"
],
"metadata": {
"id": "YZWMfusT-I7Z"
},
"execution_count": 97,
"outputs": []
},
{
"cell_type": "code",
"source": [
"x_train, y_train, scaler, decoder = preprocessing(data)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "PeJjDC0VBG_6",
"outputId": "aff2cf0b-e630-4727-bbec-3cf5be4e53a0"
},
"execution_count": 98,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"max_value: 10.589996337890625\n",
"max_volume: 1460852400.0\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"print(x_train.shape)\n",
"x_train[1,499,:]"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "YkI8vSguuS8A",
"outputId": "6e5eeaa2-12de-4dd2-b17c-1d61e415fbd8"
},
"execution_count": 99,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"(2082, 500, 6)\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([ 0.00212456, 0.05712934, -0.00212456, 0.04461756, -0.22778379,\n",
" 0.09233239])"
]
},
"metadata": {},
"execution_count": 99
}
]
},
{
"cell_type": "code",
"source": [
"td = data.iloc[498:501]\n",
"# print('td:\\n',td)\n",
"td0 = create_remove_columns(td)\n",
"print('td0:\\n',td0)\n",
"print(decoder(y_train[0]))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "QaO34uSds2wJ",
"outputId": "af5d9a04-214c-4a2d-c706-5af3a2a1ea5a"
},
"execution_count": 100,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"td0:\n",
" Jump Open High Low Close Adj Close \\\n",
"Date \n",
"2014-12-23 0.000000 28.307501 28.332500 28.115000 28.135000 25.286961 \n",
"2014-12-24 0.010000 28.145000 28.177500 28.002501 28.002501 25.167873 \n",
"2014-12-26 0.022499 28.025000 28.629999 28.002501 28.497499 25.612770 \n",
"\n",
" Volume \n",
"Date \n",
"2014-12-23 104113600 \n",
"2014-12-24 57918400 \n",
"2014-12-26 134884000 \n",
"[ 0.02249908 0.60499954 -0.02249908 0.47249985]\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# Model"
],
"metadata": {
"id": "Z3N2WMYNV-qX"
}
},
{
"cell_type": "markdown",
"source": [
"## Create Model"
],
"metadata": {
"id": "emDyvzVUp5KJ"
}
},
{
"cell_type": "code",
"source": [
"def create_model():\n",
" model = Sequential()\n",
" # model.add(LSTM(units=112, return_sequences=True, input_shape=(x_train.shape[1:])))\n",
" model.add(LSTM(units=1000, return_sequences=True, input_shape=(None,x_train.shape[-1],)))\n",
" model.add(Dropout(0.2))\n",
" model.add(LSTM(units=1000, return_sequences=True))\n",
" model.add(Dropout(0.2))\n",
" model.add(LSTM(units=1000))\n",
" model.add(Dropout(0.2))\n",
" model.add(Dense(units=4))\n",
" return model\n",
"\n",
"model = create_model()\n",
"print(model.summary())"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "GXhYAKzXVfku",
"outputId": "bbf96ec2-84fc-4246-9003-32c2f8083bb6"
},
"execution_count": 101,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Model: \"sequential_2\"\n",
"_________________________________________________________________\n",
" Layer (type) Output Shape Param # \n",
"=================================================================\n",
" lstm_6 (LSTM) (None, None, 1000) 4028000 \n",
" \n",
" dropout_6 (Dropout) (None, None, 1000) 0 \n",
" \n",
" lstm_7 (LSTM) (None, None, 1000) 8004000 \n",
" \n",
" dropout_7 (Dropout) (None, None, 1000) 0 \n",
" \n",
" lstm_8 (LSTM) (None, 1000) 8004000 \n",
" \n",
" dropout_8 (Dropout) (None, 1000) 0 \n",
" \n",
" dense_2 (Dense) (None, 4) 4004 \n",
" \n",
"=================================================================\n",
"Total params: 20,040,004\n",
"Trainable params: 20,040,004\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n",
"None\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"model.compile(optimizer='adam', loss='mean_squared_error')"
],
"metadata": {
"id": "ZhoWj_XeXQws"
},
"execution_count": 102,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"## Model Train"
],
"metadata": {
"id": "65QbfffusPoJ"
}
},
{
"cell_type": "code",
"source": [
"print(x_train.shape)\n",
"print(y_train.shape)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "HDT9XPXHvqyN",
"outputId": "6bc3a3e9-a7ae-48ff-e64a-fb529c5e1f75"
},
"execution_count": 103,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"(2082, 500, 6)\n",
"(2082, 4)\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# Change to False to avoid trainging the model\n",
"# if False:\n",
"if True:\n",
" # Directory where the checkpoints will be saved\n",
" checkpoint_dir = './training_checkpoints_'+dt.datetime.now().strftime(\"%Y%m%d%H%M%S\")\n",
" # Name of the checkpoint files\n",
" checkpoint_prefix = os.path.join(checkpoint_dir, \"ckpt_epoch{epoch}_loss{loss}\")\n",
" \n",
" checkpoint_callback=tf.keras.callbacks.ModelCheckpoint(\n",
" filepath=checkpoint_prefix,\n",
" save_weights_only=True,\n",
" monitor=\"loss\", mode=\"min\",\n",
" save_best_only=True)\n",
" model.fit(x_train, y_train, epochs=25, batch_size=32, callbacks=[checkpoint_callback])\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "9Ccc_Ej2TmYO",
"outputId": "4e7fe210-6cbb-4a9d-f856-829cfa6bced5"
},
"execution_count": 104,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch 1/25\n",
"66/66 [==============================] - 58s 773ms/step - loss: 0.0125\n",
"Epoch 2/25\n",
"66/66 [==============================] - 54s 816ms/step - loss: 0.0115\n",
"Epoch 3/25\n",
"66/66 [==============================] - 55s 841ms/step - loss: 0.0113\n",
"Epoch 4/25\n",
"66/66 [==============================] - 56s 845ms/step - loss: 0.0114\n",
"Epoch 5/25\n",
"66/66 [==============================] - 57s 859ms/step - loss: 0.0113\n",
"Epoch 6/25\n",
"66/66 [==============================] - 58s 886ms/step - loss: 0.0112\n",
"Epoch 7/25\n",
"66/66 [==============================] - 59s 889ms/step - loss: 0.0112\n",
"Epoch 8/25\n",
"66/66 [==============================] - 59s 890ms/step - loss: 0.0111\n",
"Epoch 9/25\n",
"66/66 [==============================] - 58s 875ms/step - loss: 0.0112\n",
"Epoch 10/25\n",
"66/66 [==============================] - 58s 880ms/step - loss: 0.0112\n",
"Epoch 11/25\n",
"66/66 [==============================] - 58s 881ms/step - loss: 0.0111\n",
"Epoch 12/25\n",
"66/66 [==============================] - 59s 892ms/step - loss: 0.0111\n",
"Epoch 13/25\n",
"66/66 [==============================] - 59s 895ms/step - loss: 0.0110\n",
"Epoch 14/25\n",
"66/66 [==============================] - 58s 880ms/step - loss: 0.0111\n",
"Epoch 15/25\n",
"66/66 [==============================] - 58s 882ms/step - loss: 0.0111\n",
"Epoch 16/25\n",
"66/66 [==============================] - 59s 896ms/step - loss: 0.0110\n",
"Epoch 17/25\n",
"66/66 [==============================] - 58s 882ms/step - loss: 0.0112\n",
"Epoch 18/25\n",
"66/66 [==============================] - 58s 882ms/step - loss: 0.0110\n",
"Epoch 19/25\n",
"66/66 [==============================] - 58s 882ms/step - loss: 0.0111\n",
"Epoch 20/25\n",
"24/66 [=========>....................] - ETA: 37s - loss: 0.0099"
]
},
{
"output_type": "error",
"ename": "KeyboardInterrupt",
"evalue": "ignored",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0mmonitor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"loss\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"min\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m save_best_only=True)\n\u001b[0;32m---> 14\u001b[0;31m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mepochs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m25\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m32\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcheckpoint_callback\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/usr/local/lib/python3.9/dist-packages/keras/utils/traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0mfiltered_tb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 65\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 66\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0mfiltered_tb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_process_traceback_frames\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__traceback__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.9/dist-packages/keras/engine/training.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)\u001b[0m\n\u001b[1;32m 1683\u001b[0m ):\n\u001b[1;32m 1684\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mon_train_batch_begin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1685\u001b[0;31m \u001b[0mtmp_logs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miterator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1686\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdata_handler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshould_sync\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1687\u001b[0m \u001b[0mcontext\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masync_wait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.9/dist-packages/tensorflow/python/util/traceback_utils.py\u001b[0m in \u001b[0;36merror_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 148\u001b[0m \u001b[0mfiltered_tb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 149\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 150\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 151\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 152\u001b[0m \u001b[0mfiltered_tb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_process_traceback_frames\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__traceback__\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.9/dist-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 892\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 893\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mOptionalXlaContext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_jit_compile\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 894\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 895\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 896\u001b[0m \u001b[0mnew_tracing_count\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexperimental_get_tracing_count\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.9/dist-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py\u001b[0m in \u001b[0;36m_call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 924\u001b[0m \u001b[0;31m# In this case we have created variables on the first call, so we run the\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 925\u001b[0m \u001b[0;31m# defunned version which is guaranteed to never create variables.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 926\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_no_variable_creation_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# pylint: disable=not-callable\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 927\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_variable_creation_fn\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 928\u001b[0m \u001b[0;31m# Release the lock early so that multiple threads can perform the call\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.9/dist-packages/tensorflow/python/eager/polymorphic_function/tracing_compiler.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 141\u001b[0m (concrete_function,\n\u001b[1;32m 142\u001b[0m filtered_flat_args) = self._maybe_define_function(args, kwargs)\n\u001b[0;32m--> 143\u001b[0;31m return concrete_function._call_flat(\n\u001b[0m\u001b[1;32m 144\u001b[0m filtered_flat_args, captured_inputs=concrete_function.captured_inputs) # pylint: disable=protected-access\n\u001b[1;32m 145\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.9/dist-packages/tensorflow/python/eager/polymorphic_function/monomorphic_function.py\u001b[0m in \u001b[0;36m_call_flat\u001b[0;34m(self, args, captured_inputs, cancellation_manager)\u001b[0m\n\u001b[1;32m 1755\u001b[0m and executing_eagerly):\n\u001b[1;32m 1756\u001b[0m \u001b[0;31m# No tape is watching; skip to running the function.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1757\u001b[0;31m return self._build_call_outputs(self._inference_function.call(\n\u001b[0m\u001b[1;32m 1758\u001b[0m ctx, args, cancellation_manager=cancellation_manager))\n\u001b[1;32m 1759\u001b[0m forward_backward = self._select_forward_and_backward_functions(\n",
"\u001b[0;32m/usr/local/lib/python3.9/dist-packages/tensorflow/python/eager/polymorphic_function/monomorphic_function.py\u001b[0m in \u001b[0;36mcall\u001b[0;34m(self, ctx, args, cancellation_manager)\u001b[0m\n\u001b[1;32m 379\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0m_InterpolateFunctionError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 380\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mcancellation_manager\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 381\u001b[0;31m outputs = execute.execute(\n\u001b[0m\u001b[1;32m 382\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msignature\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 383\u001b[0m \u001b[0mnum_outputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_num_outputs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/usr/local/lib/python3.9/dist-packages/tensorflow/python/eager/execute.py\u001b[0m in \u001b[0;36mquick_execute\u001b[0;34m(op_name, num_outputs, inputs, attrs, ctx, name)\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0mctx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mensure_initialized\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 52\u001b[0;31m tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,\n\u001b[0m\u001b[1;32m 53\u001b[0m inputs, attrs, num_outputs)\n\u001b[1;32m 54\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_NotOkStatusException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# Testing a model"
],
"metadata": {
"id": "dbSKl47vZvpe"
}
},
{
"cell_type": "code",
"source": [
"#print trainings directories to pick one\n",
"!ls -ld training_checkpoints_*/"
],
"metadata": {
"id": "59CDDB0i4yTx"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"test_model = create_model()"
],
"metadata": {
"id": "tpmru7nG9kbW"
},
"execution_count": 105,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# if checkpoint_dir does not exists, select the one stated in the except block\n",
"try:\n",
" checkpoint_dir\n",
"except NameError: \n",
" checkpoint_dir = './training_checkpoints_20230406214431'\n",
"\n",
"print(checkpoint_dir)\n",
"\n",
"def load_weights(epoch=None):\n",
" if epoch is None:\n",
" weights_file = tf.train.latest_checkpoint(checkpoint_dir)\n",
" else:\n",
" with os.scandir(checkpoint_dir) as entries:\n",
" for entry in entries:\n",
" if re.search(f'^ckpt_epoch{epoch}_.*\\.index', entry.name):\n",
" weights_file = checkpoint_dir + '/'+ entry.name[:-6]\n",
"\n",
" print(weights_file)\n",
" test_model.load_weights(weights_file)\n",
" return test_model\n",
"\n",
"test_model = load_weights()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "wQ0JTXsp4VKF",
"outputId": "2b25d414-f188-4c14-ef43-f7af5566a3be"
},
"execution_count": 107,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"./training_checkpoints_20230406230143\n",
"./training_checkpoints_20230406230143/ckpt_epoch16_loss0.01097947172820568\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"test_start = dt.datetime(2013,1,1)\n",
"end = dt.datetime(2023,4,5)\n",
"\n",
"yfin.pdr_override()\n",
"test_data = web.data.get_data_yahoo(ticker, test_start, test_end)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Mf4q97pfaSCA",
"outputId": "7355b53f-c879-4296-d24a-bb8bd739e5d8"
},
"execution_count": 114,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\r[*********************100%***********************] 1 of 1 completed\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# def close_tester(model, test_data, scaler=None):\n",
"model = test_model\n",
"scaler = scaler\n",
"test_x_train, test_y_train, _, _ = preprocessing(data, scaler=scaler)\n",
"print(test_x_train.shape)\n",
"print(test_y_train.shape)\n",
"results = model.predict(test_x_train)\n",
"# the results are tensors of 4 numbers, Jump, High, Low, and Close respectively\n",
"\n",
"# close_tester(test_model, test_data, scaler=the_scaler)\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "MqCeMf3UoxZm",
"outputId": "a0591f06-f804-41e9-b973-627a7693ff89"
},
"execution_count": 115,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"max_value: 10.589996337890625\n",
"max_volume: 1460852400.0\n",
"(2082, 500, 6)\n",
"(2082, 4)\n",
"66/66 [==============================] - 18s 275ms/step\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"right_counter = 0\n",
"wrong_counter = 0\n",
"no_action_counter = 0\n",
"# for result, expected in zip(results[:2], test_y_train[:2]):\n",
"for result, expected in zip(results[:], test_y_train[:]):\n",
" # print(result)\n",
" # print(expected)\n",
" comparer = result[3] * expected[3]\n",
" if comparer > 0:\n",
" right_counter += 1\n",
" elif comparer == 0:\n",
" no_action_counter\n",
" elif comparer < 0:\n",
" wrong_counter += 1\n",
"\n",
" # print('expected: ', decoder(expected))\n",
" # print('result: ', decoder(result))\n",
"\n",
"print('right_counter :', right_counter)\n",
"print('no_action_counter :',no_action_counter)\n",
"print('wrong_counter :', wrong_counter)\n",
"print('success rate: {}%'.format(right_counter*100/len(results)))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "AVYFQZnqEqhx",
"outputId": "7353f76c-f2e6-4a48-ba31-74ab67bb73ea"
},
"execution_count": 120,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"right_counter : 1118\n",
"no_action_counter : 0\n",
"wrong_counter : 959\n",
"success rate: 53.6983669548511%\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"test_data.iloc[500,:]"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "gyhzy_l6sAvi",
"outputId": "78f5d2cf-cd21-47b1-b58e-6b3321a802bd"
},
"execution_count": 123,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Open 2.802500e+01\n",
"High 2.863000e+01\n",
"Low 2.800250e+01\n",
"Close 2.849750e+01\n",
"Adj Close 2.561277e+01\n",
"Volume 1.348840e+08\n",
"Name: 2014-12-26 00:00:00, dtype: float64"
]
},
"metadata": {},
"execution_count": 123
}
]
}
]
} |