{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# GUARDSHIELD_CNNLSTM \n", "# Version 1.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Loading Dataset" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "c:\\Users\\laksh\\anaconda3\\envs\\tf\\lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n", "HTTP Error 502 thrown while requesting GET https://huggingface.co/datasets/racdroid/cicds-2017/resolve/main/cleaned_data.csv\n", "Retrying in 1s [Retry 1/5].\n" ] } ], "source": [ "import pandas as pd\n", "\n", "df = pd.read_csv(\"hf://datasets/racdroid/cicds-2017/cleaned_data.csv\", engine='pyarrow')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dataset Enumeration" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Destination PortFlow DurationTotal Fwd PacketsTotal Backward PacketsTotal Length of Fwd PacketsTotal Length of Bwd PacketsFwd Packet Length MaxFwd Packet Length MinFwd Packet Length MeanFwd Packet Length Std...min_seg_size_forwardActive MeanActive StdActive MaxActive MinIdle MeanIdle StdIdle MaxIdle MinLabel
049188420120666.00.0...200.00.0000.00.000BENIGN
149188120120666.00.0...200.00.0000.00.000BENIGN
249188120120666.00.0...200.00.0000.00.000BENIGN
349188120120666.00.0...200.00.0000.00.000BENIGN
449486320120666.00.0...200.00.0000.00.000BENIGN
\n", "

5 rows × 67 columns

\n", "
" ], "text/plain": [ " Destination Port Flow Duration Total Fwd Packets \\\n", "0 49188 4 2 \n", "1 49188 1 2 \n", "2 49188 1 2 \n", "3 49188 1 2 \n", "4 49486 3 2 \n", "\n", " Total Backward Packets Total Length of Fwd Packets \\\n", "0 0 12 \n", "1 0 12 \n", "2 0 12 \n", "3 0 12 \n", "4 0 12 \n", "\n", " Total Length of Bwd Packets Fwd Packet Length Max \\\n", "0 0 6 \n", "1 0 6 \n", "2 0 6 \n", "3 0 6 \n", "4 0 6 \n", "\n", " Fwd Packet Length Min Fwd Packet Length Mean Fwd Packet Length Std \\\n", "0 6 6.0 0.0 \n", "1 6 6.0 0.0 \n", "2 6 6.0 0.0 \n", "3 6 6.0 0.0 \n", "4 6 6.0 0.0 \n", "\n", " ... min_seg_size_forward Active Mean Active Std Active Max \\\n", "0 ... 20 0.0 0.0 0 \n", "1 ... 20 0.0 0.0 0 \n", "2 ... 20 0.0 0.0 0 \n", "3 ... 20 0.0 0.0 0 \n", "4 ... 20 0.0 0.0 0 \n", "\n", " Active Min Idle Mean Idle Std Idle Max Idle Min Label \n", "0 0 0.0 0.0 0 0 BENIGN \n", "1 0 0.0 0.0 0 0 BENIGN \n", "2 0 0.0 0.0 0 0 BENIGN \n", "3 0 0.0 0.0 0 0 BENIGN \n", "4 0 0.0 0.0 0 0 BENIGN \n", "\n", "[5 rows x 67 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2827876, 67)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.shape" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ " Destination Port int64\n", " Flow Duration int64\n", " Total Fwd Packets int64\n", " Total Backward Packets int64\n", "Total Length of Fwd Packets int64\n", " ... \n", "Idle Mean float64\n", " Idle Std float64\n", " Idle Max int64\n", " Idle Min int64\n", " Label object\n", "Length: 67, dtype: object" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.dtypes" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Destination PortFlow DurationTotal Fwd PacketsTotal Backward PacketsTotal Length of Fwd PacketsTotal Length of Bwd PacketsFwd Packet Length MaxFwd Packet Length MinFwd Packet Length MeanFwd Packet Length Std...act_data_pkt_fwdmin_seg_size_forwardActive MeanActive StdActive MaxActive MinIdle MeanIdle StdIdle MaxIdle Min
count2.827876e+062.827876e+062.827876e+062.827876e+062.827876e+062.827876e+062.827876e+062.827876e+062.827876e+062.827876e+06...2.827876e+062.827876e+062.827876e+062.827876e+062.827876e+062.827876e+062.827876e+062.827876e+062.827876e+062.827876e+06
mean8.061534e+031.480065e+079.368972e+001.040396e+015.498522e+021.617903e+042.078044e+021.872929e+015.825628e+016.897811e+01...5.423519e+00-2.744494e+038.163400e+044.117582e+041.533378e+055.835492e+048.324468e+065.043548e+058.704568e+067.928061e+06
std1.827432e+043.366750e+077.500527e+029.978937e+029.998639e+032.264235e+067.175183e+026.035533e+011.861733e+022.813212e+02...6.367482e+021.085539e+066.489234e+053.935787e+051.026333e+065.773818e+052.364057e+074.605289e+062.437766e+072.337390e+07
min0.000000e+00-1.300000e+011.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+00-5.368707e+080.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
25%5.300000e+011.550000e+022.000000e+001.000000e+001.200000e+012.000000e+006.000000e+000.000000e+006.000000e+000.000000e+00...0.000000e+002.000000e+010.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
50%8.000000e+013.133800e+042.000000e+002.000000e+006.200000e+011.230000e+023.700000e+012.000000e+003.400000e+010.000000e+00...1.000000e+002.400000e+010.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
75%4.430000e+023.239368e+065.000000e+004.000000e+001.880000e+024.840000e+028.100000e+013.600000e+015.000000e+012.616295e+01...2.000000e+003.200000e+010.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
max6.553500e+041.200000e+082.197590e+052.919220e+051.290000e+076.554530e+082.482000e+042.325000e+035.940857e+037.125597e+03...2.135570e+051.380000e+021.100000e+087.420000e+071.100000e+081.100000e+081.200000e+087.690000e+071.200000e+081.200000e+08
\n", "

8 rows × 66 columns

\n", "
" ], "text/plain": [ " Destination Port Flow Duration Total Fwd Packets \\\n", "count 2.827876e+06 2.827876e+06 2.827876e+06 \n", "mean 8.061534e+03 1.480065e+07 9.368972e+00 \n", "std 1.827432e+04 3.366750e+07 7.500527e+02 \n", "min 0.000000e+00 -1.300000e+01 1.000000e+00 \n", "25% 5.300000e+01 1.550000e+02 2.000000e+00 \n", "50% 8.000000e+01 3.133800e+04 2.000000e+00 \n", "75% 4.430000e+02 3.239368e+06 5.000000e+00 \n", "max 6.553500e+04 1.200000e+08 2.197590e+05 \n", "\n", " Total Backward Packets Total Length of Fwd Packets \\\n", "count 2.827876e+06 2.827876e+06 \n", "mean 1.040396e+01 5.498522e+02 \n", "std 9.978937e+02 9.998639e+03 \n", "min 0.000000e+00 0.000000e+00 \n", "25% 1.000000e+00 1.200000e+01 \n", "50% 2.000000e+00 6.200000e+01 \n", "75% 4.000000e+00 1.880000e+02 \n", "max 2.919220e+05 1.290000e+07 \n", "\n", " Total Length of Bwd Packets Fwd Packet Length Max \\\n", "count 2.827876e+06 2.827876e+06 \n", "mean 1.617903e+04 2.078044e+02 \n", "std 2.264235e+06 7.175183e+02 \n", "min 0.000000e+00 0.000000e+00 \n", "25% 2.000000e+00 6.000000e+00 \n", "50% 1.230000e+02 3.700000e+01 \n", "75% 4.840000e+02 8.100000e+01 \n", "max 6.554530e+08 2.482000e+04 \n", "\n", " Fwd Packet Length Min Fwd Packet Length Mean \\\n", "count 2.827876e+06 2.827876e+06 \n", "mean 1.872929e+01 5.825628e+01 \n", "std 6.035533e+01 1.861733e+02 \n", "min 0.000000e+00 0.000000e+00 \n", "25% 0.000000e+00 6.000000e+00 \n", "50% 2.000000e+00 3.400000e+01 \n", "75% 3.600000e+01 5.000000e+01 \n", "max 2.325000e+03 5.940857e+03 \n", "\n", " Fwd Packet Length Std ... act_data_pkt_fwd min_seg_size_forward \\\n", "count 2.827876e+06 ... 2.827876e+06 2.827876e+06 \n", "mean 6.897811e+01 ... 5.423519e+00 -2.744494e+03 \n", "std 2.813212e+02 ... 6.367482e+02 1.085539e+06 \n", "min 0.000000e+00 ... 0.000000e+00 -5.368707e+08 \n", "25% 0.000000e+00 ... 0.000000e+00 2.000000e+01 \n", "50% 0.000000e+00 ... 1.000000e+00 2.400000e+01 \n", "75% 2.616295e+01 ... 2.000000e+00 3.200000e+01 \n", "max 7.125597e+03 ... 2.135570e+05 1.380000e+02 \n", "\n", " Active Mean Active Std Active Max Active Min Idle Mean \\\n", "count 2.827876e+06 2.827876e+06 2.827876e+06 2.827876e+06 2.827876e+06 \n", "mean 8.163400e+04 4.117582e+04 1.533378e+05 5.835492e+04 8.324468e+06 \n", "std 6.489234e+05 3.935787e+05 1.026333e+06 5.773818e+05 2.364057e+07 \n", "min 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", "50% 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", "75% 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", "max 1.100000e+08 7.420000e+07 1.100000e+08 1.100000e+08 1.200000e+08 \n", "\n", " Idle Std Idle Max Idle Min \n", "count 2.827876e+06 2.827876e+06 2.827876e+06 \n", "mean 5.043548e+05 8.704568e+06 7.928061e+06 \n", "std 4.605289e+06 2.437766e+07 2.337390e+07 \n", "min 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% 0.000000e+00 0.000000e+00 0.000000e+00 \n", "50% 0.000000e+00 0.000000e+00 0.000000e+00 \n", "75% 0.000000e+00 0.000000e+00 0.000000e+00 \n", "max 7.690000e+07 1.200000e+08 1.200000e+08 \n", "\n", "[8 rows x 66 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 2827876 entries, 0 to 2827875\n", "Data columns (total 67 columns):\n", " # Column Dtype \n", "--- ------ ----- \n", " 0 Destination Port int64 \n", " 1 Flow Duration int64 \n", " 2 Total Fwd Packets int64 \n", " 3 Total Backward Packets int64 \n", " 4 Total Length of Fwd Packets int64 \n", " 5 Total Length of Bwd Packets int64 \n", " 6 Fwd Packet Length Max int64 \n", " 7 Fwd Packet Length Min int64 \n", " 8 Fwd Packet Length Mean float64\n", " 9 Fwd Packet Length Std float64\n", " 10 Bwd Packet Length Max int64 \n", " 11 Bwd Packet Length Min int64 \n", " 12 Bwd Packet Length Mean float64\n", " 13 Bwd Packet Length Std float64\n", " 14 Flow Bytes/s float64\n", " 15 Flow Packets/s float64\n", " 16 Flow IAT Mean float64\n", " 17 Flow IAT Std float64\n", " 18 Flow IAT Max int64 \n", " 19 Flow IAT Min int64 \n", " 20 Fwd IAT Total int64 \n", " 21 Fwd IAT Mean float64\n", " 22 Fwd IAT Std float64\n", " 23 Fwd IAT Max int64 \n", " 24 Fwd IAT Min int64 \n", " 25 Bwd IAT Total int64 \n", " 26 Bwd IAT Mean float64\n", " 27 Bwd IAT Std float64\n", " 28 Bwd IAT Max int64 \n", " 29 Bwd IAT Min int64 \n", " 30 Fwd PSH Flags int64 \n", " 31 Fwd Header Length int64 \n", " 32 Bwd Header Length int64 \n", " 33 Fwd Packets/s float64\n", " 34 Bwd Packets/s float64\n", " 35 Min Packet Length int64 \n", " 36 Max Packet Length int64 \n", " 37 Packet Length Mean float64\n", " 38 Packet Length Std float64\n", " 39 Packet Length Variance float64\n", " 40 FIN Flag Count int64 \n", " 41 SYN Flag Count int64 \n", " 42 PSH Flag Count int64 \n", " 43 ACK Flag Count int64 \n", " 44 URG Flag Count int64 \n", " 45 Down/Up Ratio int64 \n", " 46 Average Packet Size float64\n", " 47 Avg Fwd Segment Size float64\n", " 48 Avg Bwd Segment Size float64\n", " 49 Fwd Header Length.1 int64 \n", " 50 Subflow Fwd Packets int64 \n", " 51 Subflow Fwd Bytes int64 \n", " 52 Subflow Bwd Packets int64 \n", " 53 Subflow Bwd Bytes int64 \n", " 54 Init_Win_bytes_forward int64 \n", " 55 Init_Win_bytes_backward int64 \n", " 56 act_data_pkt_fwd int64 \n", " 57 min_seg_size_forward int64 \n", " 58 Active Mean float64\n", " 59 Active Std float64\n", " 60 Active Max int64 \n", " 61 Active Min int64 \n", " 62 Idle Mean float64\n", " 63 Idle Std float64\n", " 64 Idle Max int64 \n", " 65 Idle Min int64 \n", " 66 Label object \n", "dtypes: float64(24), int64(42), object(1)\n", "memory usage: 1.4+ GB\n" ] } ], "source": [ "df.info()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index([' Destination Port', ' Flow Duration', ' Total Fwd Packets',\n", " ' Total Backward Packets', 'Total Length of Fwd Packets',\n", " ' Total Length of Bwd Packets', ' Fwd Packet Length Max',\n", " ' Fwd Packet Length Min', ' Fwd Packet Length Mean',\n", " ' Fwd Packet Length Std', 'Bwd Packet Length Max',\n", " ' Bwd Packet Length Min', ' Bwd Packet Length Mean',\n", " ' Bwd Packet Length Std', 'Flow Bytes/s', ' Flow Packets/s',\n", " ' Flow IAT Mean', ' Flow IAT Std', ' Flow IAT Max', ' Flow IAT Min',\n", " 'Fwd IAT Total', ' Fwd IAT Mean', ' Fwd IAT Std', ' Fwd IAT Max',\n", " ' Fwd IAT Min', 'Bwd IAT Total', ' Bwd IAT Mean', ' Bwd IAT Std',\n", " ' Bwd IAT Max', ' Bwd IAT Min', 'Fwd PSH Flags', ' Fwd Header Length',\n", " ' Bwd Header Length', 'Fwd Packets/s', ' Bwd Packets/s',\n", " ' Min Packet Length', ' Max Packet Length', ' Packet Length Mean',\n", " ' Packet Length Std', ' Packet Length Variance', 'FIN Flag Count',\n", " ' SYN Flag Count', ' PSH Flag Count', ' ACK Flag Count',\n", " ' URG Flag Count', ' Down/Up Ratio', ' Average Packet Size',\n", " ' Avg Fwd Segment Size', ' Avg Bwd Segment Size',\n", " ' Fwd Header Length.1', 'Subflow Fwd Packets', ' Subflow Fwd Bytes',\n", " ' Subflow Bwd Packets', ' Subflow Bwd Bytes', 'Init_Win_bytes_forward',\n", " ' Init_Win_bytes_backward', ' act_data_pkt_fwd',\n", " ' min_seg_size_forward', 'Active Mean', ' Active Std', ' Active Max',\n", " ' Active Min', 'Idle Mean', ' Idle Std', ' Idle Max', ' Idle Min',\n", " ' Label'],\n", " dtype='object')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Preprocessing" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X_train_shape: (2262296, 5, 66), Y_train_shape: (2262296,), X_test_shape:(565575, 5, 66), Y_test_shape: (565575,)\n" ] } ], "source": [ "import numpy as np\n", "from sklearn.preprocessing import LabelEncoder, StandardScaler\n", "from sklearn.model_selection import train_test_split\n", "\n", "# Filling missing numerical values with median\n", "df.dropna()\n", "\n", "\n", "# Encoding labels using LabelEncoder for classification\n", "label_encoder = LabelEncoder()\n", "df['Label'] = label_encoder.fit_transform(df[' Label'])\n", "\n", "# Dropping irrelevant columns\n", "df.drop(columns=[' Label'], inplace=True)\n", "\n", "\n", "# Seperating features and target\n", "X = df.drop(columns=['Label']).values\n", "Y = df['Label'].values\n", "\n", "\n", "# Normalize feature set using StandardScaler\n", "scaler=StandardScaler()\n", "X=scaler.fit_transform(X)\n", "\n", "# Preparing sequences for LSTM\n", "def create_sequences(X, Y, time_steps=5):\n", " Xs, Ys = [],[]\n", " for i in range(len(X) - time_steps):\n", " Xs.append(X[i:i + time_steps])\n", " Ys.append(Y[i+time_steps])\n", " return np.array(Xs), np.array(Ys)\n", "\n", "time_steps = 5\n", "X_seq, Y_seq = create_sequences(X,Y, time_steps)\n", "\n", "# Splitting data into training and testing sets\n", "X_train, X_test, Y_train, Y_test = train_test_split(X_seq, Y_seq, test_size=0.2, random_state=42)\n", "\n", "# Printing\n", "print(f'X_train_shape: {X_train.shape}, Y_train_shape: {Y_train.shape}, X_test_shape:{X_test.shape}, Y_test_shape: {Y_test.shape}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Model Building" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "28279/28279 [==============================] - 108s 4ms/step - loss: 0.1723 - accuracy: 0.9611 - val_loss: 0.1224 - val_accuracy: 0.9714\n", "Epoch 2/20\n", "28279/28279 [==============================] - 109s 4ms/step - loss: 0.1266 - accuracy: 0.9708 - val_loss: 0.1142 - val_accuracy: 0.9729\n", "Epoch 3/20\n", "28279/28279 [==============================] - 109s 4ms/step - loss: 0.1203 - accuracy: 0.9726 - val_loss: 0.1101 - val_accuracy: 0.9752\n", "Epoch 4/20\n", "28279/28279 [==============================] - 95s 3ms/step - loss: 0.1164 - accuracy: 0.9736 - val_loss: 0.1076 - val_accuracy: 0.9760\n", "Epoch 5/20\n", "28279/28279 [==============================] - 103s 4ms/step - loss: 0.1141 - accuracy: 0.9744 - val_loss: 0.1062 - val_accuracy: 0.9762\n", "Epoch 6/20\n", "28279/28279 [==============================] - 112s 4ms/step - loss: 0.1124 - accuracy: 0.9748 - val_loss: 0.1049 - val_accuracy: 0.9765\n", "Epoch 7/20\n", "28279/28279 [==============================] - 126s 4ms/step - loss: 0.1108 - accuracy: 0.9754 - val_loss: 0.1038 - val_accuracy: 0.9773\n", "Epoch 8/20\n", "28279/28279 [==============================] - 128s 5ms/step - loss: 0.1092 - accuracy: 0.9760 - val_loss: 0.1024 - val_accuracy: 0.9781\n", "Epoch 9/20\n", "28279/28279 [==============================] - 123s 4ms/step - loss: 0.1077 - accuracy: 0.9769 - val_loss: 0.1000 - val_accuracy: 0.9789\n", "Epoch 10/20\n", "28279/28279 [==============================] - 131s 5ms/step - loss: 0.1055 - accuracy: 0.9781 - val_loss: 0.0983 - val_accuracy: 0.9800\n", "Epoch 11/20\n", "28279/28279 [==============================] - 131s 5ms/step - loss: 0.1042 - accuracy: 0.9788 - val_loss: 0.0962 - val_accuracy: 0.9814\n", "Epoch 12/20\n", "28279/28279 [==============================] - 115s 4ms/step - loss: 0.1020 - accuracy: 0.9798 - val_loss: 0.0937 - val_accuracy: 0.9821\n", "Epoch 13/20\n", "28279/28279 [==============================] - 123s 4ms/step - loss: 0.1010 - accuracy: 0.9800 - val_loss: 0.0944 - val_accuracy: 0.9815\n", "Epoch 14/20\n", "28279/28279 [==============================] - 128s 5ms/step - loss: 0.1009 - accuracy: 0.9799 - val_loss: 0.0961 - val_accuracy: 0.9809\n", "Epoch 15/20\n", "28279/28279 [==============================] - 131s 5ms/step - loss: 0.1021 - accuracy: 0.9792 - val_loss: 0.0951 - val_accuracy: 0.9813\n", "Epoch 16/20\n", "28279/28279 [==============================] - 110s 4ms/step - loss: 0.1002 - accuracy: 0.9801 - val_loss: 0.0928 - val_accuracy: 0.9826\n", "Epoch 17/20\n", "28279/28279 [==============================] - 118s 4ms/step - loss: 0.0992 - accuracy: 0.9804 - val_loss: 0.0909 - val_accuracy: 0.9826\n", "Epoch 18/20\n", "28279/28279 [==============================] - 116s 4ms/step - loss: 0.0980 - accuracy: 0.9808 - val_loss: 0.0907 - val_accuracy: 0.9827\n", "Epoch 19/20\n", "28279/28279 [==============================] - 112s 4ms/step - loss: 0.0975 - accuracy: 0.9808 - val_loss: 0.0910 - val_accuracy: 0.9828\n", "Epoch 20/20\n", "28279/28279 [==============================] - 140s 5ms/step - loss: 0.0980 - accuracy: 0.9804 - val_loss: 0.0898 - val_accuracy: 0.9827\n", "17675/17675 [==============================] - 34s 2ms/step - loss: 0.9803 - accuracy: 0.9270\n", "Test Loss : 0.9802790284156799, Test Accuracy: 0.9269522428512573\n" ] } ], "source": [ "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dropout, Dense\n", "from tensorflow.keras.optimizers import Adam\n", "from tensorflow.keras.utils import to_categorical\n", "import tensorflow as tf\n", "\n", "Y_train = to_categorical(Y_train, num_classes=15)\n", "Y_test = to_categorical(Y_test, num_classes=15)\n", "\n", "\n", "model=Sequential() \n", "\n", "# CNN Layer\n", "model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(X_train.shape[1], X_train.shape[2])))\n", "model.add(MaxPooling1D(pool_size=2))\n", "model.add(Dropout(0.3))\n", "\n", "# LSTM Layer\n", "model.add(LSTM(100, return_sequences=False))\n", "model.add(Dropout(0.3))\n", "model.add(Dense(15, activation='sigmoid'))\n", "\n", "model.compile(optimizer=Adam(learning_rate=1e-4), loss='categorical_crossentropy', metrics=['accuracy'])\n", "\n", "history=model.fit(X_train,Y_train, epochs=20, batch_size=64, validation_split=0.2)\n", "\n", "loss,accuracy = model.evaluate(X_test, Y_test)\n", "print(f'Test Loss : {loss}, Test Accuracy: {accuracy}')" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "model.save('GuardShield_CNNLSTM_v1.h5')" ] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.13" } }, "nbformat": 4, "nbformat_minor": 2 }