{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "RollNumber_partB_PA4.ipynb", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "WdFUrY9aLUhI" }, "source": [ "## CS535/EE514 - Spring 2022 - Assignment 4 - Part B\n", "\n", "\n", "\n", "#### Important Instructions and Submission Guidelines:\n", "- ## Important Instructions and Submission Guidelines:\n", "- Submit your code both as notebook file (.ipynb) and python script (.py) on LMS. Naming convention for submission of this notebook is `RollNumber_partB_PA4.ipynb` where. For example: `23100042_partB_PA4.ipynb`\n", "- All the cells must be run once before submission. If your submission's cells are not showing the results (plots etc.), marks wil be deducted\n", "- Only the code written within this notebook's marked areas will be considered while grading. No other files will be entertained\n", "- You are advised to follow good programming practies including approriate variable naming and making use of logical comments.\n", "\n", "\n", "The university honor code should be maintained. Any violation, if found, will result in disciplinary action. \n" ] }, { "cell_type": "markdown", "metadata": { "id": "dClE8ipfLWKI" }, "source": [ "Double click here to enter your name and roll number: \n", "Name: \n", "\n", "Roll Number: \n", "" ] }, { "cell_type": "markdown", "source": [ "* Mount your Drive" ], "metadata": { "id": "pvItjIt2CxmQ" } }, { "cell_type": "code", "source": [ "from google.colab import drive\n", "drive.mount('/content/gdrive', force_remount=True)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "jCgAAEaqdX4P", "outputId": "64dfa475-4283-4fdd-e950-9b71a7412648" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Mounted at /content/gdrive\n" ] } ] }, { "cell_type": "markdown", "source": [ "* Import Libraries" ], "metadata": { "id": "sNPRCZPBCzYp" } }, { "cell_type": "code", "source": [ "from numpy import array\n", "from numpy import hstack\n", "import tensorflow\n", "from keras.models import Sequential\n", "from keras.layers import Dense\n", "from keras.layers import Flatten\n", "from keras.layers.convolutional import Conv1D\n", "from keras.layers.convolutional import MaxPooling1D\n", "from keras.layers import ReLU\n", "from keras.layers import LeakyReLU\n", "from keras.layers import Softmax\n", "from tensorflow import keras\n", "from tensorflow.keras.optimizers import Adam\n", "import csv\n", "import matplotlib.pyplot as plt\n", "from keras.models import load_model\n", "from keras.models import load_model\n", "import numpy as np\n", "from tensorflow import keras\n", "import keras.optimizers\n", "#from utils.openmax import image_show, compute_activation, compute_openmax\n", "import librosa\n", "import soundfile\n", "import os, glob, pickle\n", "import numpy as np\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.neural_network import MLPClassifier\n", "from sklearn.metrics import accuracy_score\n", "from sklearn.metrics import f1_score\n", "from sklearn.metrics import precision_score\n", "from IPython.display import Audio \n", "from sklearn.metrics import confusion_matrix\n", "from pydub import AudioSegment" ], "metadata": { "id": "Di6ZBPMnC6az" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "**Part 1: Load Dataset**
\n", "Use the given link to unzip the folder of wav files:
\n", "[Audio Dataset](https://drive.google.com/file/d/1C3JXfb-LwPWD8WlhWYnNt5J02BKdHRg3/view?usp=sharing)
\n", "* 2671.wav - 3213.wav are male audio files
\n", "* 1308.wav - 1811.wav are female audio files
\n", "\n", "Perform a train-test split on your dataset.
\n", "Generate labels for the audio files as well." ], "metadata": { "id": "zr-zVrqyECO1" } }, { "cell_type": "code", "source": [ "# Code Here\n", "\n", "# ---------" ], "metadata": { "id": "GQJM1wpYHkad" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "**Part 2: Feature Extraction**\n", "\n", "Define a function **extract_feature** to extract the mfcc, chroma, spec_cen and mel features from a sound file. This function takes 5 parameters- the file name and four Boolean parameters for the four features:\n", "\n", " \n", "\n", "1. **mfcc:** Mel Frequency Cepstral Coefficient, represents the short-term power spectrum of the sound\n", "2. **chroma:** Pertains to the 12 different pitch classes\n", "3. **spec_cen:** It indicates where the ”centre of mass” for a sound is located and is calculated as the weighted mean of the frequencies present in the sound.\n", "4. **mel:** Mel Spectrogram Frequency" ], "metadata": { "id": "bpedhNWgDKZH" } }, { "cell_type": "code", "source": [ "def extract_feature(file_name, mfcc, chroma, mel, spec_cen):\n", " # Code Here\n", "\n", " # ---------\n", " return result" ], "metadata": { "id": "XBBk5GbWDJaS" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Call extract_feature function here\n", "# Code Here\n", "\n", "# ---------" ], "metadata": { "id": "cftPT2CrJw-a" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "If you use all the extracted features, your model might take a lot of time to converge. Apply PCA to reduce the dimensionality of vector x.
\n", "You may use an in-built library function for this." ], "metadata": { "id": "ee31TJRhJfhT" } }, { "cell_type": "code", "source": [ "# Apply PCA on your features to reduce dimension\n", "# Code Here\n", "\n", "# ---------" ], "metadata": { "id": "ogeeH2xvJ49V" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "**Part 3: Implementation of Logistic Regression From\n", "Scratch (30 Marks)**" ], "metadata": { "id": "ITIgOIBYHw7i" } }, { "cell_type": "markdown", "source": [ "You are required to implement **Binary Logistic Regression Model** from scratch keeping in view all the discussions from the class lectures.
" ], "metadata": { "id": "GVD15mHnHxcH" } }, { "cell_type": "markdown", "source": [ "\n", "\n", "* Sigmoid Function
\n", "\n", "The sigmoid function is used on the classifier to compute the probability of the feature vector x belonging to that class. Then the label of the classifier which returns the highest probability is assigned to x.
\n", "**If Scikit-Learn is used in this part, you will NOT get any credit.**
\n", "It is HIGHLY recommended that you use matrix multiplication in your implementation instead of for loops to avoid unnecessary runtime. \n", "![Sigmoid.png](data:image/png;base64,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)\n", "\n" ], "metadata": { "id": "eeFYeB2F7KUu" } }, { "cell_type": "code", "source": [ "# Implement sigmoid function here\n", "# Code Here\n", "\n", "# ---------" ], "metadata": { "id": "rRTOw1UP55dE" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "\n", "\n", "* Cross Entropy Loss
\n", "\n", "![Loss.png](data:image/png;base64,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)\n", "\n" ], "metadata": { "id": "4jmMIA-g7Di-" } }, { "cell_type": "code", "source": [ "# Implement Cross Entropy Loss here\n", "# Code Here\n", "\n", "# ---------" ], "metadata": { "id": "1FJJvyWy7c5Z" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "* Batch Gradient Descent
\n", "\n", "We require you to incorporate **L2 regularization** in the loss function, that is:
\n", "![Descent.png](data:image/png;base64,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)\n", "\n", "where L(θ) is cross-entropy loss and λ is the regularization parameter.
\n", "\n", "You will compute the derivative of the new loss expression and update the weights of the model using the derivative during the implementation of batch gradient descent.
\n", "\n", "Run your batch gradient descent function for large number of epochs, e.g. around 1000, to get good F1-scores." ], "metadata": { "id": "fjlIqVj685lD" } }, { "cell_type": "code", "source": [ "# Implement Batch Gradient Descent here\n", "# Code Here\n", "\n", "# ---------" ], "metadata": { "id": "5ROtL0Oa8zVD" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "\n", "\n", "* Prediction Function
\n", "\n", "It predicts the labels of test data.\n", "\n" ], "metadata": { "id": "mHjWqFs19sat" } }, { "cell_type": "code", "source": [ "# Implement Prediction Function here\n", "# Code Here\n", "\n", "# ---------" ], "metadata": { "id": "TuSLLDBG92X8" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "Implementation:
\n", "Using the above functions, implement your Logistic Regression Classifier.
\n", "Remember to store the training loss for result visualization.
\n" ], "metadata": { "id": "XZ1bLQpo-PKK" } }, { "cell_type": "code", "source": [ "# Implement Logistic Regression \n", "# Code Here\n", "\n", "# ---------" ], "metadata": { "id": "WfIwJdLX-jEL" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "\n", "\n", "Visualize Results on Training Data:
\n", "\n", "Plot graphs for different values of learning rate and regularization parameter with no of epochs on the x-axis and training loss on the y-axis.
\n", "The overall loss is computed by adding the loss of all classifiers.
" ], "metadata": { "id": "3wTWNwgk99Xz" } }, { "cell_type": "code", "source": [ "# Plot results for training loss here\n", "# Code Here\n", "\n", "# ---------" ], "metadata": { "id": "HqtUE_sY98n3" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "* Evaluation function
\n", "\n", "It calculates classification accuracy, F1 score and confusion\n", "matrix. Pass the labels of test data in this function and report your results." ], "metadata": { "id": "9Bwhr_Mw_IAl" } }, { "cell_type": "code", "source": [ "# Implement Evaluation Function here\n", "# Code Here\n", "\n", "# ---------" ], "metadata": { "id": "s7BQDfSr_ERd" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Call Evaluation Function here \n", "# Code Here\n", "\n", "# ---------" ], "metadata": { "id": "7ZssuCa8_hKB" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "**Part-4: Logistic Regression using Scikit-Learn (10 Marks)**" ], "metadata": { "id": "FYt259pU_oJ4" } }, { "cell_type": "markdown", "source": [ "Use Scikit-Learn’s Logistic Regression implementation to train and test the dataset.
\n", "The model should be similar to the one you made from scratch.
\n", "Remember to implement the in-built classifier in binary classification mode.
\n", "You are not required to plot graphs in this part.
\n", "Report the accuracy, F1 score, and confusion matrix of test data using Scikit-Learn.
" ], "metadata": { "id": "qtHmUNvW_rNV" } }, { "cell_type": "code", "source": [ "# Implement Logistic Regression using Scikit-Learn library here \n", "# Code Here\n", "\n", "# ---------" ], "metadata": { "id": "xnA5fiVn__Bd" }, "execution_count": null, "outputs": [] } ] }