{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "id": "k0oI8u0BjewA", "outputId": "d1babf04-9ee3-493c-87a3-6ea09da05de3" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "'3.5.0'" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "string" } }, "metadata": {}, "execution_count": 1 } ], "source": [ "import keras\n", "keras.__version__" ] }, { "cell_type": "code", "source": [ "from keras import models\n", "from keras import layers\n", "from keras import metrics\n", "from keras import optimizers\n", "\n", "import numpy as np\n", "import json\n", "import os\n", "import csv\n", "import pandas as pd\n", "import tensorflow as tf" ], "metadata": { "id": "16MIYdZvjrjQ" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')" ], "metadata": { "id": "2lzfI8tajuqE", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "98db822c-3cd8-47c2-fa89-54ae9f40d4df" }, "execution_count": null, "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" ] } ] }, { "cell_type": "code", "source": [ "# Load the data\n", "ur_path = '/content/drive/MyDrive/FYP/LSTM Dataset/UR_Dataset/ur_data.csv'\n", "mc_fall_path = '/content/drive/MyDrive/FYP/LSTM Dataset/MC_Dataset/mc_fall_data.csv'\n", "mc_notfall_path = '/content/drive/MyDrive/FYP/LSTM Dataset/MC_Dataset/mc_notfall_data.csv'\n", "youtube_fall_path = '/content/drive/MyDrive/FYP/LSTM Dataset/Youtube_Dateset/youtube_fall_data.csv'\n", "youtube_notfall_path = '/content/drive/MyDrive/FYP/LSTM Dataset/Youtube_Dateset/youtube_notfall_data.csv'" ], "metadata": { "id": "9WMirUCDj-iu" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Read the data\n", "def read_data(path):\n", " video_data = []\n", " with open(path, mode='r') as csv_file:\n", " reader = csv.reader(csv_file)\n", " for row in reader:\n", " video_data.append(row)\n", " return video_data\n", "\n", "ur_data = read_data(ur_path)\n", "mc_fall_data = read_data(mc_fall_path)\n", "mc_notfall_data = read_data(mc_notfall_path)\n", "youtube_fall_data = read_data(youtube_fall_path)\n", "youtube_notfall_data = read_data(youtube_notfall_path)\n", "\n", "print(ur_data[0])\n", "print(mc_fall_data[0])\n", "print(mc_notfall_data[0])\n", "print(youtube_fall_data[0])\n", "print(youtube_notfall_data[0])" ], "metadata": { "id": "jdDHSSZokN9O", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "d30c8006-0b09-4dcd-9f24-65f2ed747bd7" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "['520.972', '128.178', '0.833728', '544.571', '130.782', '0.739747', '540.636', '132.754', '0.726633', '553.086', '154.999', '0.800764', '541.285', '166.155', '0.742877', '549.144', '129.467', '0.745059', '572.703', '155.035', '0.841464', '543.266', '171.369', '0.817947', '572.067', '169.415', '0.607432', '564.874', '166.16', '0.534525', '526.875', '181.191', '0.862423', '554.389', '217.851', '0.612664', '577.962', '170.732', '0.619415', '535.402', '188.398', '0.760066', '560.284', '220.479', '0.65847', '545.882', '232.266', '0.604373', '553.078', '232.915', '0.532739', '566.184', '222.453', '0.655722', '541.939', '229.002', '0.399536', '541.943', '227.687', '0.344383', '560.285', '217.223', '0.153482', 'fall-16-cam0_000000000016_keypoints']\n", "['504.171', '238.019', '0.119379', '481.995', '237.979', '0.647555', '471.564', '247.106', '0.6547', '485.918', '299.334', '0.780827', '525.04', '307.158', '0.770417', '495.036', '228.845', '0.474206', '519.863', '220.995', '0.283234', '539.41', '214.505', '0.246275', '478.096', '275.843', '0.378863', '474.176', '284.967', '0.370422', '528.986', '277.118', '0.213783', '0.0', '0.0', '0.0', '485.934', '266.741', '0.363281', '517.291', '258.887', '0.198486', '530.273', '274.524', '0.0747612', '542.03', '277.126', '0.114463', '539.417', '277.116', '0.0888912', '532.899', '274.487', '0.0731438', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '55_000000000000_keypoints']\n", "['643.854', '174.088', '0.796968', '652.912', '202.706', '0.916605', '633.362', '192.272', '0.886062', '609.831', '214.468', '0.928492', '579.903', '235.396', '0.884458', '672.491', '213.16', '0.871428', '664.737', '253.631', '0.843892', '653.025', '284.941', '0.864034', '625.542', '257.608', '0.738263', '612.549', '253.669', '0.758785', '602.079', '296.765', '0.733292', '590.279', '330.665', '0.457905', '637.277', '265.416', '0.734225', '605.954', '303.234', '0.712669', '566.825', '341.124', '0.72449', '548.572', '350.196', '0.637416', '557.634', '352.806', '0.630046', '561.622', '348.878', '0.52683', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '590.367', '337.146', '0.274113', '60_000000000000_keypoints']\n", "['0.0', '0.0', '0.0', '343.849', '66.0223', '0.188148', '357.543', '65.0651', '0.218538', '363.4', '88.5165', '0.191749', '372.217', '105.197', '0.108987', '332.118', '66.0279', '0.150296', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '326.252', '114.944', '0.284664', '338.962', '115.929', '0.30854', '347.785', '137.438', '0.560074', '343.839', '168.782', '0.551124', '312.554', '112.013', '0.206529', '318.401', '133.526', '0.458152', '302.762', '158.97', '0.660171', '317.411', '170.707', '0.600659', '315.461', '168.761', '0.53913', '296.89', '159.959', '0.631556', '349.714', '174.611', '0.319546', '348.751', '175.614', '0.397619', '340.902', '175.568', '0.545259', '20_000000000000_keypoints']\n", "['127.682', '35.6818', '0.86715', '160.95', '62.1388', '0.695363', '175.59', '57.2496', '0.554826', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '149.194', '66.9858', '0.726184', '158.946', '134.519', '0.703452', '139.42', '185.404', '0.765717', '178.547', '178.524', '0.46768', '191.251', '177.548', '0.420402', '186.383', '242.124', '0.614888', '199.029', '301.81', '0.717645', '168.757', '179.502', '0.463228', '152.142', '247.998', '0.627453', '131.588', '310.611', '0.561644', '104.176', '303.749', '0.359979', '107.144', '308.644', '0.370667', '132.562', '323.297', '0.445868', '161.897', '314.483', '0.600495', '165.821', '311.581', '0.493078', '205.908', '309.59', '0.598985', '7_000000000000_keypoints']\n" ] } ] }, { "cell_type": "code", "source": [ "# Normalized the data\n", "def normalize(list, width, height):\n", " for record in list:\n", " for i in range(0, 63, 3):\n", " record[i] = float(record[i])/ width\n", " record[i + 1] = float(record[i + 1]) / height\n", "\n", "normalize(ur_data, 640, 240)\n", "normalize(mc_fall_data, 720, 480)\n", "normalize(mc_notfall_data, 720, 480)\n", "normalize(youtube_fall_data, 640, 360)\n", "normalize(youtube_notfall_data, 640, 360)\n", "\n", "print(ur_data[0])\n", "print(mc_fall_data[0])\n", "print(mc_notfall_data[0])\n", "print(youtube_fall_data[0])\n", "print(youtube_notfall_data[0])" ], "metadata": { "id": "aho8JzbgkBUi", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "c9f13e1d-8d5f-4631-f8ed-0be6de6dfec9" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[0.81401875, 0.534075, '0.833728', 0.8508921875000001, 0.544925, '0.739747', 0.8447437499999999, 0.5531416666666666, '0.726633', 0.864196875, 0.6458291666666667, '0.800764', 0.8457578124999999, 0.6923125, '0.742877', 0.8580375, 0.5394458333333334, '0.745059', 0.8948484375, 0.6459791666666667, '0.841464', 0.848853125, 0.7140375, '0.817947', 0.8938546875, 0.7058958333333333, '0.607432', 0.882615625, 0.6923333333333334, '0.534525', 0.8232421875, 0.7549625, '0.862423', 0.8662328125000001, 0.9077125, '0.612664', 0.903065625, 0.7113833333333334, '0.619415', 0.8365656250000001, 0.7849916666666666, '0.760066', 0.87544375, 0.9186625, '0.65847', 0.8529406249999999, 0.9677749999999999, '0.604373', 0.864184375, 0.9704791666666667, '0.532739', 0.8846624999999999, 0.9268875, '0.655722', 0.8467796875, 0.954175, '0.399536', 0.8467859375, 0.9486958333333334, '0.344383', 0.8754453124999999, 0.9050958333333334, '0.153482', 'fall-16-cam0_000000000016_keypoints']\n", "[0.7002375, 0.49587291666666666, '0.119379', 0.6694375, 0.49578958333333334, '0.647555', 0.65495, 0.5148041666666666, '0.6547', 0.6748861111111111, 0.6236125, '0.780827', 0.7292222222222222, 0.6399125, '0.770417', 0.68755, 0.4767604166666667, '0.474206', 0.7220319444444445, 0.46040625, '0.283234', 0.7491805555555555, 0.44688541666666665, '0.246275', 0.6640222222222222, 0.5746729166666668, '0.378863', 0.6585777777777777, 0.5936812499999999, '0.370422', 0.7347027777777778, 0.5773291666666667, '0.213783', 0.0, 0.0, '0.0', 0.6749083333333333, 0.5557104166666667, '0.363281', 0.7184597222222223, 0.5393479166666667, '0.198486', 0.7364902777777778, 0.571925, '0.0747612', 0.7528194444444444, 0.5773458333333333, '0.114463', 0.7491902777777778, 0.577325, '0.0888912', 0.7401375, 0.5718479166666667, '0.0731438', 0.0, 0.0, '0.0', 0.0, 0.0, '0.0', 0.0, 0.0, '0.0', '55_000000000000_keypoints']\n", "[0.8942416666666667, 0.3626833333333333, '0.796968', 0.9068222222222223, 0.42230416666666665, '0.916605', 0.8796694444444444, 0.4005666666666666, '0.886062', 0.8469875, 0.4468083333333333, '0.928492', 0.8054208333333334, 0.4904083333333333, '0.884458', 0.9340152777777777, 0.44408333333333333, '0.871428', 0.9232458333333333, 0.5283979166666667, '0.843892', 0.9069791666666667, 0.5936270833333332, '0.864034', 0.8688083333333334, 0.5366833333333333, '0.738263', 0.8507625, 0.5284770833333333, '0.758785', 0.8362208333333333, 0.6182604166666666, '0.733292', 0.8198319444444444, 0.6888854166666667, '0.457905', 0.8851069444444445, 0.5529499999999999, '0.734225', 0.8416027777777777, 0.6317375, '0.712669', 0.7872569444444445, 0.7106750000000001, '0.72449', 0.7619055555555556, 0.7295750000000001, '0.637416', 0.7744916666666667, 0.7350125, '0.630046', 0.7800305555555554, 0.7268291666666666, '0.52683', 0.0, 0.0, '0.0', 0.0, 0.0, '0.0', 0.8199541666666667, 0.7023875, '0.274113', '60_000000000000_keypoints']\n", "[0.0, 0.0, '0.0', 0.5372640625, 0.18339527777777778, '0.188148', 0.5586609375, 0.1807363888888889, '0.218538', 0.5678124999999999, 0.24587916666666665, '0.191749', 0.5815890625, 0.2922138888888889, '0.108987', 0.518934375, 0.18341083333333333, '0.150296', 0.0, 0.0, '0.0', 0.0, 0.0, '0.0', 0.50976875, 0.3192888888888889, '0.284664', 0.529628125, 0.322025, '0.30854', 0.5434140625, 0.3817722222222222, '0.560074', 0.5372484375, 0.4688388888888889, '0.551124', 0.48836562499999997, 0.31114722222222224, '0.206529', 0.4975015625, 0.3709055555555556, '0.458152', 0.473065625, 0.4415833333333333, '0.660171', 0.4959546875, 0.4741861111111111, '0.600659', 0.49290781250000004, 0.46878055555555553, '0.53913', 0.463890625, 0.44433055555555556, '0.631556', 0.546428125, 0.4850305555555555, '0.319546', 0.5449234374999999, 0.4878166666666667, '0.397619', 0.5326593749999999, 0.48768888888888895, '0.545259', '20_000000000000_keypoints']\n", "[0.199503125, 0.09911611111111111, '0.86715', 0.251484375, 0.17260777777777778, '0.695363', 0.274359375, 0.15902666666666668, '0.554826', 0.0, 0.0, '0.0', 0.0, 0.0, '0.0', 0.233115625, 0.18607166666666666, '0.726184', 0.248353125, 0.3736638888888889, '0.703452', 0.21784374999999997, 0.5150111111111111, '0.765717', 0.2789796875, 0.4959, '0.46768', 0.2988296875, 0.4931888888888889, '0.420402', 0.2912234375, 0.6725666666666666, '0.614888', 0.3109828125, 0.8383611111111111, '0.717645', 0.26368281250000003, 0.4986166666666667, '0.463228', 0.237721875, 0.6888833333333333, '0.627453', 0.20560625, 0.8628083333333333, '0.561644', 0.162775, 0.8437472222222223, '0.359979', 0.16741250000000002, 0.8573444444444445, '0.370667', 0.20712812500000002, 0.8980472222222223, '0.445868', 0.2529640625, 0.8735638888888889, '0.600495', 0.2590953125, 0.8655027777777778, '0.493078', 0.32173124999999997, 0.8599722222222221, '0.598985', '7_000000000000_keypoints']\n" ] } ] }, { "cell_type": "code", "source": [ "# Check the target label in the UR Dataset\n", "# -1 = not lying; 0 = falling; 1 = lying\n", "\n", "target = []\n", "\n", "path1 = '/content/drive/MyDrive/FYP/LSTM Dataset/Target/urfall-cam0-falls.csv'\n", "path2 = '/content/drive/MyDrive/FYP/LSTM Dataset/Target/urfall-cam0-adls.csv'\n", "\n", "def input_fall(path):\n", " with open(path, mode='r') as csv_file:\n", " reader = csv.reader(csv_file)\n", " for row in reader:\n", " record = []\n", " record.append(row[0])\n", " record.append(row[1])\n", " label = row[2]\n", " if label == '1' or label == '0':\n", " record.append(1)\n", " else:\n", " record.append(0)\n", " # each record: [, , label], eg: ['fall-17', '22', 0]\n", " target.append(record)\n", "\n", "# though laying in the video, but it is not fall, so I mark 0 as label\n", "def input_adl(path):\n", " with open(path, mode='r') as csv_file:\n", " reader = csv.reader(csv_file)\n", " for row in reader:\n", " record = []\n", " record.append(row[0])\n", " record.append(row[1])\n", " record.append(0)\n", " target.append(record)\n", "\n", "input_fall(path1)\n", "print(\"Falls of UR dataset:\", len(target))\n", "\n", "input_adl(path2)\n", "\n", "df = pd.DataFrame.from_records(target)\n", "df.to_csv (r'/content/drive/My Drive/FYP/LSTM Dataset/Target/target_data.csv', index = False, header=False)" ], "metadata": { "id": "xXuEfo_1ka9o", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "34581de8-b44a-4e59-9b28-ffa4d77328ef" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Falls of UR dataset: 2995\n" ] } ] }, { "cell_type": "code", "source": [ "# Create a dictionary for target of UR Dataset\n", "\n", "target_csv_path = '/content/drive/MyDrive/FYP/LSTM Dataset/Target/target_data.csv'\n", "\n", "idx = 0\n", "idx_dict = {}\n", "\n", "with open(target_csv_path, mode='r') as csv_file:\n", " reader = csv.reader(csv_file)\n", " for row in reader:\n", " # Check each row: [, , label], such as: ['fall-17', '22', 0]\n", " idx_dict['.'.join(row[:2])] = idx # {'fall-17.22' : 112}\n", " idx += 1" ], "metadata": { "id": "AW1_GUqAkBFA" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Match body landmark data with labelled UR dataset\n", "\n", "bodylandmark = []\n", "label = []\n", "frame_name = []\n", "\n", "for landmark in ur_data:\n", " video_name = landmark[-1].split(\"_\") # as named as \"fall-01-cam0_000000000001\"\n", " video_name_split = video_name[0].split(\"-\") # spliting \"fall-01-cam0\" into [\"fall\", \"01\", \"cam0\"]\n", " video_type = video_name_split[0] # \"fall\"\n", " video_id = video_name_split[1] # \"01\"\n", " frame_id = str(int(video_name[1])) # \"000000000001\" -> \"1\"\n", "\n", " try:\n", " video_name_split = '.'.join([video_id, frame_id])\n", " video_type_name_split = '-'.join([video_type, video_name_split])\n", " label.append(target[idx_dict[video_type_name_split]][-1])\n", "\n", " # Convert str -> float\n", " body_lm = landmark[:-1]\n", " body_lm = list(map(float,body_lm))\n", " bodylandmark.append(body_lm)\n", " frameName = landmark[-1]\n", " frame_name.append(frameName)\n", "\n", " except:\n", " continue\n", "\n", "\n", "# print(\"Bodylandmark Record Sample of UR Dataset:\" )\n", "# print(bodylandmark[0])\n", "# print(\"Bodylandmark of UR Dataset: \", len(bodylandmark))\n", "# print(\"Label of UR Dataset: \", len(label))" ], "metadata": { "id": "NFssPfZJvO7c" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Add MC Dataset to the whole dataset\n", "# 1 = fall; 0 = not fall\n", "\n", "for record in mc_fall_data:\n", " body_lm = record[:-1]\n", " body_lm = list(map(float,body_lm))\n", " bodylandmark.append(body_lm)\n", "\n", " label.append(1) # 1 = Fall\n", " frameName = landmark[-1]\n", " frame_name.append(frameName)\n", "\n", "for record in mc_notfall_data:\n", " body_lm = record[:-1]\n", " body_lm = list(map(float,body_lm))\n", " bodylandmark.append(body_lm)\n", "\n", " label.append(0) # 0 = Not fall\n", " frameName = landmark[-1]\n", " frame_name.append(frameName)\n", "\n", "# print(\"Bodylandmark Record Sample of MC Dataset:\" )\n", "# print(\"Bodylandmark of MC Dataset: \", len(bodylandmark))\n", "# print(\"Label of MC Dataset: \", len(label))" ], "metadata": { "id": "Pj3_r-Hi5dQ3" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Add Youtube Dataset to the whole dataset\n", "# 1 = fall; 0 = not fall\n", "\n", "for record in youtube_fall_data:\n", " body_lm = record[:-1]\n", " body_lm = list(map(float,body_lm))\n", " bodylandmark.append(body_lm)\n", "\n", " label.append(1) # 1 = Fall\n", " frameName = landmark[-1]\n", " frame_name.append(frameName)\n", "\n", "for record in youtube_notfall_data:\n", " body_lm = record[:-1]\n", " body_lm = list(map(float,body_lm))\n", " bodylandmark.append(body_lm)\n", "\n", " label.append(0) # 0 = Not fall\n", " frameName = landmark[-1]\n", " frame_name.append(frameName)\n", "\n", "# print(\"Bodylandmark Record Sample of Youtube Dataset:\" )\n", "# print(\"Bodylandmark of Youtube Dataset: \", len(bodylandmark))\n", "# print(\"Label of Youtube Dataset: \", len(label))" ], "metadata": { "id": "SgPqhz8R6TRb" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Change body landmark & label to the same data frame\n", "all_data = []\n", "\n", "for i in range(len(bodylandmark)):\n", " all_data.append([label[i]])\n", " all_data[i] = all_data[i] + bodylandmark[i]" ], "metadata": { "id": "eyPGw85m9N-w" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Count the number of \"Fall\" and \"Not fall\" in Label\n", "\n", "fall = label.count(1)\n", "not_fall = label.count(0)\n", "\n", "print(\"Number of Fall:\", fall)\n", "print(\"Number of Not fall:\", not_fall)\n", "print(\"Number of All Data:\", len(label))" ], "metadata": { "id": "OIVYx6MS8lLl", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "c2319ed1-e7e5-4080-c832-c5e1e01784c9" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Number of Fall: 13128\n", "Number of Not fall: 22151\n", "Number of All Data: 35279\n" ] } ] }, { "cell_type": "code", "source": [ "# Split data into training dataset and validation dataset\n", "# Divided into 6:4\n", "\n", "np.random.shuffle(all_data)\n", "split_pt = len(all_data) // 10 * 6\n", "\n", "train_data = all_data[:split_pt]\n", "valid_data = all_data[split_pt:]\n", "\n", "print(\"Number of Training Data:\", len(train_data))\n", "print(\"Number of Validation Data:\", len(valid_data))\n", "\n", "# Check if all data has been split\n", "print((len(train_data)+len(valid_data)) == len(label))" ], "metadata": { "id": "9kVZIgkA-MRD", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "2fc83230-0dd4-40b0-ec09-e19702a9039f" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Number of Training Data: 21162\n", "Number of Validation Data: 14117\n", "True\n" ] } ] }, { "cell_type": "code", "source": [ "from tensorflow.keras.layers import LSTM\n", "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras import callbacks\n", "from tensorflow.keras import layers\n", "from numpy import array\n", "\n", "def scheduler(epoch):\n", " if epoch < 10:\n", " return 0.001\n", " else:\n", " return 0.001 * np.exp(0.1 * (10 - epoch))\n", "\n", "x_train = []\n", "y_train = []\n", "\n", "for record in train_data:\n", " x_train.append(record[1:])\n", " label = int(record[0])\n", " y_train.append(label)" ], "metadata": { "id": "oXn9Mn7sDhqk" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "def train_lstm_model(x_train, y_train):\n", " x_train = array(x_train)\n", " x_train = x_train.reshape((len(x_train), 1, len(x_train[0])))\n", "\n", " y_train = array(y_train)\n", "\n", " lstm_model = Sequential()\n", " lstm_model.add(LSTM(16,\n", " input_shape=(1, 63),\n", " return_sequences=True))\n", " lstm_model.add(LSTM(16, ))\n", " lstm_model.add(layers.Dense(1, activation='sigmoid'))\n", " lstm_model.compile(optimizer='rmsprop',\n", " loss='binary_crossentropy',\n", " metrics=['acc',\n", " metrics.AUC(),\n", " metrics.FalseNegatives(),\n", " metrics.Recall(),\n", " metrics.Precision(),\n", " metrics.FalseNegatives(),\n", " metrics.TrueNegatives(),\n", " metrics.FalsePositives(),\n", " metrics.TruePositives()])\n", "\n", " lstm_history = lstm_model.fit(x_train, y_train,\n", " epochs=100,\n", " batch_size=16,\n", " validation_split=0.2,\n", " callbacks=[callbacks.EarlyStopping(monitor='val_loss', patience=5),\n", " callbacks.LearningRateScheduler(scheduler)])\n", "\n", " print(\"Finish Training LSTM Model\")\n", " return lstm_model, lstm_history\n", "\n", "lstm_model, lstm_history = train_lstm_model(x_train, y_train)" ], "metadata": { "id": "GAfiRGmuE4Va", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "b9854f29-96a4-40b8-b86e-589224c9ca6c" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Epoch 1/100\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/keras/src/layers/rnn/rnn.py:204: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", " super().__init__(**kwargs)\n" ] }, { "output_type": "stream", "name": "stdout", "text": [ "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 6ms/step - acc: 0.7130 - auc: 0.7821 - false_negatives: 1322.0255 - false_negatives_1: 1322.0255 - false_positives: 927.1651 - loss: 0.5311 - precision: 0.6823 - recall: 0.4605 - true_negatives: 4411.4756 - true_positives: 1827.2905 - val_acc: 0.7912 - val_auc: 0.9133 - val_false_negatives: 74.0000 - val_false_negatives_1: 74.0000 - val_false_positives: 810.0000 - val_loss: 0.4086 - val_precision: 0.6510 - val_recall: 0.9533 - val_true_negatives: 1838.0000 - val_true_positives: 1511.0000 - learning_rate: 0.0010\n", "Epoch 2/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - acc: 0.8322 - auc: 0.9184 - false_negatives: 421.2613 - false_negatives_1: 421.2613 - false_positives: 971.0821 - loss: 0.3509 - precision: 0.7344 - recall: 0.8658 - true_negatives: 4338.9170 - true_positives: 2756.6963 - val_acc: 0.7673 - val_auc: 0.8923 - val_false_negatives: 774.0000 - val_false_negatives_1: 774.0000 - val_false_positives: 211.0000 - val_loss: 0.5586 - val_precision: 0.7935 - val_recall: 0.5117 - val_true_negatives: 2437.0000 - val_true_positives: 811.0000 - learning_rate: 0.0010\n", "Epoch 3/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - acc: 0.8635 - auc: 0.9343 - false_negatives: 433.3990 - false_negatives_1: 433.3990 - false_positives: 712.7962 - loss: 0.3156 - precision: 0.7897 - recall: 0.8535 - true_negatives: 4625.7207 - true_positives: 2716.0405 - val_acc: 0.8545 - val_auc: 0.9400 - val_false_negatives: 375.0000 - val_false_negatives_1: 375.0000 - val_false_positives: 241.0000 - val_loss: 0.3215 - val_precision: 0.8339 - val_recall: 0.7634 - val_true_negatives: 2407.0000 - val_true_positives: 1210.0000 - learning_rate: 0.0010\n", "Epoch 4/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.8757 - auc: 0.9448 - false_negatives: 386.9387 - false_negatives_1: 386.9387 - false_positives: 666.8811 - loss: 0.2908 - precision: 0.8075 - recall: 0.8774 - true_negatives: 4647.8726 - true_positives: 2786.2642 - val_acc: 0.8795 - val_auc: 0.9520 - val_false_negatives: 285.0000 - val_false_negatives_1: 285.0000 - val_false_positives: 225.0000 - val_loss: 0.2798 - val_precision: 0.8525 - val_recall: 0.8202 - val_true_negatives: 2423.0000 - val_true_positives: 1300.0000 - learning_rate: 0.0010\n", "Epoch 5/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - acc: 0.8824 - auc: 0.9509 - false_negatives: 376.7010 - false_negatives_1: 376.7010 - false_positives: 619.0481 - loss: 0.2724 - precision: 0.8192 - recall: 0.8820 - true_negatives: 4668.3545 - true_positives: 2823.8528 - val_acc: 0.8972 - val_auc: 0.9600 - val_false_negatives: 203.0000 - val_false_negatives_1: 203.0000 - val_false_positives: 232.0000 - val_loss: 0.2504 - val_precision: 0.8563 - val_recall: 0.8719 - val_true_negatives: 2416.0000 - val_true_positives: 1382.0000 - learning_rate: 0.0010\n", "Epoch 6/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - acc: 0.8911 - auc: 0.9552 - false_negatives: 348.2170 - false_negatives_1: 348.2170 - false_positives: 581.0491 - loss: 0.2629 - precision: 0.8310 - recall: 0.8927 - true_negatives: 4716.0708 - true_positives: 2842.6199 - val_acc: 0.9024 - val_auc: 0.9641 - val_false_negatives: 142.0000 - val_false_negatives_1: 142.0000 - val_false_positives: 271.0000 - val_loss: 0.2325 - val_precision: 0.8419 - val_recall: 0.9104 - val_true_negatives: 2377.0000 - val_true_positives: 1443.0000 - learning_rate: 0.0010\n", "Epoch 7/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 3ms/step - acc: 0.8917 - auc: 0.9580 - false_negatives: 340.9396 - false_negatives_1: 340.9396 - false_positives: 578.9566 - loss: 0.2519 - precision: 0.8310 - recall: 0.8931 - true_negatives: 4743.6104 - true_positives: 2824.4500 - val_acc: 0.9039 - val_auc: 0.9632 - val_false_negatives: 183.0000 - val_false_negatives_1: 183.0000 - val_false_positives: 224.0000 - val_loss: 0.2339 - val_precision: 0.8622 - val_recall: 0.8845 - val_true_negatives: 2424.0000 - val_true_positives: 1402.0000 - learning_rate: 0.0010\n", "Epoch 8/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 4ms/step - acc: 0.8954 - auc: 0.9600 - false_negatives: 315.7274 - false_negatives_1: 315.7274 - false_positives: 562.1340 - loss: 0.2432 - precision: 0.8322 - recall: 0.8979 - true_negatives: 4775.2339 - true_positives: 2834.8613 - val_acc: 0.8871 - val_auc: 0.9619 - val_false_negatives: 294.0000 - val_false_negatives_1: 294.0000 - val_false_positives: 184.0000 - val_loss: 0.2609 - val_precision: 0.8753 - val_recall: 0.8145 - val_true_negatives: 2464.0000 - val_true_positives: 1291.0000 - learning_rate: 0.0010\n", "Epoch 9/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 4ms/step - acc: 0.8987 - auc: 0.9616 - false_negatives: 303.8632 - false_negatives_1: 303.8632 - false_positives: 551.9519 - loss: 0.2380 - precision: 0.8367 - recall: 0.9034 - true_negatives: 4789.3813 - true_positives: 2842.7605 - val_acc: 0.9062 - val_auc: 0.9705 - val_false_negatives: 92.0000 - val_false_negatives_1: 92.0000 - val_false_positives: 305.0000 - val_loss: 0.2228 - val_precision: 0.8304 - val_recall: 0.9420 - val_true_negatives: 2343.0000 - val_true_positives: 1493.0000 - learning_rate: 0.0010\n", "Epoch 10/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9042 - auc: 0.9653 - false_negatives: 291.1453 - false_negatives_1: 291.1453 - false_positives: 525.3717 - loss: 0.2276 - precision: 0.8466 - recall: 0.9077 - true_negatives: 4806.7095 - true_positives: 2864.7302 - val_acc: 0.9109 - val_auc: 0.9709 - val_false_negatives: 130.0000 - val_false_negatives_1: 130.0000 - val_false_positives: 247.0000 - val_loss: 0.2088 - val_precision: 0.8549 - val_recall: 0.9180 - val_true_negatives: 2401.0000 - val_true_positives: 1455.0000 - learning_rate: 0.0010\n", "Epoch 11/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - acc: 0.9083 - auc: 0.9675 - false_negatives: 266.7264 - false_negatives_1: 266.7264 - false_positives: 514.1953 - loss: 0.2173 - precision: 0.8456 - recall: 0.9156 - true_negatives: 4843.2876 - true_positives: 2863.7471 - val_acc: 0.9050 - val_auc: 0.9705 - val_false_negatives: 222.0000 - val_false_negatives_1: 222.0000 - val_false_positives: 180.0000 - val_loss: 0.2178 - val_precision: 0.8833 - val_recall: 0.8599 - val_true_negatives: 2468.0000 - val_true_positives: 1363.0000 - learning_rate: 0.0010\n", "Epoch 12/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - acc: 0.9089 - auc: 0.9682 - false_negatives: 279.4274 - false_negatives_1: 279.4274 - false_positives: 497.3104 - loss: 0.2138 - precision: 0.8520 - recall: 0.9114 - true_negatives: 4841.7866 - true_positives: 2869.4321 - val_acc: 0.9095 - val_auc: 0.9720 - val_false_negatives: 87.0000 - val_false_negatives_1: 87.0000 - val_false_positives: 296.0000 - val_loss: 0.2163 - val_precision: 0.8350 - val_recall: 0.9451 - val_true_negatives: 2352.0000 - val_true_positives: 1498.0000 - learning_rate: 9.0484e-04\n", "Epoch 13/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 6ms/step - acc: 0.9096 - auc: 0.9681 - false_negatives: 268.4302 - false_negatives_1: 268.4302 - false_positives: 479.0509 - loss: 0.2147 - precision: 0.8557 - recall: 0.9144 - true_negatives: 4829.0962 - true_positives: 2911.3792 - val_acc: 0.9197 - val_auc: 0.9745 - val_false_negatives: 129.0000 - val_false_negatives_1: 129.0000 - val_false_positives: 211.0000 - val_loss: 0.1909 - val_precision: 0.8734 - val_recall: 0.9186 - val_true_negatives: 2437.0000 - val_true_positives: 1456.0000 - learning_rate: 8.1873e-04\n", "Epoch 14/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9134 - auc: 0.9711 - false_negatives: 266.8792 - false_negatives_1: 266.8792 - false_positives: 471.2745 - loss: 0.2052 - precision: 0.8621 - recall: 0.9191 - true_negatives: 4834.7549 - true_positives: 2915.0481 - val_acc: 0.9135 - val_auc: 0.9723 - val_false_negatives: 187.0000 - val_false_negatives_1: 187.0000 - val_false_positives: 179.0000 - val_loss: 0.2068 - val_precision: 0.8865 - val_recall: 0.8820 - val_true_negatives: 2469.0000 - val_true_positives: 1398.0000 - learning_rate: 7.4082e-04\n", "Epoch 15/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 4ms/step - acc: 0.9150 - auc: 0.9718 - false_negatives: 262.8123 - false_negatives_1: 262.8123 - false_positives: 457.5189 - loss: 0.1998 - precision: 0.8621 - recall: 0.9149 - true_negatives: 4896.9009 - true_positives: 2870.7246 - val_acc: 0.9034 - val_auc: 0.9697 - val_false_negatives: 239.0000 - val_false_negatives_1: 239.0000 - val_false_positives: 170.0000 - val_loss: 0.2268 - val_precision: 0.8879 - val_recall: 0.8492 - val_true_negatives: 2478.0000 - val_true_positives: 1346.0000 - learning_rate: 6.7032e-04\n", "Epoch 16/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 5ms/step - acc: 0.9167 - auc: 0.9718 - false_negatives: 243.8896 - false_negatives_1: 243.8896 - false_positives: 465.1689 - loss: 0.1988 - precision: 0.8619 - recall: 0.9260 - true_negatives: 4847.4238 - true_positives: 2931.4746 - val_acc: 0.9194 - val_auc: 0.9745 - val_false_negatives: 154.0000 - val_false_negatives_1: 154.0000 - val_false_positives: 187.0000 - val_loss: 0.1928 - val_precision: 0.8844 - val_recall: 0.9028 - val_true_negatives: 2461.0000 - val_true_positives: 1431.0000 - learning_rate: 6.0653e-04\n", "Epoch 17/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9171 - auc: 0.9726 - false_negatives: 254.1085 - false_negatives_1: 254.1085 - false_positives: 441.5359 - loss: 0.1958 - precision: 0.8684 - recall: 0.9190 - true_negatives: 4881.8340 - true_positives: 2910.4783 - val_acc: 0.9223 - val_auc: 0.9744 - val_false_negatives: 147.0000 - val_false_negatives_1: 147.0000 - val_false_positives: 182.0000 - val_loss: 0.1917 - val_precision: 0.8877 - val_recall: 0.9073 - val_true_negatives: 2466.0000 - val_true_positives: 1438.0000 - learning_rate: 5.4881e-04\n", "Epoch 18/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9188 - auc: 0.9728 - false_negatives: 236.0472 - false_negatives_1: 236.0472 - false_positives: 438.9340 - loss: 0.1949 - precision: 0.8676 - recall: 0.9252 - true_negatives: 4882.0483 - true_positives: 2930.9272 - val_acc: 0.9211 - val_auc: 0.9754 - val_false_negatives: 104.0000 - val_false_negatives_1: 104.0000 - val_false_positives: 230.0000 - val_loss: 0.1895 - val_precision: 0.8656 - val_recall: 0.9344 - val_true_negatives: 2418.0000 - val_true_positives: 1481.0000 - learning_rate: 4.9659e-04\n", "Epoch 19/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 5ms/step - acc: 0.9203 - auc: 0.9727 - false_negatives: 247.0830 - false_negatives_1: 247.0830 - false_positives: 429.5802 - loss: 0.1923 - precision: 0.8710 - recall: 0.9206 - true_negatives: 4901.9375 - true_positives: 2909.3557 - val_acc: 0.9242 - val_auc: 0.9761 - val_false_negatives: 100.0000 - val_false_negatives_1: 100.0000 - val_false_positives: 221.0000 - val_loss: 0.1849 - val_precision: 0.8705 - val_recall: 0.9369 - val_true_negatives: 2427.0000 - val_true_positives: 1485.0000 - learning_rate: 4.4933e-04\n", "Epoch 20/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9191 - auc: 0.9751 - false_negatives: 234.6953 - false_negatives_1: 234.6953 - false_positives: 452.0359 - loss: 0.1865 - precision: 0.8664 - recall: 0.9278 - true_negatives: 4854.7847 - true_positives: 2946.4407 - val_acc: 0.9244 - val_auc: 0.9761 - val_false_negatives: 122.0000 - val_false_negatives_1: 122.0000 - val_false_positives: 198.0000 - val_loss: 0.1825 - val_precision: 0.8808 - val_recall: 0.9230 - val_true_negatives: 2450.0000 - val_true_positives: 1463.0000 - learning_rate: 4.0657e-04\n", "Epoch 21/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9211 - auc: 0.9751 - false_negatives: 229.6538 - false_negatives_1: 229.6538 - false_positives: 430.5726 - loss: 0.1857 - precision: 0.8731 - recall: 0.9278 - true_negatives: 4860.5010 - true_positives: 2967.2292 - val_acc: 0.9253 - val_auc: 0.9765 - val_false_negatives: 127.0000 - val_false_negatives_1: 127.0000 - val_false_positives: 189.0000 - val_loss: 0.1818 - val_precision: 0.8852 - val_recall: 0.9199 - val_true_negatives: 2459.0000 - val_true_positives: 1458.0000 - learning_rate: 3.6788e-04\n", "Epoch 22/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 6ms/step - acc: 0.9214 - auc: 0.9764 - false_negatives: 237.1085 - false_negatives_1: 237.1085 - false_positives: 432.9113 - loss: 0.1793 - precision: 0.8690 - recall: 0.9246 - true_negatives: 4916.2075 - true_positives: 2901.7292 - val_acc: 0.9242 - val_auc: 0.9763 - val_false_negatives: 123.0000 - val_false_negatives_1: 123.0000 - val_false_positives: 198.0000 - val_loss: 0.1824 - val_precision: 0.8807 - val_recall: 0.9224 - val_true_negatives: 2450.0000 - val_true_positives: 1462.0000 - learning_rate: 3.3287e-04\n", "Epoch 23/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - acc: 0.9224 - auc: 0.9753 - false_negatives: 241.6745 - false_negatives_1: 241.6745 - false_positives: 421.4113 - loss: 0.1850 - precision: 0.8767 - recall: 0.9229 - true_negatives: 4888.4961 - true_positives: 2936.3745 - val_acc: 0.9150 - val_auc: 0.9746 - val_false_negatives: 183.0000 - val_false_negatives_1: 183.0000 - val_false_positives: 177.0000 - val_loss: 0.1976 - val_precision: 0.8879 - val_recall: 0.8845 - val_true_negatives: 2471.0000 - val_true_positives: 1402.0000 - learning_rate: 3.0119e-04\n", "Epoch 24/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 6ms/step - acc: 0.9204 - auc: 0.9747 - false_negatives: 243.5802 - false_negatives_1: 243.5802 - false_positives: 418.4547 - loss: 0.1851 - precision: 0.8758 - recall: 0.9180 - true_negatives: 4890.4097 - true_positives: 2935.5122 - val_acc: 0.9261 - val_auc: 0.9772 - val_false_negatives: 108.0000 - val_false_negatives_1: 108.0000 - val_false_positives: 205.0000 - val_loss: 0.1792 - val_precision: 0.8781 - val_recall: 0.9319 - val_true_negatives: 2443.0000 - val_true_positives: 1477.0000 - learning_rate: 2.7253e-04\n", "Epoch 25/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - acc: 0.9229 - auc: 0.9759 - false_negatives: 228.1038 - false_negatives_1: 228.1038 - false_positives: 422.6179 - loss: 0.1795 - precision: 0.8726 - recall: 0.9276 - true_negatives: 4914.9766 - true_positives: 2922.2585 - val_acc: 0.9246 - val_auc: 0.9762 - val_false_negatives: 123.0000 - val_false_negatives_1: 123.0000 - val_false_positives: 196.0000 - val_loss: 0.1803 - val_precision: 0.8818 - val_recall: 0.9224 - val_true_negatives: 2452.0000 - val_true_positives: 1462.0000 - learning_rate: 2.4660e-04\n", "Epoch 26/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 6ms/step - acc: 0.9249 - auc: 0.9767 - false_negatives: 221.3736 - false_negatives_1: 221.3736 - false_positives: 420.6783 - loss: 0.1770 - precision: 0.8746 - recall: 0.9328 - true_negatives: 4900.1851 - true_positives: 2945.7197 - val_acc: 0.9251 - val_auc: 0.9762 - val_false_negatives: 122.0000 - val_false_negatives_1: 122.0000 - val_false_positives: 195.0000 - val_loss: 0.1805 - val_precision: 0.8824 - val_recall: 0.9230 - val_true_negatives: 2453.0000 - val_true_positives: 1463.0000 - learning_rate: 2.2313e-04\n", "Epoch 27/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - acc: 0.9248 - auc: 0.9769 - false_negatives: 225.0981 - false_negatives_1: 225.0981 - false_positives: 409.7236 - loss: 0.1771 - precision: 0.8791 - recall: 0.9262 - true_negatives: 4911.6113 - true_positives: 2941.5237 - val_acc: 0.9232 - val_auc: 0.9769 - val_false_negatives: 100.0000 - val_false_negatives_1: 100.0000 - val_false_positives: 225.0000 - val_loss: 0.1814 - val_precision: 0.8684 - val_recall: 0.9369 - val_true_negatives: 2423.0000 - val_true_positives: 1485.0000 - learning_rate: 2.0190e-04\n", "Epoch 28/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - acc: 0.9243 - auc: 0.9769 - false_negatives: 224.8500 - false_negatives_1: 224.8500 - false_positives: 408.6547 - loss: 0.1741 - precision: 0.8753 - recall: 0.9279 - true_negatives: 4909.5981 - true_positives: 2944.8538 - val_acc: 0.9230 - val_auc: 0.9758 - val_false_negatives: 149.0000 - val_false_negatives_1: 149.0000 - val_false_positives: 177.0000 - val_loss: 0.1869 - val_precision: 0.8903 - val_recall: 0.9060 - val_true_negatives: 2471.0000 - val_true_positives: 1436.0000 - learning_rate: 1.8268e-04\n", "Epoch 29/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 4ms/step - acc: 0.9230 - auc: 0.9760 - false_negatives: 234.0189 - false_negatives_1: 234.0189 - false_positives: 408.0641 - loss: 0.1807 - precision: 0.8755 - recall: 0.9245 - true_negatives: 4916.6602 - true_positives: 2929.2131 - val_acc: 0.9244 - val_auc: 0.9767 - val_false_negatives: 118.0000 - val_false_negatives_1: 118.0000 - val_false_positives: 202.0000 - val_loss: 0.1785 - val_precision: 0.8790 - val_recall: 0.9256 - val_true_negatives: 2446.0000 - val_true_positives: 1467.0000 - learning_rate: 1.6530e-04\n", "Epoch 30/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9263 - auc: 0.9781 - false_negatives: 220.4953 - false_negatives_1: 220.4953 - false_positives: 406.4207 - loss: 0.1714 - precision: 0.8782 - recall: 0.9313 - true_negatives: 4924.4644 - true_positives: 2936.5764 - val_acc: 0.9249 - val_auc: 0.9769 - val_false_negatives: 137.0000 - val_false_negatives_1: 137.0000 - val_false_positives: 181.0000 - val_loss: 0.1814 - val_precision: 0.8889 - val_recall: 0.9136 - val_true_negatives: 2467.0000 - val_true_positives: 1448.0000 - learning_rate: 1.4957e-04\n", "Epoch 31/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 6ms/step - acc: 0.9265 - auc: 0.9776 - false_negatives: 216.2509 - false_negatives_1: 216.2509 - false_positives: 405.2868 - loss: 0.1753 - precision: 0.8785 - recall: 0.9338 - true_negatives: 4891.3237 - true_positives: 2975.0952 - val_acc: 0.9253 - val_auc: 0.9772 - val_false_negatives: 134.0000 - val_false_negatives_1: 134.0000 - val_false_positives: 182.0000 - val_loss: 0.1801 - val_precision: 0.8885 - val_recall: 0.9155 - val_true_negatives: 2466.0000 - val_true_positives: 1451.0000 - learning_rate: 1.3534e-04\n", "Epoch 32/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - acc: 0.9255 - auc: 0.9772 - false_negatives: 225.7311 - false_negatives_1: 225.7311 - false_positives: 404.6302 - loss: 0.1728 - precision: 0.8753 - recall: 0.9282 - true_negatives: 4944.0312 - true_positives: 2913.5642 - val_acc: 0.9261 - val_auc: 0.9773 - val_false_negatives: 105.0000 - val_false_negatives_1: 105.0000 - val_false_positives: 208.0000 - val_loss: 0.1770 - val_precision: 0.8768 - val_recall: 0.9338 - val_true_negatives: 2440.0000 - val_true_positives: 1480.0000 - learning_rate: 1.2246e-04\n", "Epoch 33/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - acc: 0.9264 - auc: 0.9779 - false_negatives: 223.5575 - false_negatives_1: 223.5575 - false_positives: 410.8311 - loss: 0.1711 - precision: 0.8768 - recall: 0.9283 - true_negatives: 4965.4829 - true_positives: 2888.0850 - val_acc: 0.9249 - val_auc: 0.9777 - val_false_negatives: 107.0000 - val_false_negatives_1: 107.0000 - val_false_positives: 211.0000 - val_loss: 0.1763 - val_precision: 0.8751 - val_recall: 0.9325 - val_true_negatives: 2437.0000 - val_true_positives: 1478.0000 - learning_rate: 1.1080e-04\n", "Epoch 34/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - acc: 0.9262 - auc: 0.9785 - false_negatives: 215.5972 - false_negatives_1: 215.5972 - false_positives: 415.5632 - loss: 0.1698 - precision: 0.8757 - recall: 0.9338 - true_negatives: 4914.4746 - true_positives: 2942.3218 - val_acc: 0.9242 - val_auc: 0.9770 - val_false_negatives: 101.0000 - val_false_negatives_1: 101.0000 - val_false_positives: 220.0000 - val_loss: 0.1787 - val_precision: 0.8709 - val_recall: 0.9363 - val_true_negatives: 2428.0000 - val_true_positives: 1484.0000 - learning_rate: 1.0026e-04\n", "Epoch 35/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 5ms/step - acc: 0.9288 - auc: 0.9793 - false_negatives: 212.0670 - false_negatives_1: 212.0670 - false_positives: 398.7594 - loss: 0.1655 - precision: 0.8805 - recall: 0.9358 - true_negatives: 4919.8198 - true_positives: 2957.3103 - val_acc: 0.9253 - val_auc: 0.9771 - val_false_negatives: 125.0000 - val_false_negatives_1: 125.0000 - val_false_positives: 191.0000 - val_loss: 0.1778 - val_precision: 0.8843 - val_recall: 0.9211 - val_true_negatives: 2457.0000 - val_true_positives: 1460.0000 - learning_rate: 9.0718e-05\n", "Epoch 36/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9288 - auc: 0.9791 - false_negatives: 217.1302 - false_negatives_1: 217.1302 - false_positives: 409.3745 - loss: 0.1676 - precision: 0.8809 - recall: 0.9346 - true_negatives: 4919.0474 - true_positives: 2942.4048 - val_acc: 0.9256 - val_auc: 0.9771 - val_false_negatives: 117.0000 - val_false_negatives_1: 117.0000 - val_false_positives: 198.0000 - val_loss: 0.1768 - val_precision: 0.8812 - val_recall: 0.9262 - val_true_negatives: 2450.0000 - val_true_positives: 1468.0000 - learning_rate: 8.2085e-05\n", "Epoch 37/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 4ms/step - acc: 0.9257 - auc: 0.9787 - false_negatives: 218.8642 - false_negatives_1: 218.8642 - false_positives: 411.4877 - loss: 0.1688 - precision: 0.8784 - recall: 0.9307 - true_negatives: 4907.3237 - true_positives: 2950.2812 - val_acc: 0.9251 - val_auc: 0.9774 - val_false_negatives: 106.0000 - val_false_negatives_1: 106.0000 - val_false_positives: 211.0000 - val_loss: 0.1766 - val_precision: 0.8751 - val_recall: 0.9331 - val_true_negatives: 2437.0000 - val_true_positives: 1479.0000 - learning_rate: 7.4274e-05\n", "Epoch 38/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 5ms/step - acc: 0.9265 - auc: 0.9793 - false_negatives: 217.7292 - false_negatives_1: 217.7292 - false_positives: 413.4085 - loss: 0.1668 - precision: 0.8776 - recall: 0.9302 - true_negatives: 4931.0566 - true_positives: 2925.7622 - val_acc: 0.9256 - val_auc: 0.9774 - val_false_negatives: 113.0000 - val_false_negatives_1: 113.0000 - val_false_positives: 202.0000 - val_loss: 0.1762 - val_precision: 0.8793 - val_recall: 0.9287 - val_true_negatives: 2446.0000 - val_true_positives: 1472.0000 - learning_rate: 6.7206e-05\n", "Epoch 39/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9254 - auc: 0.9775 - false_negatives: 219.4245 - false_negatives_1: 219.4245 - false_positives: 403.1764 - loss: 0.1738 - precision: 0.8786 - recall: 0.9282 - true_negatives: 4920.0640 - true_positives: 2945.2915 - val_acc: 0.9249 - val_auc: 0.9772 - val_false_negatives: 130.0000 - val_false_negatives_1: 130.0000 - val_false_positives: 188.0000 - val_loss: 0.1783 - val_precision: 0.8856 - val_recall: 0.9180 - val_true_negatives: 2460.0000 - val_true_positives: 1455.0000 - learning_rate: 6.0810e-05\n", "Epoch 40/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9254 - auc: 0.9770 - false_negatives: 223.1670 - false_negatives_1: 223.1670 - false_positives: 405.3330 - loss: 0.1750 - precision: 0.8777 - recall: 0.9279 - true_negatives: 4914.5200 - true_positives: 2944.9368 - val_acc: 0.9253 - val_auc: 0.9774 - val_false_negatives: 119.0000 - val_false_negatives_1: 119.0000 - val_false_positives: 197.0000 - val_loss: 0.1760 - val_precision: 0.8815 - val_recall: 0.9249 - val_true_negatives: 2451.0000 - val_true_positives: 1466.0000 - learning_rate: 5.5023e-05\n", "Epoch 41/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - acc: 0.9259 - auc: 0.9763 - false_negatives: 219.2538 - false_negatives_1: 219.2538 - false_positives: 406.4641 - loss: 0.1769 - precision: 0.8794 - recall: 0.9288 - true_negatives: 4907.5669 - true_positives: 2954.6716 - val_acc: 0.9251 - val_auc: 0.9771 - val_false_negatives: 115.0000 - val_false_negatives_1: 115.0000 - val_false_positives: 202.0000 - val_loss: 0.1760 - val_precision: 0.8792 - val_recall: 0.9274 - val_true_negatives: 2446.0000 - val_true_positives: 1470.0000 - learning_rate: 4.9787e-05\n", "Epoch 42/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - acc: 0.9258 - auc: 0.9767 - false_negatives: 220.5613 - false_negatives_1: 220.5613 - false_positives: 415.4415 - loss: 0.1758 - precision: 0.8767 - recall: 0.9306 - true_negatives: 4919.8774 - true_positives: 2932.0764 - val_acc: 0.9251 - val_auc: 0.9772 - val_false_negatives: 123.0000 - val_false_negatives_1: 123.0000 - val_false_positives: 194.0000 - val_loss: 0.1766 - val_precision: 0.8829 - val_recall: 0.9224 - val_true_negatives: 2454.0000 - val_true_positives: 1462.0000 - learning_rate: 4.5049e-05\n", "Epoch 43/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - acc: 0.9246 - auc: 0.9771 - false_negatives: 217.8321 - false_negatives_1: 217.8321 - false_positives: 417.0085 - loss: 0.1727 - precision: 0.8741 - recall: 0.9312 - true_negatives: 4915.7856 - true_positives: 2937.3301 - val_acc: 0.9263 - val_auc: 0.9773 - val_false_negatives: 111.0000 - val_false_negatives_1: 111.0000 - val_false_positives: 201.0000 - val_loss: 0.1753 - val_precision: 0.8800 - val_recall: 0.9300 - val_true_negatives: 2447.0000 - val_true_positives: 1474.0000 - learning_rate: 4.0762e-05\n", "Epoch 44/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - acc: 0.9289 - auc: 0.9789 - false_negatives: 212.8189 - false_negatives_1: 212.8189 - false_positives: 400.7179 - loss: 0.1669 - precision: 0.8819 - recall: 0.9342 - true_negatives: 4927.9678 - true_positives: 2946.4519 - val_acc: 0.9256 - val_auc: 0.9773 - val_false_negatives: 116.0000 - val_false_negatives_1: 116.0000 - val_false_positives: 199.0000 - val_loss: 0.1756 - val_precision: 0.8807 - val_recall: 0.9268 - val_true_negatives: 2449.0000 - val_true_positives: 1469.0000 - learning_rate: 3.6883e-05\n", "Epoch 45/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - acc: 0.9268 - auc: 0.9786 - false_negatives: 211.5358 - false_negatives_1: 211.5358 - false_positives: 401.1283 - loss: 0.1696 - precision: 0.8774 - recall: 0.9325 - true_negatives: 4934.2866 - true_positives: 2941.0056 - val_acc: 0.9265 - val_auc: 0.9775 - val_false_negatives: 109.0000 - val_false_negatives_1: 109.0000 - val_false_positives: 202.0000 - val_loss: 0.1755 - val_precision: 0.8796 - val_recall: 0.9312 - val_true_negatives: 2446.0000 - val_true_positives: 1476.0000 - learning_rate: 3.3373e-05\n", "Epoch 46/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9258 - auc: 0.9778 - false_negatives: 215.5047 - false_negatives_1: 215.5047 - false_positives: 409.5302 - loss: 0.1718 - precision: 0.8781 - recall: 0.9299 - true_negatives: 4909.0386 - true_positives: 2953.8831 - val_acc: 0.9246 - val_auc: 0.9773 - val_false_negatives: 126.0000 - val_false_negatives_1: 126.0000 - val_false_positives: 193.0000 - val_loss: 0.1773 - val_precision: 0.8832 - val_recall: 0.9205 - val_true_negatives: 2455.0000 - val_true_positives: 1459.0000 - learning_rate: 3.0197e-05\n", "Epoch 47/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - acc: 0.9271 - auc: 0.9785 - false_negatives: 213.9302 - false_negatives_1: 213.9302 - false_positives: 403.8387 - loss: 0.1697 - precision: 0.8806 - recall: 0.9316 - true_negatives: 4915.9414 - true_positives: 2954.2463 - val_acc: 0.9265 - val_auc: 0.9772 - val_false_negatives: 108.0000 - val_false_negatives_1: 108.0000 - val_false_positives: 203.0000 - val_loss: 0.1753 - val_precision: 0.8792 - val_recall: 0.9319 - val_true_negatives: 2445.0000 - val_true_positives: 1477.0000 - learning_rate: 2.7324e-05\n", "Epoch 48/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - acc: 0.9279 - auc: 0.9783 - false_negatives: 210.7793 - false_negatives_1: 210.7793 - false_positives: 403.8424 - loss: 0.1697 - precision: 0.8805 - recall: 0.9342 - true_negatives: 4908.6602 - true_positives: 2964.6746 - val_acc: 0.9256 - val_auc: 0.9774 - val_false_negatives: 114.0000 - val_false_negatives_1: 114.0000 - val_false_positives: 201.0000 - val_loss: 0.1752 - val_precision: 0.8798 - val_recall: 0.9281 - val_true_negatives: 2447.0000 - val_true_positives: 1471.0000 - learning_rate: 2.4724e-05\n", "Epoch 49/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9306 - auc: 0.9808 - false_negatives: 211.3981 - false_negatives_1: 211.3981 - false_positives: 399.8443 - loss: 0.1614 - precision: 0.8854 - recall: 0.9350 - true_negatives: 4940.6113 - true_positives: 2936.1028 - val_acc: 0.9253 - val_auc: 0.9775 - val_false_negatives: 118.0000 - val_false_negatives_1: 118.0000 - val_false_positives: 198.0000 - val_loss: 0.1755 - val_precision: 0.8811 - val_recall: 0.9256 - val_true_negatives: 2450.0000 - val_true_positives: 1467.0000 - learning_rate: 2.2371e-05\n", "Epoch 50/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 4ms/step - acc: 0.9269 - auc: 0.9775 - false_negatives: 213.9679 - false_negatives_1: 213.9679 - false_positives: 410.8953 - loss: 0.1729 - precision: 0.8798 - recall: 0.9307 - true_negatives: 4918.9453 - true_positives: 2944.1482 - val_acc: 0.9261 - val_auc: 0.9775 - val_false_negatives: 109.0000 - val_false_negatives_1: 109.0000 - val_false_positives: 204.0000 - val_loss: 0.1749 - val_precision: 0.8786 - val_recall: 0.9312 - val_true_negatives: 2444.0000 - val_true_positives: 1476.0000 - learning_rate: 2.0242e-05\n", "Epoch 51/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - acc: 0.9263 - auc: 0.9778 - false_negatives: 222.8009 - false_negatives_1: 222.8009 - false_positives: 401.1557 - loss: 0.1721 - precision: 0.8786 - recall: 0.9274 - true_negatives: 4943.9067 - true_positives: 2920.0935 - val_acc: 0.9244 - val_auc: 0.9773 - val_false_negatives: 126.0000 - val_false_negatives_1: 126.0000 - val_false_positives: 194.0000 - val_loss: 0.1770 - val_precision: 0.8826 - val_recall: 0.9205 - val_true_negatives: 2454.0000 - val_true_positives: 1459.0000 - learning_rate: 1.8316e-05\n", "Epoch 52/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9270 - auc: 0.9770 - false_negatives: 220.1217 - false_negatives_1: 220.1217 - false_positives: 396.9462 - loss: 0.1750 - precision: 0.8807 - recall: 0.9286 - true_negatives: 4948.0605 - true_positives: 2922.8284 - val_acc: 0.9263 - val_auc: 0.9772 - val_false_negatives: 112.0000 - val_false_negatives_1: 112.0000 - val_false_positives: 200.0000 - val_loss: 0.1753 - val_precision: 0.8805 - val_recall: 0.9293 - val_true_negatives: 2448.0000 - val_true_positives: 1473.0000 - learning_rate: 1.6573e-05\n", "Epoch 53/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9263 - auc: 0.9778 - false_negatives: 224.3538 - false_negatives_1: 224.3538 - false_positives: 407.7726 - loss: 0.1724 - precision: 0.8804 - recall: 0.9299 - true_negatives: 4891.4526 - true_positives: 2964.3774 - val_acc: 0.9246 - val_auc: 0.9774 - val_false_negatives: 121.0000 - val_false_negatives_1: 121.0000 - val_false_positives: 198.0000 - val_loss: 0.1760 - val_precision: 0.8809 - val_recall: 0.9237 - val_true_negatives: 2450.0000 - val_true_positives: 1464.0000 - learning_rate: 1.4996e-05\n", "Epoch 54/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - acc: 0.9287 - auc: 0.9789 - false_negatives: 209.6726 - false_negatives_1: 209.6726 - false_positives: 399.6755 - loss: 0.1682 - precision: 0.8800 - recall: 0.9364 - true_negatives: 4921.8257 - true_positives: 2956.7830 - val_acc: 0.9251 - val_auc: 0.9774 - val_false_negatives: 118.0000 - val_false_negatives_1: 118.0000 - val_false_positives: 199.0000 - val_loss: 0.1755 - val_precision: 0.8806 - val_recall: 0.9256 - val_true_negatives: 2449.0000 - val_true_positives: 1467.0000 - learning_rate: 1.3569e-05\n", "Epoch 55/100\n", "\u001b[1m1059/1059\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 4ms/step - acc: 0.9276 - auc: 0.9782 - false_negatives: 215.0915 - false_negatives_1: 215.0915 - false_positives: 403.1726 - loss: 0.1700 - precision: 0.8812 - recall: 0.9326 - true_negatives: 4912.7690 - true_positives: 2956.9236 - val_acc: 0.9265 - val_auc: 0.9774 - val_false_negatives: 110.0000 - val_false_negatives_1: 110.0000 - val_false_positives: 201.0000 - val_loss: 0.1751 - val_precision: 0.8801 - val_recall: 0.9306 - val_true_negatives: 2447.0000 - val_true_positives: 1475.0000 - learning_rate: 1.2277e-05\n", "Finish Training LSTM Model\n" ] } ] }, { "cell_type": "code", "source": [ "lstm_model.summary()\n", "lstm_model.save(\"/content/drive/My Drive/FYP/LSTM/lstm_model.h5\")" ], "metadata": { "id": "xLttAVtvj6qW", "colab": { "base_uri": "https://localhost:8080/", "height": 274 }, "outputId": "78add4eb-6e7f-42b6-fe0a-813aa1ff6397" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "\u001b[1mModel: \"sequential\"\u001b[0m\n" ], "text/html": [ "
Model: \"sequential\"\n",
"
\n"
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n",
"┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n",
"│ lstm (\u001b[38;5;33mLSTM\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m16\u001b[0m) │ \u001b[38;5;34m5,120\u001b[0m │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ lstm_1 (\u001b[38;5;33mLSTM\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m) │ \u001b[38;5;34m2,112\u001b[0m │\n",
"├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n",
"│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m17\u001b[0m │\n",
"└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n"
],
"text/html": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓\n", "┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩\n", "│ lstm (LSTM) │ (None, 1, 16) │ 5,120 │\n", "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", "│ lstm_1 (LSTM) │ (None, 16) │ 2,112 │\n", "├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤\n", "│ dense (Dense) │ (None, 1) │ 17 │\n", "└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘\n", "\n" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m14,500\u001b[0m (56.64 KB)\n" ], "text/html": [ "
Total params: 14,500 (56.64 KB)\n", "\n" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m7,249\u001b[0m (28.32 KB)\n" ], "text/html": [ "
Trainable params: 7,249 (28.32 KB)\n", "\n" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" ], "text/html": [ "
Non-trainable params: 0 (0.00 B)\n", "\n" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "\u001b[1m Optimizer params: \u001b[0m\u001b[38;5;34m7,251\u001b[0m (28.33 KB)\n" ], "text/html": [ "
Optimizer params: 7,251 (28.33 KB)\n", "\n" ] }, "metadata": {} }, { "output_type": "stream", "name": "stderr", "text": [ "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" ] } ] }, { "cell_type": "code", "source": [ "import matplotlib.pyplot as plt\n", "\n", "def plotting_training(history):\n", "\n", " # Plot training & validation accuracy values\n", " plt.plot(history.history['acc'])\n", " plt.plot(history.history['val_acc'])\n", " plt.title('Model accuracy')\n", " plt.ylabel('Accuracy')\n", " plt.xlabel('Epoch')\n", " plt.legend(['Train Accuracy', 'Validation Accuracy'], loc='lower right')\n", " plt.show()\n", "\n", " # Plot training & validation loss values\n", " loss = history.history['loss']\n", " val_loss = history.history['val_loss']\n", " epochs = range(1, len(loss) + 1)\n", " plt.figure()\n", " plt.plot(epochs, loss, 'bo', label=\"Training loss\")\n", " plt.plot(epochs, val_loss, 'b', label='Validation loss')\n", " plt.title('Training & Validation loss')\n", " plt.xlabel('epoch', fontsize=10)\n", " plt.ylabel('loss', fontsize=10)\n", " plt.ylim(0.0,0.5)\n", " plt.legend()\n", " plt.show()" ], "metadata": { "id": "0E5n7TeVpmXW" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "plotting_training(lstm_history)" ], "metadata": { "id": "XZKZRFr0px9X", "colab": { "base_uri": "https://localhost:8080/", "height": 927 }, "outputId": "bef3ed4d-96fc-4f00-a329-c9f5021226af" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "