{ "cells": [ { "cell_type": "markdown", "id": "66dd36b3-e847-4a51-8d5b-db21505645d3", "metadata": {}, "source": [ "# SPEECH EMOTION DETECTION\n", "Speech Emotion Detection (SED) is the task of automatically recognizing and classifying emotions conveyed through speech signals. It involves the use of techniques from signal processing, machine learning, and natural language processing (NLP) to analyze vocal cues and identify the emotional state of a speaker.\r\n", "\r\n", "### Key Aspects of Speech Emotion Detection:\r\n", "\r\n", "- **Signal Processing**: Techniques such as feature extraction from audio signals (e.g., MFCC - Mel Frequency Cepstral Coefficients) to capture relevant characteristics related to pitch, intensity, and spectral content that correlate with emotions.\r\n", "\r\n", "- **Feature Engineering**: Selection and transformation of acoustic features that are relevant for distinguishing different emotional states.\r\n", "\r\n", "- **Machine Learning and Deep Learning**: Utilization of various models and algorithms, including traditional machine learning methods (e.g., Support Vector Machines, Random Forests) and deep learning architectures (e.g., Convolutional Neural Networks, Recurrent Neural Networks like LSTM), to classify emotions based on extracted features.\r\n", "\r\n", "- **Emotion Classification**: Assigning one or multiple predefined emotion labels (e.g., happiness, sadness, anger, neutrality) to audio segments based on the analysis of extracted features and model pr\n", "future directions.\r\n", "edictions.\r\n" ] }, { "cell_type": "markdown", "id": "86a9b89c-5976-4e93-96e6-5258ef696328", "metadata": {}, "source": [ "### RAVDESS Dataset Description\r\n", "\r\n", "The RAVDESS dataset contains 1440 audio files, structured as follows: 60 trials per actor multiplied by 24 actors, resulting in 1440 files. The dataset comprises recordings from 24 professional actors (12 female and 12 male), each vocalizing two lexically-matched statements in a neutral North American accent. The speech emotions included are calm, happy, sad, angry, fearful, surprise, and disgust, with each emotion expressed at two levels of emotional intensity (normal and strong), along with an additional neutral expression.\r\n", "\r\n", "#### File Naming Convention\r\n", "\r\n", "Each file in the dataset has a unique filename format: `03-01-06-01-02-01-12.wav`. Here's the breakdown of the filename identifiers:\r\n", "\r\n", "- **Modality**: `01` for full-AV (audiovisual), `02` for video-only, `03` for audio-only.\r\n", "- **Vocal Channel**: `01` for speech, `02` for song.\r\n", "- **Emotion**: \r\n", " - `01` = neutral\r\n", " - `02` = calm\r\n", " - `03` = happy\r\n", " - `04` = sad\r\n", " - `05` = angry\r\n", " - `06` = fearful\r\n", " - `07` = disgust\r\n", " - `08` = surprised\r\n", "- **Emotional Intensity**: `01` for normal, `02` for strong (Note: 'neutral' emotion has no strong intensity).\r\n", "- **Statement**: \r\n", " - `01` = \"Kids are talking by the door\"\r\n", " - `02` = \"Dogs are sitting by the door\"\r\n", "- **Repetition**: `01` for 1st repetition, `02` for 2nd repetition.\r\n", "- **Actor**: `01` to `24`. Odd-numbered actors are male, and even-numbered actors are female.\r\n", "\r\n", "#### Filename Example: `03-01-06-01-02-01-12.wav`\r\n", "\r\n", "- **Audio-only (03)**\r\n", "- **Speech (01)**\r\n", "- **Fearful (06)**\r\n", "- **Normal intensity (01)**\r\n", "- **Statement \"dogs\" (02)**\r\n", "- **1st Repetition (01)**\r\n", "- **12th Actor (12)** (Female, as the actor ID number is even)\r\n" ] }, { "cell_type": "code", "execution_count": 92, "id": "6ce0fa5b-a908-4486-80c7-c07e46d98354", "metadata": {}, "outputs": [], "source": [ "# Define the path to your RAVDESS dataset\n", "DATASET_PATH = r'C:\\games\\audio'\n" ] }, { "cell_type": "markdown", "id": "4a0f0509-02a2-44f9-8250-51518278af97", "metadata": {}, "source": [ "## DATA PREPROCESSING\r\n", "ing.\r\n", "\r\n", "### Function to Load an Audio File\r\n", "\r\n", "The `load_audio` function loads an audio file from the specified `file_path` and returns the audio waveform and its sample rate (`sr`). It utilizes the `librosa` library for audio loading and handles exceptions if the file loading fails.\r\n", "\r\n", "### Function to Extract MFCC Features\r\n", "\r\n", "The `extract_mfcc` function extracts Mel-Frequency Cepstral Coefficients (MFCC) features from the audio data. MFCCs are commonly used in speech and audio processing to capture the spectral characteristics of sound. This function computes the MFCCs and returns their mean values across time (`axis=0`).\r\n", "\r\n", "### Dummy Function to Extract Label from Filename\r\n", "\r\n", "The `extract_label_from_filename` function extracts the emotional label from a given filename based on predefined mappings (`emotion_dict`). It parses the filename and retrieves the emotion label using the third part of the filename (which corresponds to the emotion identifier).\r\n", "\r\n", "#### Emotion Dictionary:\r\n", "- `'01': 'neutral'`\r\n", "- `'02': 'calm'`\r\n", "- `'03': 'happy'`\r\n", "- `'04': 'sad'`\r\n", "- `'05': 'angry'`\r\n", "- `'06': 'fearful'`\r\n", "- `'07': 'disgust'`\r\n", "- `'08': 'surprised'`\r\n", "\r\n", "This function is used to map numeric identifiers from filenames to human-readable emotional labels, facilitating the labeling of audio data during the processing pipeline.\r\n", "\r\n", "g the processing pipeline.\r\n", "\r\n", "coder`.\r\n" ] }, { "cell_type": "code", "execution_count": null, "id": "6810c70c-3f17-4f3a-8789-8bd848ba0cb4", "metadata": {}, "outputs": [], "source": [ "# Define the path to your RAVDESS dataset\n", "\n", "\n", "# Function to load an audio file\n", "def load_audio(file_path, sr=22050):\n", " try:\n", " audio, sample_rate = librosa.load(file_path, sr=sr)\n", " return audio, sample_rate\n", " except Exception as e:\n", " print(f\"Error loading {file_path}: {e}\")\n", " return None, None\n", "\n", "# Function to extract MFCC features\n", "def extract_mfcc(audio, sr, n_mfcc=40):\n", " mfccs = np.mean(librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=n_mfcc).T, axis=0)\n", " return mfccs\n", "\n", "# Dummy function to extract label from filename\n", "def extract_label_from_filename(file_name):\n", " emotion_dict = {\n", " '01': 'neutral', '02': 'calm', '03': 'happy', '04': 'sad',\n", " '05': 'angry', '06': 'fearful', '07': 'disgust', '08': 'surprised'\n", " }\n", " parts = file_name.split('-')\n", " emotion_label = emotion_dict[parts[2]]\n", " return emotion_label\n" ] }, { "cell_type": "markdown", "id": "46240c96-c06b-4169-841b-19b0769faa72", "metadata": {}, "source": [ "## Loading and Processing Audio Dataset\n", "### Iterating Through Audio Files\n", "The code iterates through all `.wav` files located in the `DATASET_PATH` directory and its subdirectories using `os.walk`.\n", "### Extracting Features and Labels\n", "For each audio file:\n", "- **Label Extraction**: The label is extracted from the filename (`filename[7:8] - 1`). This assumes the label information is encoded in a specific position within the filename. \n", "- **Loading Audio**: The `load_audio` function is called to load the audio file and obtain the audio waveform (`audio`) and its sampling rate (`sr`).\n", "- **Extracting MFCC Features**: If the audio loading is successful (`audio` is not `None`), the `extract_mfcc` function extracts Mel-Frequency Cepstral Coefficients (MFCC) features from the audio.\n", "- **Appending Features and Labels**: Extracted MFCC features (`mfcc_features`) and their corresponding labels (`label`) are appended to lists `X` and `y`, respectively.\n", "\n", "### Handling Errors\n", "\n", "- **Exception Handling**: If there is an error during any step (e.g., loading audio, extracting features), an error message is printed, and the file is skipped (`except Exception as e`).\n", "\n", "### Final Dataset Preparation\n", "\n", "- **Conversion to Numpy Arrays**: After processing all audio files, lists `X` and `y` are converted into NumPy arrays (`np.array(X)` and `np.array(y)`).\n", "\n" ] }, { "cell_type": "code", "execution_count": 37, "id": "358a2d96-be6c-4cec-9140-a453d665180c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Finish Loading the Dataset\n", "X shape: (2880, 40)\n", "y shape: (2880,)\n" ] } ], "source": [ "X=[]\n", "y=[]\n", "for dirname, _, filenames in os.walk(DATASET_PATH):\n", " for filename in filenames:\n", " if filename.endswith('.wav'):\n", " try:\n", " label = int(filename[7:8]) - 1 # Extract label from filename\n", " wav_file_path = os.path.join(dirname, filename)\n", " audio, sr = load_audio(wav_file_path) # Load audio file\n", " if audio is not None:\n", " mfcc_features = extract_mfcc(audio, sr) # Extract MFCC features\n", " if mfcc_features is not None:\n", " X.append(mfcc_features)\n", " y.append(label)\n", " except Exception as e:\n", " print(f\"Error processing {filename}: {e}\")\n", "\n", "X = np.array(X)\n", "y = np.array(y)\n", "\n", "print(\"Finish Loading the Dataset\")\n", "print(\"X shape:\", X.shape)\n", "print(\"y shape:\", y.shape)" ] }, { "cell_type": "code", "execution_count": 4, "id": "3262162d-2945-4c0a-8c22-533ad367ccf0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 0, 0, ..., 7, 7, 7])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y" ] }, { "cell_type": "code", "execution_count": 5, "id": "3730f074-a59d-476d-88ca-1ab2695e38b2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-6.9779260e+02, 5.4890041e+01, 6.6346520e-01, ...,\n", " -1.7701062e+00, -3.5011320e+00, -1.5380874e+00],\n", " [-6.9285577e+02, 5.5363899e+01, -1.5483192e+00, ...,\n", " -3.0869722e+00, -3.2097483e+00, -2.3071594e+00],\n", " [-6.9158789e+02, 5.8024662e+01, 1.5946463e-01, ...,\n", " -2.7295372e+00, -3.5089064e+00, -2.2463746e+00],\n", " ...,\n", " [-5.4125165e+02, 2.9595709e+01, -1.8001362e+01, ...,\n", " -3.8906682e-01, -9.7194743e-01, -3.9210208e-03],\n", " [-4.9265253e+02, 2.3887981e+01, -6.0266590e+00, ...,\n", " 9.1637713e-01, -1.4326899e+00, 1.4300117e+00],\n", " [-5.1798480e+02, 2.9571215e+01, -3.9096990e+00, ...,\n", " -1.2455600e-01, -1.8519229e+00, 7.0855033e-01]], dtype=float32)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X" ] }, { "cell_type": "code", "execution_count": 96, "id": "e345782b-935d-46d3-9a52-88cdcb3ed44c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0 0 0 ... 7 7 7]\n", "[[1. 0. 0. ... 0. 0. 0.]\n", " [1. 0. 0. ... 0. 0. 0.]\n", " [1. 0. 0. ... 0. 0. 0.]\n", " ...\n", " [0. 0. 0. ... 0. 0. 1.]\n", " [0. 0. 0. ... 0. 0. 1.]\n", " [0. 0. 0. ... 0. 0. 1.]]\n" ] } ], "source": [ "### Label Encoding\n", "label_encoder = LabelEncoder()\n", "y_encoded = label_encoder.fit_transform(y)\n", "print(y_encoded)\n", "##One_hot encoding\n", "y_cat=to_categorical (y_encoded)\n", "print(y_cat)" ] }, { "cell_type": "markdown", "id": "c09420cf-a9a1-464e-969b-ebfcc3d828ae", "metadata": {}, "source": [ "## Train-Test Split" ] }, { "cell_type": "code", "execution_count": 40, "id": "d25650c5-5681-4a24-ab42-380bb19f82a8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training set size: 2304 samples\n", "Testing set size: 576 samples\n", "X_train shape: (2304, 40)\n", "X_test shape: (576, 40)\n" ] } ], "source": [ "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y_cat, test_size=0.2, random_state=9)\n", "\n", "# Print shapes to verify\n", "print(f\"Training set size: {X_train.shape[0]} samples\")\n", "print(f\"Testing set size: {X_test.shape[0]} samples\")\n", "print(f\"X_train shape: {X_train.shape}\")\n", "print(f\"X_test shape: {X_test.shape}\")\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "498fc255-2b1c-4ff8-afdf-7f5b8998dd16", "metadata": {}, "outputs": [], "source": [ "X_train = X_train[..., np.newaxis]\n", "X_test=X_test[...,np.newaxis]" ] }, { "cell_type": "markdown", "id": "69089f82-0783-441b-9800-01dbb591fa75", "metadata": {}, "source": [ "# Conv1D Model for Emotion Recognition\n", "\n", "### Model Architecture\n", "\n", "The Conv1D model is designed to classify emotions based on audio features extracted using Mel-Frequency Cepstral Coefficients (MFCCs). The architecture consists of:\n", "\n", "- **Conv1D Layer**: The first layer has 64 filters with a kernel size of 3 and uses the ReLU activation function. It takes input with a shape corresponding to the MFCC feature dimensions.\n", "- **MaxPooling1D Layer**: This layer with a pool size of 2 reduces the dimensionality of the feature maps.\n", "- **Dropout Layer**: A dropout rate of 0.3 is used to prevent overfitting.\n", "- **Conv1D Layer**: The second Conv1D layer has 128 filters with a kernel size of 3 and uses the ReLU activation function.\n", "- **MaxPooling1D Layer**: Another pooling layer with a pool size of 2.\n", "- **Dropout Layer**: Another dropout layer with a rate of 0.3.\n", "- **Flatten Layer**: Flattens the feature maps into a single vector.\n", "- **Dense Layer**: A dense layer with 128 units and ReLU activation.\n", "- **Dropout Layer**: Dropout with a rate of 0.3.\n", "- **Output Layer**: A dense layer with a number of units equal to the number of emotion classes, using the softmax activation function to output probability distributions for each class.\n", "\n", "### Model Compilation\n", "\n", "The model is compiled using the Adam optimizer and categorical cross-entropy loss function, which is suitable for multi-class classification problems. The performance metric used is accuracy." ] }, { "cell_type": "code", "execution_count": 72, "id": "04b67f11-b07f-42f9-9f23-73eb9b66ddfd", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\KIIT\\anaconda3\\Lib\\site-packages\\keras\\src\\layers\\convolutional\\base_conv.py:107: 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__(activity_regularizer=activity_regularizer, **kwargs)\n" ] } ], "source": [ "\n", "model = Sequential([\n", " Conv1D(64, kernel_size=3, activation='relu', input_shape=(X.shape[1], 1)),\n", " MaxPooling1D(pool_size=2),\n", " Dropout(0.3),\n", " Conv1D(128, kernel_size=3, activation='relu'),\n", " MaxPooling1D(pool_size=2),\n", " Dropout(0.3),\n", " Flatten(),\n", " Dense(128, activation='relu'),\n", " Dropout(0.3),\n", " Dense(len(label_encoder.classes_), activation='softmax')\n", "])\n", "\n", "# Compile the model\n", "model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n", "\n", "\n" ] }, { "cell_type": "markdown", "id": "3d38d1f3-80a9-4343-af19-afcd416c0017", "metadata": {}, "source": [ "### Adding Channel Dimension for Conv1D\r\n", "\r\n", "In Conv1D neural networks, adding an additional channel dimension (`np.newaxis`) to input data like MFCC features (`X_train` and `X_test`) is essential. This adjustment ensures compatibility with Conv1D layers, which expect input shapes in the form `(batch_size, sequence_length, num_channels)`. The channel dimension allows Conv1D to effectively apply filters across the temporal dimension of the data, facilitating feature extraction and learning temporal patterns.\r\n" ] }, { "cell_type": "code", "execution_count": null, "id": "19484b99-108b-4a2f-8606-85eb8effeb41", "metadata": {}, "outputs": [], "source": [ "X_train = X_train[..., np.newaxis]\n", "X_test=X_test[...,np.newaxis]" ] }, { "cell_type": "markdown", "id": "9d45be4e-fb81-4331-b40b-357490e9c6c5", "metadata": {}, "source": [ "### Training the Model\n", "\n", "The model is trained using the training data (`X_train` and `y_train`). The training process involves:\n", "\n", "- **Epochs**: The model is trained for 100 epochs.\n", "- **Batch Size**: A batch size of 32 is used for each training step.\n", "- **Validation Data**: The model's performance is validated on the validation set (`X_test` and `y_test`) during training to monitor and evaluate its accuracy and loss.\n" ] }, { "cell_type": "code", "execution_count": 74, "id": "aee62dc0-cf5b-47b6-ab28-029e63ae9f21", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 8ms/step - accuracy: 0.1157 - loss: 7.4988 - val_accuracy: 0.1441 - val_loss: 2.0782\n", "Epoch 2/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.1531 - loss: 2.1160 - val_accuracy: 0.1441 - val_loss: 2.0756\n", "Epoch 3/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.1892 - loss: 2.0787 - val_accuracy: 0.1181 - val_loss: 2.0707\n", "Epoch 4/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.1655 - loss: 2.0423 - val_accuracy: 0.1910 - val_loss: 1.9951\n", "Epoch 5/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.1787 - loss: 2.0074 - val_accuracy: 0.1823 - val_loss: 1.9416\n", "Epoch 6/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.1839 - loss: 1.9711 - val_accuracy: 0.1979 - val_loss: 1.9443\n", "Epoch 7/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.1942 - loss: 1.9733 - val_accuracy: 0.2153 - val_loss: 1.9185\n", "Epoch 8/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.1962 - loss: 1.9873 - val_accuracy: 0.2378 - val_loss: 1.8989\n", "Epoch 9/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.2008 - loss: 1.9777 - val_accuracy: 0.2674 - val_loss: 1.8965\n", "Epoch 10/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.2237 - loss: 1.9245 - val_accuracy: 0.3125 - val_loss: 1.8432\n", "Epoch 11/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.2363 - loss: 1.9118 - val_accuracy: 0.3351 - val_loss: 1.8177\n", "Epoch 12/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.2540 - loss: 1.8811 - val_accuracy: 0.3299 - val_loss: 1.8050\n", "Epoch 13/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.2626 - loss: 1.8602 - val_accuracy: 0.3229 - val_loss: 1.7773\n", "Epoch 14/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.2709 - loss: 1.8392 - val_accuracy: 0.3542 - val_loss: 1.7595\n", "Epoch 15/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.2832 - loss: 1.8347 - val_accuracy: 0.3837 - val_loss: 1.6992\n", "Epoch 16/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.3186 - loss: 1.7459 - val_accuracy: 0.3976 - val_loss: 1.6929\n", "Epoch 17/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.3391 - loss: 1.7321 - val_accuracy: 0.4115 - val_loss: 1.6606\n", "Epoch 18/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.3241 - loss: 1.7384 - val_accuracy: 0.3872 - val_loss: 1.6148\n", "Epoch 19/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.3558 - loss: 1.6897 - val_accuracy: 0.4358 - val_loss: 1.5433\n", "Epoch 20/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.3464 - loss: 1.6552 - val_accuracy: 0.4358 - val_loss: 1.5463\n", "Epoch 21/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.3539 - loss: 1.6739 - val_accuracy: 0.4375 - val_loss: 1.5155\n", "Epoch 22/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.3673 - loss: 1.6462 - val_accuracy: 0.4688 - val_loss: 1.5297\n", "Epoch 23/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.3828 - loss: 1.6084 - val_accuracy: 0.4809 - val_loss: 1.4706\n", "Epoch 24/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.4081 - loss: 1.5665 - val_accuracy: 0.4670 - val_loss: 1.4687\n", "Epoch 25/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.3772 - loss: 1.5951 - val_accuracy: 0.4809 - val_loss: 1.4169\n", "Epoch 26/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.4141 - loss: 1.5487 - val_accuracy: 0.4844 - val_loss: 1.3917\n", "Epoch 27/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.4212 - loss: 1.5296 - val_accuracy: 0.5069 - val_loss: 1.3467\n", "Epoch 28/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.4191 - loss: 1.4857 - val_accuracy: 0.5347 - val_loss: 1.3098\n", "Epoch 29/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.4203 - loss: 1.4929 - val_accuracy: 0.5278 - val_loss: 1.2994\n", "Epoch 30/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.4440 - loss: 1.4514 - val_accuracy: 0.5451 - val_loss: 1.2825\n", "Epoch 31/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.4556 - loss: 1.4015 - val_accuracy: 0.5642 - val_loss: 1.2389\n", "Epoch 32/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.4843 - loss: 1.3758 - val_accuracy: 0.5503 - val_loss: 1.2232\n", "Epoch 33/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.4633 - loss: 1.3930 - val_accuracy: 0.5590 - val_loss: 1.2229\n", "Epoch 34/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.4870 - loss: 1.3590 - val_accuracy: 0.5764 - val_loss: 1.2046\n", "Epoch 35/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.4817 - loss: 1.3551 - val_accuracy: 0.5938 - val_loss: 1.1620\n", "Epoch 36/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.5026 - loss: 1.2994 - val_accuracy: 0.6007 - val_loss: 1.1363\n", "Epoch 37/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.5011 - loss: 1.3065 - val_accuracy: 0.6181 - val_loss: 1.1233\n", "Epoch 38/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.5183 - loss: 1.2644 - val_accuracy: 0.5990 - val_loss: 1.0996\n", "Epoch 39/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.5373 - loss: 1.2638 - val_accuracy: 0.6372 - val_loss: 1.0709\n", "Epoch 40/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.5638 - loss: 1.1969 - val_accuracy: 0.6493 - val_loss: 1.0466\n", "Epoch 41/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.5522 - loss: 1.1764 - val_accuracy: 0.6510 - val_loss: 1.0343\n", "Epoch 42/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.5634 - loss: 1.1854 - val_accuracy: 0.6458 - val_loss: 0.9844\n", "Epoch 43/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.5634 - loss: 1.1475 - val_accuracy: 0.6875 - val_loss: 0.9832\n", "Epoch 44/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.5888 - loss: 1.0973 - val_accuracy: 0.6771 - val_loss: 0.9465\n", "Epoch 45/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.5933 - loss: 1.1037 - val_accuracy: 0.6944 - val_loss: 0.8992\n", "Epoch 46/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.5968 - loss: 1.0746 - val_accuracy: 0.6840 - val_loss: 0.9157\n", "Epoch 47/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.6292 - loss: 1.0097 - val_accuracy: 0.7222 - val_loss: 0.8362\n", "Epoch 48/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.6108 - loss: 1.0316 - val_accuracy: 0.7344 - val_loss: 0.8298\n", "Epoch 49/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.6361 - loss: 0.9816 - val_accuracy: 0.7483 - val_loss: 0.8078\n", "Epoch 50/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.6402 - loss: 0.9807 - val_accuracy: 0.7326 - val_loss: 0.7480\n", "Epoch 51/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.6390 - loss: 0.9621 - val_accuracy: 0.7691 - val_loss: 0.7645\n", "Epoch 52/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.6421 - loss: 0.9360 - val_accuracy: 0.7361 - val_loss: 0.7458\n", "Epoch 53/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.6702 - loss: 0.8742 - val_accuracy: 0.7778 - val_loss: 0.7248\n", "Epoch 54/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.6831 - loss: 0.8708 - val_accuracy: 0.7743 - val_loss: 0.7021\n", "Epoch 55/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.6895 - loss: 0.8408 - val_accuracy: 0.7691 - val_loss: 0.6989\n", "Epoch 56/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.6986 - loss: 0.8491 - val_accuracy: 0.7483 - val_loss: 0.7095\n", "Epoch 57/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.6966 - loss: 0.7870 - val_accuracy: 0.7986 - val_loss: 0.6644\n", "Epoch 58/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.7010 - loss: 0.7923 - val_accuracy: 0.7830 - val_loss: 0.6632\n", "Epoch 59/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.6859 - loss: 0.8124 - val_accuracy: 0.7847 - val_loss: 0.6348\n", "Epoch 60/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.7143 - loss: 0.7737 - val_accuracy: 0.8003 - val_loss: 0.6152\n", "Epoch 61/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.7154 - loss: 0.7969 - val_accuracy: 0.7934 - val_loss: 0.6460\n", "Epoch 62/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.7492 - loss: 0.7217 - val_accuracy: 0.7847 - val_loss: 0.6135\n", "Epoch 63/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.7147 - loss: 0.7626 - val_accuracy: 0.8194 - val_loss: 0.5998\n", "Epoch 64/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.7455 - loss: 0.6917 - val_accuracy: 0.8229 - val_loss: 0.5715\n", "Epoch 65/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.7447 - loss: 0.7022 - val_accuracy: 0.8316 - val_loss: 0.5726\n", "Epoch 66/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.7659 - loss: 0.6705 - val_accuracy: 0.8229 - val_loss: 0.5652\n", "Epoch 67/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.7592 - loss: 0.6647 - val_accuracy: 0.8281 - val_loss: 0.5232\n", "Epoch 68/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.7637 - loss: 0.6515 - val_accuracy: 0.8316 - val_loss: 0.5361\n", "Epoch 69/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.7422 - loss: 0.6811 - val_accuracy: 0.8351 - val_loss: 0.5108\n", "Epoch 70/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.7770 - loss: 0.6319 - val_accuracy: 0.8403 - val_loss: 0.4960\n", "Epoch 71/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.7674 - loss: 0.6403 - val_accuracy: 0.8455 - val_loss: 0.5008\n", "Epoch 72/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.7764 - loss: 0.6190 - val_accuracy: 0.8559 - val_loss: 0.4857\n", "Epoch 73/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.7797 - loss: 0.6008 - val_accuracy: 0.8385 - val_loss: 0.4882\n", "Epoch 74/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.7803 - loss: 0.5882 - val_accuracy: 0.8507 - val_loss: 0.4673\n", "Epoch 75/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.7957 - loss: 0.5663 - val_accuracy: 0.8472 - val_loss: 0.4710\n", "Epoch 76/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.7779 - loss: 0.6297 - val_accuracy: 0.8507 - val_loss: 0.4922\n", "Epoch 77/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.7996 - loss: 0.5509 - val_accuracy: 0.8681 - val_loss: 0.4591\n", "Epoch 78/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.7974 - loss: 0.5581 - val_accuracy: 0.8646 - val_loss: 0.4398\n", "Epoch 79/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 8ms/step - accuracy: 0.7955 - loss: 0.5555 - val_accuracy: 0.8663 - val_loss: 0.4259\n", "Epoch 80/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.8027 - loss: 0.5486 - val_accuracy: 0.8611 - val_loss: 0.4192\n", "Epoch 81/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.8128 - loss: 0.5246 - val_accuracy: 0.8750 - val_loss: 0.4238\n", "Epoch 82/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.8240 - loss: 0.4724 - val_accuracy: 0.8872 - val_loss: 0.4158\n", "Epoch 83/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.8174 - loss: 0.5094 - val_accuracy: 0.8854 - val_loss: 0.3948\n", "Epoch 84/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8240 - loss: 0.4929 - val_accuracy: 0.8958 - val_loss: 0.3806\n", "Epoch 85/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8212 - loss: 0.4963 - val_accuracy: 0.9028 - val_loss: 0.3706\n", "Epoch 86/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.8229 - loss: 0.4730 - val_accuracy: 0.8872 - val_loss: 0.4016\n", "Epoch 87/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.8183 - loss: 0.4667 - val_accuracy: 0.8906 - val_loss: 0.3899\n", "Epoch 88/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.8255 - loss: 0.4798 - val_accuracy: 0.8854 - val_loss: 0.3904\n", "Epoch 89/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.8397 - loss: 0.4399 - val_accuracy: 0.8941 - val_loss: 0.3561\n", "Epoch 90/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.8457 - loss: 0.4585 - val_accuracy: 0.9010 - val_loss: 0.3516\n", "Epoch 91/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8544 - loss: 0.4099 - val_accuracy: 0.8976 - val_loss: 0.3647\n", "Epoch 92/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8394 - loss: 0.4442 - val_accuracy: 0.9010 - val_loss: 0.3880\n", "Epoch 93/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.8546 - loss: 0.4011 - val_accuracy: 0.9062 - val_loss: 0.3315\n", "Epoch 94/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8570 - loss: 0.4066 - val_accuracy: 0.8837 - val_loss: 0.3517\n", "Epoch 95/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8570 - loss: 0.4290 - val_accuracy: 0.8993 - val_loss: 0.3558\n", "Epoch 96/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.8609 - loss: 0.3896 - val_accuracy: 0.8906 - val_loss: 0.3549\n", "Epoch 97/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8593 - loss: 0.4013 - val_accuracy: 0.9010 - val_loss: 0.3377\n", "Epoch 98/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.8638 - loss: 0.3873 - val_accuracy: 0.9115 - val_loss: 0.3193\n", "Epoch 99/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8615 - loss: 0.3948 - val_accuracy: 0.9010 - val_loss: 0.3076\n", "Epoch 100/100\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.8638 - loss: 0.3963 - val_accuracy: 0.9010 - val_loss: 0.3422\n" ] } ], "source": [ "\n", "history = model.fit(X_train, y_train, epochs=100, batch_size=32, validation_data=(X_test, y_test))" ] }, { "cell_type": "markdown", "id": "669a85fe-8a7b-438c-8524-ae3ccec2be1f", "metadata": {}, "source": [ "### Model Evaluation\n", "\n", "After training, the model is evaluated on the test set to determine its final accuracy. The test accuracy provides an indication of how well the model generalizes to unseen data." ] }, { "cell_type": "code", "execution_count": 75, "id": "6141387a-448a-4ba5-a8c3-0957658002b3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9008 - loss: 0.3352\n", "Test accuracy: 0.9010416865348816\n", "\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step\n", "True label: 5, Predicted label: 5\n", "True label: 2, Predicted label: 2\n", "True label: 3, Predicted label: 3\n", "True label: 1, Predicted label: 1\n", "True label: 1, Predicted label: 1\n", "True label: 1, Predicted label: 1\n", "True label: 7, Predicted label: 7\n", "True label: 0, Predicted label: 0\n", "True label: 3, Predicted label: 1\n", "True label: 2, Predicted label: 2\n" ] } ], "source": [ "\n", "test_loss, test_acc = model.evaluate(X_test, y_test)\n", "print(f\"Test accuracy: {test_acc}\")\n", "predictions = model.predict(X_test)\n", "predicted_labels = np.argmax(predictions, axis=1)\n", "true_labels = np.argmax(y_test, axis=1)\n", "\n", "# Print some predictions\n", "for i in range(10):\n", " print(f\"True label: {true_labels[i]}, Predicted label: {predicted_labels[i]}\")\n" ] }, { "cell_type": "markdown", "id": "8c2536e4-e80a-4168-9cd4-6da3ff687b49", "metadata": {}, "source": [ "\n", "# Model Training and Test Accuracy\r\n", "\r\n", "The following plot shows the accuracy of the Conv1D model over 100 epochs for both the training and test datasets.ndt)\r\n", "\r\n", "### Description\r\n", "\r\n", "- **X-axis (Epoch)**: Represents the number of training epochs. Each epoch is one complete pass through the training dataset.\r\n", "- **Y-axis (Accuracy)**: Represents the accuracy of the model. Accuracy is the proportion of correctly predicted instances out of the total instances.\r\n", "\r\n", "### Observations\r\n", "\r\n", "- **Training Accuracy (Blue Line)**: The training accuracy shows a steady increase as the number of epochs increases. This indicates that the model is learning and improving its performance on the training data.\r\n", "- **Test Accuracy (Orange Line)**: The test accuracy also shows an increase and follows a similar trend to the training accuracy. This indicates that the model generalizes well to unseen data.\r\n", "- **Model Performance**: The model achieves over 90% accuracy on both the training and test datasets after 100 epochs, demonstrating its effectiveness in classifying emotions from auficant overfitting.\r\n" ] }, { "cell_type": "code", "execution_count": 60, "id": "2d7647a2-cc62-4c55-9f04-8c1705c53f66", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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arWMGjWqwFqtn59fsb7LihUr8PPzIzg42KCM9w6eq1mzJjqdjpiYmHwDaXYegCtXruDt7V3gNa2trfOcH9QfHdn35G751XhXrFhBt27dWLRokUF6cnJynjLt2rULvV5faPB2dHRkzJgxfP/997zyyissXbqUJ554AicnpwKPEaK8SI1biDLm5eXFq6++ysCBAxkzZkyB+Xr06EFKSgq//PKLQfry5ctzPgfo3r07ACtXrjTIt2rVKoP3tra2dO/enbCwMJo1a0ZQUFCex7219vvRaDRYWloaBMeYmJg8o8qzB8rdGyjv1qtXL7RabaF5QB1VfvToUYO0M2fOcPr06WKV28rKyiDt6NGj/Pfff3nKnZaWVqSFaLIH+A0bNoybN28yadKkIpdHiLIkNW4hysG8efPum2f06NF8/fXXjBkzhkuXLtG0aVN27drFhx9+SL9+/XJGMPfq1YsuXbrw2muvcevWLYKCgti9ezc//vhjnnN+/vnndOrUic6dO/PCCy/g6+tLcnIy586d47fffmPr1q3F+h4DBgxg/fr1TJw4kWHDhhEZGcn777+Ph4cHZ8+ezcnXuXNnRo0axZw5c7h27RoDBgzAysqKsLAwbG1tmTx5Mr6+vrz55pu8//773L59m5EjR+Lo6Eh4eDhxcXG89957AIwaNYqnnnqKiRMn8uijj3L58mU++uijnBp7Ucv9/vvvM2vWLLp27crp06eZPXs2fn5+BvO8R44cydKlS5kwYQKnT5+me/fu6PV69u3bR6NGjXj88cdz8tavX58+ffrwxx9/0KlTJ5o3b16seylEmTH26DghTN3do8oLc++ockVRlPj4eGXChAmKh4eHYm5urvj4+CgzZsxQ0tLSDPLdvHlTeeaZZxQnJyfF1tZW6dmzp3Lq1Kk8o8oVRR0x/swzzyheXl6KhYWFUrNmTaVDhw7KnDlzDPJQxFHl8+bNU3x9fRUrKyulUaNGynfffafMmjVLuffPh06nUz777DMlICBAsbS0VBwdHZX27dsrv/32m0G+5cuXK61bt1asra2VatWqKS1btjQoh16vVz766CPF399fsba2VoKCgpStW7cWOKp87dq1ecqcnp6uvPLKK4qXl5dibW2ttGrVSvnll1+UMWPGKD4+PgZ5b9++rbzzzjtKvXr1FEtLS8XZ2Vl56KGHlD179uQ577JlyxRA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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12, 4))\n", "plt.subplot(1, 2, 1)\n", "plt.plot(history.history['accuracy'])\n", "plt.plot(history.history['val_accuracy'])\n", "plt.title('Model accuracy')\n", "plt.ylabel('Accuracy')\n", "plt.xlabel('Epoch')\n", "plt.legend(['Train', 'Test'], loc='upper left')" ] }, { "cell_type": "markdown", "id": "31f7b8ff-465e-4c9f-884b-86fe27d63f2f", "metadata": {}, "source": [ "### Conclusion\n", "\n", "The graph indicates that the Conv1D model is effective in learning and generalizing the task of emotion recognition from audio features. Both the training and test accuracies show a consistent improvement over the epochs, with the test accuracy closely following the training accuracy, suggesting that the model does not suffer from significant overfitting." ] }, { "cell_type": "markdown", "id": "187e8084-a43c-4b04-8eb8-1f155f8777b7", "metadata": {}, "source": [ "# Confusion Matrix\n", "\n", "The following plot shows the confusion matrix for the Conv1D model's predictions on the test dataset.\n", "\n" ] }, { "cell_type": "code", "execution_count": 68, "id": "eed99318-753a-4196-a9ea-e41173335c57", "metadata": {}, "outputs": [ { "data": { "image/png": "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8ccf64UXXtBLL73ke/32ZZddpnbt2un1119XXFycnnrqKV1yySXatWuX2rVrpxdeeEE5OTmaP3++LrjgAj377LN67LHHdOaZZx7zntnZ2Vq0aJEeeeQRDR48WAcOHNBHH30k6btk4Gc/+5nWr1+v3r17q1WrVpKkRYsWKScnRwUFBerfv7+2bt2qm266SW3atFFGRoaqq6v1y1/+UhdffLGee+45lZaWasqUKRb/0wNgO5tfGgb8pGRkZBijRo3yff2Pf/zDaN++vXHllVcaOTk5RmRkpFFeXu47/+abbxqxsbHG4cOH/fo566yzjKeeesowDMNIS0szJk6c6Hc+NTXV6NevX6P3raysNNxut7Fo0aJGYywtLTUkGVu3bvVr79y5s7FixQq/tgceeMBIS0szDMMwnnrqKaNdu3ZGdXW17/yCBQsa7QuAczC1ATSx1157TW3btlXr1q2VlpamCy+8UI8//rgkqWvXrurQoYPv2i1btuibb75R+/bt1bZtW99RWlqq//znP5KkHTt2KC0tze8eP/76h3bs2CGv16tLLrkk4JgPHjyo/fv364YbbvCL48EHH/SLo1+/foqOjg4oDgDOwNQG0MQuuugiLViwQJGRkUpMTPRbUNmmTRu/a+vr65WQkKC33367QT+nnHJKSPePiooK+jP19fWSvpveSE1N9Tv3/RSMYRghxQOgeSORAJpYmzZt1K1bt4CuPe+881RWVqaWLVvqjDPOaPSanj17atOmTbr++ut9bZs2bTpmn8nJyYqKitKbb76pG2+8scH579dE1NXV+do8Ho9OP/107dmzR9dee22j/fbq1UvPPvusampqfMnK8eIA4AxMbQBh7NJLL1VaWppGjx6tN954Q5988ok2btyoe++9V5s3b5YkTZkyRUuWLNGSJUu0a9cu5eTkqKSk5Jh9tm7dWtOmTdPUqVP1zDPP6D//+Y82bdqkp59+WpLUsWNHRUVFae3atfr888916NAhSd895Co/P1+PPvqodu3ape3bt2vp0qWaO3euJGns2LFq0aKFbrjhBn344Yd6/fXX9cc//tHif0IA7EYiAYQxl8ul119/XRdeeKHGjx+v7t276+qrr9Ynn3wij8cjSbrqqqt03333adq0aRowYID27t2rW2655bj9/uEPf9Cdd96p++67Tz179tRVV12l8vJySVLLli312GOP6amnnlJiYqJGjRolSbrxxhu1ePFiLVu2TH379lV6erqWLVvm2y7atm1bvfrqq/rwww/Vv39/TZ8+XbNnz7bwnw6AcOAymNgEAAAhoiIBAABCRiIBAABCRiIBAABCRiIBAABCRiIBAABCRiIBAABCRiIBAABCRiIBAABCRiIBAABCRiIBAABCRiIBAABCRiIBAABC9v8BVK+ra5pLY1YAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "from sklearn.metrics import confusion_matrix\n", "\n", "# Compute confusion matrix\n", "conf_matrix = confusion_matrix(true_labels, predicted_labels)\n", "sns.heatmap(conf_matrix, annot=True, fmt=\"d\", cmap=\"Blues\", xticklabels=label_encoder.classes_, yticklabels=label_encoder.classes_)\n", "plt.ylabel('Actual')\n", "plt.xlabel('Predicted')\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "75016e46-b833-4114-95c6-212bed312c57", "metadata": {}, "source": [ "\n", "\n", "### Description\n", "\n", "- **X-axis (Predicted)**: Represents the predicted emotion labels by the model.\n", "- **Y-axis (Actual)**: Represents the actual emotion labels.\n", "- **Color Scale**: The intensity of the color represents the number of instances classified in each category, with darker colors indicating a higher number of instances.\n", "\n", "### Emotion Labels\n", "The numerical labels correspond to the following emotions:\n", "- 0: Neutral\n", "- 1: Calm\n", "- 2: Happy\n", "- 3: Sad\n", "- 4: Angry\n", "- 5: Fearful\n", "- 6: Disgust\n", "- 7: Surprised\n", "\n", "### Observations\n", "\n", "- **High Accuracy**: Most predictions are concentrated along the diagonal, indicating correct classifications.\n", "- **Misclassifications**: Some off-diagonal elements show misclassifications, such as a few instances where 'Neutral' is predicted as 'Calm' or 'Happy'.\n", "- **Confusion**: Specific emotions like 'Sad' and 'Angry' show some level of confusion with other emotions, as indicated by the lighter cells off the diagonal.\n", "\n", "### Conclusion\n", "\n", "The confusion matrix indicates that the Conv1D model performs well in classifying most of the emotions correctly, with a high number of correct predictions for 'Neutral', 'Sad', and 'Angry'. Some emotions like 'Calm' and 'Happy' have slight confusion with other emotions, but overall, the model demonstrates strong performance in emotion recognition." ] }, { "cell_type": "code", "execution_count": 61, "id": "4dc5b551-0161-4b65-80a6-95572d58486e", "metadata": {}, "outputs": [], "source": [ "# Save the model in the recommended Keras format\n", "model.save('emotion_recognition_model.keras')\n" ] }, { "cell_type": "markdown", "id": "16a6eed0-1f41-4865-a630-fb5947b5627c", "metadata": {}, "source": [ "\n", "# LSTM Model for Emotion Classification\r\n", "\r\n", "## Model Architecture\r\n", "\r\n", "- **Input Layer**: The model accepts input with the shape (40, 1), where 40 represents the number of MFCC features extracted from the audio signals.\r\n", "- **LSTM Layer**: A Long Short-Term Memory (LSTM) layer with 128 units is used. This layer processes the input sequence and outputs the last hidden state.\r\n", "- **Dense Layer 1**: A fully connected layer with 64 units.\r\n", "- **Dropout Layer 1**: A dropout layer with a dropout rate of 0.4 is added after the first dense layer to reduce overfitting by randomly setting 40% of the input units to 0 during training.\r\n", "- **Activation Layer 1**: A ReLU activation function is applied to introduce non-linearity.\r\n", "- **Dense Layer 2**: Another fully connected layer with 32 units.\r\n", "- **Dropout Layer 2**: Another dropout layer with a dropout rate of 0.4 is added after the second dense layer to further reduce overfitting.\r\n", "- **Activation Layer 2**: Another ReLU activation function is applied.\r\n", "- **Output Layer**: The final output layer consists of 8 units, corresponding to the 8 emotion categories. A softmax activation function is used to output a probability distribution over the emotion categories.\r\n", "\r\n", "## Model Compilation\r\n", "\r\n", "- **Loss Function**: The model uses `categorical_crossentropy` as the loss function, which is suitable for multi-class classification problems.\r\n", "- **Optimizer**: The `Adam` optimizer is used to update the model weights during training. Adam is known for its efficiency and effectiveness in training deep learning models.\r\n", "- **Metrics**: The `accuracy` metric is used to evaluate the model's performance on the training and validation datasets.\r\n", "\r\n", "## Usage\r\n", "\r\n", "The function `create_model_LSTM` initializes and compiles the LSTM model based on the defined architecture. This function can be called to get a compiled model ready for training on the preprocessed dataset.\r\n" ] }, { "cell_type": "code", "execution_count": 53, "id": "bc569d3f-f20f-4a5e-a4d2-91de0d483ce8", "metadata": {}, "outputs": [], "source": [ "def create_model_LSTM():\n", " model = Sequential()\n", " model.add(LSTM(128, return_sequences=False, input_shape=(40, 1)))\n", " model.add (Dense (64))\n", " model.add(Dropout (0.4))\n", " model.add(Activation('relu'))\n", " model.add(Dense(32))\n", " model.add(Dropout (0.4))\n", " model.add(Activation('relu'))\n", " model.add(Dense(8))\n", " model.add(Activation('softmax'))\n", " # Configures the model for training\n", " model.compile(loss='categorical_crossentropy', optimizer='Adam', metrics=['accuracy'])\n", " return model" ] }, { "cell_type": "code", "execution_count": 76, "id": "eda58f26-9557-4d6f-872b-a4fcdb0b1fd2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2880, 40)" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.shape" ] }, { "cell_type": "markdown", "id": "d50bc884-a1c6-48f1-8327-0950ea81ecb4", "metadata": {}, "source": [ "## Data Preparation for Model Training\r\n", "\r\n", "### Splitting the Dataset\r\n", "\r\n", "1. **Determine the Number of Samples**: \r\n", " - `X.shape[0]` gives the total number of samples in the dataset.\r\n", "\r\n", "2. **Calculate the Number of Training, Validation, and Test Samples**:\r\n", " - **Training Samples**: 80% of the total samples are allocated for training.\r\n", " - **Validation Samples**: 10% of the total samples are allocated for validation.\r\n", " - **Test Samples**: 10% of the total samples are allocated for tef_samples * 0.1)\r\n" ] }, { "cell_type": "code", "execution_count": 77, "id": "e54f28e0-43a4-42e5-ab72-818b97a8b4d5", "metadata": {}, "outputs": [], "source": [ "number_of_samples = X.shape[0]\n", "training_samples = int(number_of_samples * 0.8)\n", "validation_samples = int(number_of_samples * 0.1)\n", "test_samples = int(number_of_samples * 0.1)\r\n" ] }, { "cell_type": "markdown", "id": "00ccfac3-a63b-4949-ac64-ec0ca3399897", "metadata": {}, "source": [ "#### Reshaping the Training Data\n", "\n", "**Expand Dimensions of Training Data**:\n", "\n", "- **Reshape the Training Data**: \n", " - The training data, `X[:training_samples]`, is reshaped by adding an additional dimension using `np.expand_dims`.\n", " - This step is crucial to match the input shape required by the LSTM model, which expects a 3D input.\n", " - The reshaped data ensures compatibility with the LSTM model's input requirements.\n" ] }, { "cell_type": "code", "execution_count": 81, "id": "57738349-717f-443d-8480-2f51640b5a18", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2304, 40, 1)" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w = np.expand_dims(X[:training_samples],-1)\n", "w.shape" ] }, { "cell_type": "markdown", "id": "7db51c95-8f30-4578-90f2-5f732a803b10", "metadata": {}, "source": [ "#### Training the LSTM Model\r\n", "\r\n", "**Model Initialization**:\r\n", "- Create the LSTM model by calling the `create_model_LSTM()` function and assign it to `model_A`.\r\n", "\r\n", "**Model Training**:\r\n", "- Train the model using the `fit` method:\r\n", " - **Training Data**: `w`, which is the reshaped training data.\r\n", " - **Training Labels**: `y_cat[:training_samples]`, which are the categorical labels for the training data.\r\n", " - **Validation Data**: \r\n", " - Inputs: `np.expand_dims(X[training_samples:training_samples + validation_samples], -1)`, reshaped validation data.\r\n", " - Labels: `y_cat[training_samples:training_samples + validation_samples]`, categorical labels for the validation data.\r\n", " - **Epochs**: Train the model for 130 epochs.\r\n", " - **Shuffle**: Enable shuffling of training data at each epoch to improve generalization.\r\n" ] }, { "cell_type": "code", "execution_count": 83, "id": "9b377dbb-d02c-42f7-8082-6de1aba76985", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\KIIT\\anaconda3\\Lib\\site-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" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 30ms/step - accuracy: 0.1385 - loss: 2.0760 - val_accuracy: 0.2014 - val_loss: 2.0433\n", "Epoch 2/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 22ms/step - accuracy: 0.1759 - loss: 2.0426 - val_accuracy: 0.2326 - val_loss: 1.9693\n", "Epoch 3/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 21ms/step - accuracy: 0.2172 - loss: 1.9757 - val_accuracy: 0.2465 - val_loss: 1.9313\n", "Epoch 4/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 21ms/step - accuracy: 0.2460 - loss: 1.9279 - val_accuracy: 0.3264 - val_loss: 1.8912\n", "Epoch 5/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 21ms/step - accuracy: 0.2609 - loss: 1.8951 - val_accuracy: 0.3194 - val_loss: 1.8512\n", "Epoch 6/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 22ms/step - accuracy: 0.2863 - loss: 1.8695 - val_accuracy: 0.3264 - val_loss: 1.8080\n", "Epoch 7/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 22ms/step - accuracy: 0.2855 - loss: 1.8637 - val_accuracy: 0.2986 - val_loss: 1.8396\n", "Epoch 8/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 23ms/step - accuracy: 0.2954 - loss: 1.8291 - val_accuracy: 0.3056 - val_loss: 1.8039\n", "Epoch 9/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 22ms/step - accuracy: 0.3015 - loss: 1.8223 - val_accuracy: 0.3264 - val_loss: 1.7575\n", "Epoch 10/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.2902 - loss: 1.8003 - val_accuracy: 0.3021 - val_loss: 1.7344\n", "Epoch 11/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.3098 - loss: 1.7580 - val_accuracy: 0.3125 - val_loss: 1.7068\n", "Epoch 12/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.3321 - loss: 1.7474 - val_accuracy: 0.3125 - val_loss: 1.7494\n", "Epoch 13/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.2942 - loss: 1.7550 - val_accuracy: 0.3299 - val_loss: 1.7023\n", "Epoch 14/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.3294 - loss: 1.7053 - val_accuracy: 0.3299 - val_loss: 1.6989\n", "Epoch 15/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.3304 - loss: 1.6865 - val_accuracy: 0.3438 - val_loss: 1.6837\n", "Epoch 16/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.3505 - loss: 1.6672 - val_accuracy: 0.3507 - val_loss: 1.6803\n", "Epoch 17/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.3555 - loss: 1.6649 - val_accuracy: 0.3785 - val_loss: 1.6393\n", "Epoch 18/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.3635 - loss: 1.6090 - val_accuracy: 0.3611 - val_loss: 1.6099\n", "Epoch 19/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.3768 - loss: 1.6106 - val_accuracy: 0.3681 - val_loss: 1.5997\n", "Epoch 20/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.3791 - loss: 1.5797 - val_accuracy: 0.3681 - val_loss: 1.5913\n", "Epoch 21/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.3745 - loss: 1.5890 - val_accuracy: 0.4062 - val_loss: 1.5238\n", "Epoch 22/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.4029 - loss: 1.5232 - val_accuracy: 0.4340 - val_loss: 1.4941\n", "Epoch 23/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.3985 - loss: 1.5467 - val_accuracy: 0.4132 - val_loss: 1.5048\n", "Epoch 24/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.4359 - loss: 1.4789 - val_accuracy: 0.3958 - val_loss: 1.5107\n", "Epoch 25/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.4214 - loss: 1.5054 - val_accuracy: 0.4167 - val_loss: 1.4671\n", "Epoch 26/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.4240 - loss: 1.4624 - val_accuracy: 0.4167 - val_loss: 1.4613\n", "Epoch 27/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.4437 - loss: 1.4796 - val_accuracy: 0.4375 - val_loss: 1.4436\n", "Epoch 28/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.4420 - loss: 1.4239 - val_accuracy: 0.4340 - val_loss: 1.5034\n", "Epoch 29/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.4631 - loss: 1.4298 - val_accuracy: 0.4653 - val_loss: 1.4203\n", "Epoch 30/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.4888 - loss: 1.3788 - val_accuracy: 0.4236 - val_loss: 1.4395\n", "Epoch 31/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.4805 - loss: 1.3585 - val_accuracy: 0.4375 - val_loss: 1.4169\n", "Epoch 32/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.4768 - loss: 1.3328 - val_accuracy: 0.4340 - val_loss: 1.4245\n", "Epoch 33/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.4883 - loss: 1.3612 - val_accuracy: 0.4444 - val_loss: 1.3808\n", "Epoch 34/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.5091 - loss: 1.2764 - val_accuracy: 0.4549 - val_loss: 1.3646\n", "Epoch 35/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.4976 - loss: 1.2810 - val_accuracy: 0.4653 - val_loss: 1.3463\n", "Epoch 36/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.5108 - loss: 1.2716 - val_accuracy: 0.4653 - val_loss: 1.3406\n", "Epoch 37/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.5464 - loss: 1.1851 - val_accuracy: 0.4688 - val_loss: 1.3320\n", "Epoch 38/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.5583 - loss: 1.1685 - val_accuracy: 0.4583 - val_loss: 1.3303\n", "Epoch 39/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.5531 - loss: 1.1702 - val_accuracy: 0.4861 - val_loss: 1.3228\n", "Epoch 40/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.5678 - loss: 1.1451 - val_accuracy: 0.4965 - val_loss: 1.2761\n", "Epoch 41/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.5576 - loss: 1.1225 - val_accuracy: 0.5035 - val_loss: 1.2133\n", "Epoch 42/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.6005 - loss: 1.0755 - val_accuracy: 0.4722 - val_loss: 1.2877\n", "Epoch 43/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.5999 - loss: 1.0849 - val_accuracy: 0.5486 - val_loss: 1.1625\n", "Epoch 44/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.6124 - loss: 1.0376 - val_accuracy: 0.5139 - val_loss: 1.2740\n", "Epoch 45/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.5941 - loss: 1.0931 - val_accuracy: 0.5243 - val_loss: 1.2551\n", "Epoch 46/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.6204 - loss: 1.0023 - val_accuracy: 0.5382 - val_loss: 1.2210\n", "Epoch 47/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.6260 - loss: 0.9726 - val_accuracy: 0.5486 - val_loss: 1.1852\n", "Epoch 48/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.6579 - loss: 0.9275 - val_accuracy: 0.5590 - val_loss: 1.1390\n", "Epoch 49/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.6578 - loss: 0.9323 - val_accuracy: 0.5625 - val_loss: 1.1475\n", "Epoch 50/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.6344 - loss: 1.0003 - val_accuracy: 0.5938 - val_loss: 1.0751\n", "Epoch 51/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.6757 - loss: 0.8811 - val_accuracy: 0.5903 - val_loss: 1.1043\n", "Epoch 52/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.6650 - loss: 0.9288 - val_accuracy: 0.5972 - val_loss: 1.0543\n", "Epoch 53/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.6940 - loss: 0.8132 - val_accuracy: 0.6146 - val_loss: 0.9922\n", "Epoch 54/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.6904 - loss: 0.8325 - val_accuracy: 0.5833 - val_loss: 1.1041\n", "Epoch 55/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.6828 - loss: 0.8567 - val_accuracy: 0.6319 - val_loss: 0.9416\n", "Epoch 56/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.6997 - loss: 0.8117 - val_accuracy: 0.6215 - val_loss: 1.0143\n", "Epoch 57/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.7020 - loss: 0.8106 - val_accuracy: 0.6319 - val_loss: 0.9540\n", "Epoch 58/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.7438 - loss: 0.7429 - val_accuracy: 0.6215 - val_loss: 0.9677\n", "Epoch 59/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.7177 - loss: 0.7774 - val_accuracy: 0.6597 - val_loss: 0.9305\n", "Epoch 60/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.7146 - loss: 0.7585 - val_accuracy: 0.6528 - val_loss: 0.9641\n", "Epoch 61/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.7481 - loss: 0.6814 - val_accuracy: 0.6910 - val_loss: 0.7954\n", "Epoch 62/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.7523 - loss: 0.6655 - val_accuracy: 0.6806 - val_loss: 0.8791\n", "Epoch 63/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.7756 - loss: 0.6341 - val_accuracy: 0.6771 - val_loss: 0.8422\n", "Epoch 64/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.7310 - loss: 0.7380 - val_accuracy: 0.7083 - val_loss: 0.8076\n", "Epoch 65/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.7553 - loss: 0.6756 - val_accuracy: 0.7396 - val_loss: 0.6976\n", "Epoch 66/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.8022 - loss: 0.5456 - val_accuracy: 0.7257 - val_loss: 0.6977\n", "Epoch 67/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.7832 - loss: 0.6260 - val_accuracy: 0.7014 - val_loss: 0.7721\n", "Epoch 68/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 21ms/step - accuracy: 0.7536 - loss: 0.6623 - val_accuracy: 0.7396 - val_loss: 0.7405\n", "Epoch 69/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 22ms/step - accuracy: 0.7990 - loss: 0.6290 - val_accuracy: 0.7188 - val_loss: 0.8257\n", "Epoch 70/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 22ms/step - accuracy: 0.7708 - loss: 0.6380 - val_accuracy: 0.7812 - val_loss: 0.6389\n", "Epoch 71/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 23ms/step - accuracy: 0.8145 - loss: 0.5247 - val_accuracy: 0.7049 - val_loss: 0.8497\n", "Epoch 72/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.7706 - loss: 0.6614 - val_accuracy: 0.7326 - val_loss: 0.7003\n", "Epoch 73/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.8195 - loss: 0.5402 - val_accuracy: 0.7847 - val_loss: 0.5694\n", "Epoch 74/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.8498 - loss: 0.4310 - val_accuracy: 0.8125 - val_loss: 0.5392\n", "Epoch 75/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.8564 - loss: 0.4021 - val_accuracy: 0.8090 - val_loss: 0.5493\n", "Epoch 76/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.8385 - loss: 0.4566 - val_accuracy: 0.8160 - val_loss: 0.4707\n", "Epoch 77/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.8703 - loss: 0.3916 - val_accuracy: 0.8125 - val_loss: 0.5303\n", "Epoch 78/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.8670 - loss: 0.4032 - val_accuracy: 0.8229 - val_loss: 0.5355\n", "Epoch 79/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.7980 - loss: 0.5889 - val_accuracy: 0.8090 - val_loss: 0.5217\n", "Epoch 80/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.8532 - loss: 0.4392 - val_accuracy: 0.7465 - val_loss: 0.7366\n", "Epoch 81/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.8216 - loss: 0.5801 - val_accuracy: 0.8542 - val_loss: 0.4492\n", "Epoch 82/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 20ms/step - accuracy: 0.8776 - loss: 0.3518 - val_accuracy: 0.8611 - val_loss: 0.4665\n", "Epoch 83/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 21ms/step - accuracy: 0.8704 - loss: 0.3913 - val_accuracy: 0.8681 - val_loss: 0.3597\n", "Epoch 84/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 21ms/step - accuracy: 0.8794 - loss: 0.3654 - val_accuracy: 0.8819 - val_loss: 0.3734\n", "Epoch 85/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.9052 - loss: 0.2984 - val_accuracy: 0.8924 - val_loss: 0.3333\n", "Epoch 86/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9122 - loss: 0.2744 - val_accuracy: 0.8854 - val_loss: 0.3645\n", "Epoch 87/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.8811 - loss: 0.3982 - val_accuracy: 0.8507 - val_loss: 0.4365\n", "Epoch 88/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.8503 - loss: 0.4938 - val_accuracy: 0.8472 - val_loss: 0.4148\n", "Epoch 89/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.8694 - loss: 0.4349 - val_accuracy: 0.8507 - val_loss: 0.4137\n", "Epoch 90/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.8829 - loss: 0.3551 - val_accuracy: 0.8889 - val_loss: 0.3069\n", "Epoch 91/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9086 - loss: 0.2807 - val_accuracy: 0.9271 - val_loss: 0.2338\n", "Epoch 92/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.8819 - loss: 0.3671 - val_accuracy: 0.8611 - val_loss: 0.4722\n", "Epoch 93/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.8720 - loss: 0.4260 - val_accuracy: 0.8750 - val_loss: 0.3514\n", "Epoch 94/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9211 - loss: 0.2517 - val_accuracy: 0.9410 - val_loss: 0.2341\n", "Epoch 95/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9250 - loss: 0.2363 - val_accuracy: 0.8750 - val_loss: 0.4733\n", "Epoch 96/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.8295 - loss: 0.7536 - val_accuracy: 0.7812 - val_loss: 0.7854\n", "Epoch 97/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.8780 - loss: 0.3910 - val_accuracy: 0.8819 - val_loss: 0.3962\n", "Epoch 98/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9286 - loss: 0.2540 - val_accuracy: 0.9097 - val_loss: 0.2751\n", "Epoch 99/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9195 - loss: 0.2469 - val_accuracy: 0.8889 - val_loss: 0.2868\n", "Epoch 100/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9285 - loss: 0.2064 - val_accuracy: 0.9340 - val_loss: 0.2146\n", "Epoch 101/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9480 - loss: 0.1748 - val_accuracy: 0.9375 - val_loss: 0.2259\n", "Epoch 102/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9600 - loss: 0.1475 - val_accuracy: 0.9201 - val_loss: 0.2264\n", "Epoch 103/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9378 - loss: 0.1833 - val_accuracy: 0.9722 - val_loss: 0.1391\n", "Epoch 104/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9416 - loss: 0.2220 - val_accuracy: 0.8889 - val_loss: 0.3331\n", "Epoch 105/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.8693 - loss: 0.4806 - val_accuracy: 0.8958 - val_loss: 0.4250\n", "Epoch 106/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.8749 - loss: 0.3716 - val_accuracy: 0.9479 - val_loss: 0.1862\n", "Epoch 107/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.9430 - loss: 0.1981 - val_accuracy: 0.9479 - val_loss: 0.1678\n", "Epoch 108/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9491 - loss: 0.1635 - val_accuracy: 0.9583 - val_loss: 0.1308\n", "Epoch 109/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.9563 - loss: 0.1434 - val_accuracy: 0.9236 - val_loss: 0.2487\n", "Epoch 110/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9105 - loss: 0.2958 - val_accuracy: 0.9340 - val_loss: 0.2683\n", "Epoch 111/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9358 - loss: 0.2196 - val_accuracy: 0.9549 - val_loss: 0.1811\n", "Epoch 112/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9491 - loss: 0.2278 - val_accuracy: 0.9549 - val_loss: 0.1639\n", "Epoch 113/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9447 - loss: 0.1797 - val_accuracy: 0.9271 - val_loss: 0.2196\n", "Epoch 114/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9286 - loss: 0.2494 - val_accuracy: 0.9167 - val_loss: 0.3452\n", "Epoch 115/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9184 - loss: 0.3099 - val_accuracy: 0.8646 - val_loss: 0.4911\n", "Epoch 116/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.8553 - loss: 0.6096 - val_accuracy: 0.9097 - val_loss: 0.3920\n", "Epoch 117/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9028 - loss: 0.3418 - val_accuracy: 0.9132 - val_loss: 0.3387\n", "Epoch 118/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9131 - loss: 0.3048 - val_accuracy: 0.9514 - val_loss: 0.1927\n", "Epoch 119/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9506 - loss: 0.1871 - val_accuracy: 0.9722 - val_loss: 0.1258\n", "Epoch 120/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9440 - loss: 0.2410 - val_accuracy: 0.9653 - val_loss: 0.1218\n", "Epoch 121/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9566 - loss: 0.1540 - val_accuracy: 0.9896 - val_loss: 0.0646\n", "Epoch 122/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9664 - loss: 0.1116 - val_accuracy: 0.9861 - val_loss: 0.0637\n", "Epoch 123/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9732 - loss: 0.0885 - val_accuracy: 0.9826 - val_loss: 0.0530\n", "Epoch 124/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9746 - loss: 0.1062 - val_accuracy: 0.9792 - val_loss: 0.0599\n", "Epoch 125/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9544 - loss: 0.1428 - val_accuracy: 0.9340 - val_loss: 0.1840\n", "Epoch 126/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9577 - loss: 0.1525 - val_accuracy: 0.9653 - val_loss: 0.1477\n", "Epoch 127/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9581 - loss: 0.1310 - val_accuracy: 0.9896 - val_loss: 0.0937\n", "Epoch 128/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9600 - loss: 0.1122 - val_accuracy: 0.9792 - val_loss: 0.0769\n", "Epoch 129/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9633 - loss: 0.1239 - val_accuracy: 0.9583 - val_loss: 0.2492\n", "Epoch 130/130\n", "\u001b[1m72/72\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9667 - loss: 0.1483 - val_accuracy: 0.9618 - val_loss: 0.1356\n" ] } ], "source": [ "model_A = create_model_LSTM()\n", "history = model_A.fit(w, y_cat[:training_samples], validation_data=(np.expand_dims(X[training_samples: training_samples+validation_samples], -1),y_cat[training_samples: training_samples+validation_samples]), epochs=130, shuffle=True)" ] }, { "cell_type": "markdown", "id": "bb3bf8c7-1d41-464b-83c9-9926ceee4d62", "metadata": {}, "source": [ "### Model Evaluation\n", "\n", "After training, the model is evaluated on the test set to determine its final accuracy. The test accuracy provides an indication of how well the model generalizes to unseen data." ] }, { "cell_type": "code", "execution_count": 85, "id": "74caa6ca-d114-4d23-bf42-a80728f81ae8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m81/81\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9899 - loss: 0.0427\n", "Evaluation Metrics:\n", "Loss: 0.05488839000463486\n", "Accuracy: 0.9868826866149902\n", "\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step\n", "True label: 5, Predicted label: 2\n", "True label: 2, Predicted label: 2\n", "True label: 3, Predicted label: 3\n", "True label: 1, Predicted label: 1\n", "True label: 1, Predicted label: 1\n", "True label: 1, Predicted label: 1\n", "True label: 7, Predicted label: 7\n", "True label: 0, Predicted label: 0\n", "True label: 3, Predicted label: 3\n", "True label: 2, Predicted label: 2\n" ] } ], "source": [ "\n", "\n", "# Evaluation on test data\n", "evaluation = model_A.evaluate(\n", " np.expand_dims(X[test_samples:], -1), # Test data (assuming X is your test data)\n", " y_cat[test_samples:], # Test labels in categorical format (assuming y_cat is your test labels)\n", ")\n", "\n", "# Printing evaluation metrics\n", "print(\"Evaluation Metrics:\")\n", "print(\"Loss:\", evaluation[0])\n", "print(\"Accuracy:\", evaluation[1])\n", "\n", "predictions = model_A.predict(X_test)\n", "predicted_labels = np.argmax(predictions, axis=1)\n", "true_labels = np.argmax(y_test, axis=1)\n", "\n", "# Print some predictions\n", "for i in range(10):\n", " print(f\"True label: {true_labels[i]}, Predicted label: {predicted_labels[i]}\")\n" ] }, { "cell_type": "markdown", "id": "afb7c218-949d-4729-9beb-63516a267d7e", "metadata": {}, "source": [ "\n", "# Model Training and Test Accuracy\n", "\n", "The following plot shows the accuracy of the Conv1D model over 100 epochs for both the training and test datasets.\n" ] }, { "cell_type": "code", "execution_count": 88, "id": "0c09a48c-9541-48b7-a14d-255d02d6feb4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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Y4+Rk5NjkebLL7+kVatW6PV6AgICePLJJy2+T01N5e6778bR0ZGmTZuyYsWKmi20EPWEBG4hRDn//ve/uffee9m/fz8PPPAAY8eO5ciRI4C6z/Xtt9+Oh4cHO3fuZNmyZaxZs8YiMM+bN48nnniCxx57jNjYWFasWEGTJk0snvHqq68yatQoDhw4wNChQ7n//vtJT0+/qeUUok6q7e3JhBA318SJExWdTqc4OTlZvGbNmqUoirq16+TJky2u6dKli/L4448riqIon332meLh4aHk5OSYv//9998VrVarJCcnK4qiKIGBgcqMGTMqzQOg/N///Z/5c05OjqLRaJQ//vjDauUUor6SPm4hGqB+/foxb948i3Oenp7m427dull8161bN/bt2wfAkSNHaNeuHU5OTubve/Togclk4tixY2g0GhITExkwYMBV89C2bVvzsZOTEy4uLqSkpFxvkYRoMCRwC9EAOTk5lWu6vhaNRgOAoijm44rSODg4VOl+tra25a41mUzVypMQDZH0cQshytm2bVu5zy1atACgZcuW7Nu3j9zcXPP3mzdvRqvV0qxZM1xcXAgLC2Pt2rU3Nc9CNBRS4xaiASooKCA5OdninI2NDd7e3gAsW7aM6OhoevbsyTfffMOOHTtYsGABAPfffz8zZ85k4sSJvPLKK1y8eJGnnnqK8ePH4+fnB8Arr7zC5MmT8fX1ZciQIWRnZ7N582aeeuqpm1tQIeohCdxCNEB//vknAQEBFueaN2/O0aNHAXXE95IlS5gyZQr+/v588803tGzZEgBHR0dWrVrFM888Q6dOnXB0dOTee+/l3XffNd9r4sSJ5Ofn89577/H888/j7e3NyJEjb14BhajHNIqiKLWdCSHErUOj0fDTTz8xYsSI2s6KEKIC0scthBBC1CESuIUQQog6RPq4hRAWpPdMiFub1LiFEEKIOkQCtxBCCFGHSOAWQggh6hAJ3EIIIUQdIoFbCCGEqEMkcAshhBB1iARuIYQQog6RwC2EEELUIf8P4X2pDRHhPH4AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12, 4))\n", "plt.subplot(1, 2, 1)\n", "plt.plot(history.history['accuracy'])\n", "plt.plot(history.history['val_accuracy'])\n", "plt.title('Model accuracy')\n", "plt.ylabel('Accuracy')\n", "plt.xlabel('Epoch')\n", "plt.legend(['Train', 'Test'], loc='upper left')" ] }, { "cell_type": "markdown", "id": "617d7de2-cf38-4b87-a94e-8a1f6c406c37", "metadata": {}, "source": [ "## Description\n", "\n", "- **X-axis (Epoch)**: Represents the number of epochs, ranging from 0 to 130\n", "- **Y-axis (Accuracy)**: Represents accuracy, ranging from 0 to 1.0.\n", "\n", "## Observations\n", "\n", "- **Training Accuracy (Blue Line)**: The 'Train' accuracy line shows a consistent increase over epochs, indicating continuous improvement in performance on the training data.\n", "- **Test Accuracy (Orange Line)**: The 'Test' accuracy line fluctuates but generally follows the upward trend of the 'Train' line. This suggests that the model's performance on unseen test data also improves over epochs, with some variability." ] }, { "cell_type": "markdown", "id": "476b3c27-8d4a-4e89-846f-513824e987cb", "metadata": {}, "source": [ "# Confusion Matrix\n", "\n", "The following plot shows the confusion matrix for the Conv1D model's predictions on the test dataset.\n", "\n" ] }, { "cell_type": "code", "execution_count": 91, "id": "1a149853-2e28-4a36-92a6-ca4f1312bd2c", "metadata": {}, "outputs": [ { "data": { "image/png": "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crm0efPmBr83gIZBIgE0oLFjx8rlcsnlcik6OlqnnHKKbrnlFlVXV1t63/vuu09Lly4N6lq++QMIBW9CARrYBRdcoCVLlujw4cN6++23dc0116i6uloLFiwIuO7w4cOKjo425Z7x8fGm9AMAv0RFAmhgbrdbCQkJ6tChg0aPHq0rrrhCq1ev9k9HPPbYYzrllFPkdrtlGIb27dun6667Tu3atVOrVq00aNAgvf/++wF9zp49Wx6PR3Fxcbr66qt18ODBgPO/nNqoqanRnDlzdOqpp8rtdqtjx46aNWuWJPlfyZ6amiqXy6WBAwf6P7dkyRJ1795dzZs3V7du3fTQQw8F3Ofdd99VamqqmjdvrrS0NG3atMnEPzkAkYiKBGCzmJgYHT58WJK0Y8cOPfPMM3ruuecUFRUlSRo2bJjatGmjl156SfHx8XrkkUc0ePBgbd++XW3atNEzzzyjGTNm6MEHH9Q555yjJ554Qvfff79OOeWUo95z+vTpWrRoke69914NGDBAe/bs0ccffyzpp2Tg7LPP1quvvqqePXuqWbNmkqRFixZpxowZKigoUGpqqjZt2qRrr71WLVq00JgxY1RdXa3f/va3GjRokJYvX66ysjJNnjzZ4j89ALaz+e2jwK/KmDFjjBEjRvi//te//mW0bdvWuOSSS4wZM2YY0dHRRkVFhf/8a6+9ZrRq1co4ePBgQD9dunQxHnnkEcMwDCMjI8OYMGFCwPn09HSjT58+dd63qqrKcLvdxqJFi+qMsayszJBkbNq0KeB4hw4djBUrVgQc++tf/2pkZGQYhmEYjzzyiNGmTRujurraf37BggV19gXAOZjaABrYiy++qJYtW6p58+bKyMjQueeeqwceeECS1KlTJ5100kn+azdu3Kjvv/9ebdu2VcuWLf2trKxMn376qSRp69atysjICLjHL7/+b1u3bpXP59PgwYODjnnv3r3avXu3rr766oA4Zs6cGRBHnz59FBsbG1QcAJyBqQ2ggZ133nlasGCBoqOjlZSUFLCgskWLFgHX1tTUKDExUW+++Watflq3bh3W/WNiYkL+TE1NjaSfpjfS09MDzv08BWMYRljxAGjcSCSABtaiRQudeuqpQV175plnqry8XE2bNlXnzp3rvKZ79+5av369rrrqKv+x9evXH7XPlJQUxcTE6LXXXtM111xT6/zPayKOHDniP+bxeHTyySdr586duuKKK+rst0ePHnriiSd04MABf7JyrDgAOANTG0AEO//885WRkaGRI0fqlVde0WeffaZ169bptttu04YNGyRJkydP1mOPPabHHntM27dv14wZM1RaWnrUPps3b65p06Zp6tSpevzxx/Xpp59q/fr1evTRRyVJ7dq1U0xMjNauXat///vf2rdvn6SfHnLl9Xp13333afv27dqyZYuWLFmiefPmSZJGjx6tJk2a6Oqrr9ZHH32kl156SXfffbfFf0IA7EYiAUQwl8ull156Seeee67GjRunrl276rLLLtNnn30mj8cjSbr00kt1xx13aNq0aerbt68+//xzXX/99cfs9/bbb9ef/vQn3XHHHerevbsuvfRSVVRUSJKaNm2q+++/X4888oiSkpI0YsQISdI111yjxYsXa+nSperdu7cyMzO1dOlS/3bRli1b6oUXXtBHH32k1NRU5ebmas6cORb+6QCIBC6DiU0AABAmKhIAACBsJBIAACBsJBIAACBsJBIAACBsJBIAACBsJBIAACBsJBIAACBsJBIAACBsJBIAACBsJBIAACBsJBIAACBs/x9tILUaZpgtzAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "# Compute confusion matrix\n", "conf_matrix = confusion_matrix(true_labels, predicted_labels)\n", "sns.heatmap(conf_matrix, annot=True, fmt=\"d\", cmap=\"Blues\", xticklabels=label_encoder.classes_, yticklabels=label_encoder.classes_)\n", "plt.ylabel('Actual')\n", "plt.xlabel('Predicted')\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "7042688c-5e80-412b-a2f1-9cb5c62b9281", "metadata": {}, "source": [ "\n", "\n", "### Description\n", "\n", "- **X-axis (Predicted)**: Represents the predicted emotion labels by the model.\n", "- **Y-axis (Actual)**: Represents the actual emotion labels.\n", "- **Color Scale**: The intensity of the color represents the number of instances classified in each category, with darker colors indicating a higher number of instances.\n", "\n", "### Emotion Labels\n", "The numerical labels correspond to the following emotions:\n", "- 0: Neutral\n", "- 1: Calm\n", "- 2: Happy\n", "- 3: Sad\n", "- 4: Angry\n", "- 5: Fearful\n", "- 6: Disgust\n", "- 7: Surprised\n", "\n", "### Observations\r\n", "\r\n", "1. **Class 0:**\r\n", " - Perfect prediction: 36 instances correctly predicted.\r\n", " - No misclassifications.\r\n", "\r\n", "2. **Class 1 to 7:**\r\n", " - The majority of predictions are correct for each class.\r\n", " - There is a slight off-diagonal spread indicating some misclassifications to neighboring classes.\r\n", "\r\n", "3. **General Trend:**\r\n", " - High accuracy for each class.\r\n", " - Misclassifications mostly occur in adjacent classes, indicating that errors are minor and close to the actual class.\r\n", "\r\n", "### Conclusions\r\n", "\r\n", "- **High Model Accuracy:** The LSTM model performs exceptionally well, particularly for class 0 with no misclassifications.\r\n", "- **Adjacent Class Misclassifications:** The few errors made are predominantly in predicting adjacent classes, suggesting the model's confusion is limited to closely related classes.\r\n", "- **Strong Performance Across All Classes:** The confusion matrix demonstrates that the model has robust predictive capabilities for a range of classes.\r\n" ] }, { "cell_type": "code", "execution_count": 57, "id": "989966bb-a2b4-48b9-b2b6-c6f4e9a6fb61", "metadata": {}, "outputs": [], "source": [ "model.save('emotion_recognition_model_LSTM.keras')" ] }, { "cell_type": "code", "execution_count": null, "id": "f4596afd-1c4a-4dfe-8dd5-7d8c907e9737", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9" } }, "nbformat": 4, "nbformat_minor": 5 }