{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <p style=\"text-align: right;\"> &#9989; Put your name here</p>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Day 22 Pre-Class assignment: Back propagation\n",
    "This pre-class assignment finishes out the videos from \"Neural Networks Demystified\" module.  Please watch the videos.  Again, you do not have to understand the equations but the math is included for completeness.\n",
    "\n",
    "If you are lost, I highly recommend reviewing the entire \"Neural Networks Demystified\" module which can be downloaded from github:\n",
    "\n",
    "    git clone https://github.com/stephencwelch/Neural-Networks-Demystified\n",
    "\n",
    "\n",
    "<img src=\"https://www.pyimagesearch.com/wp-content/uploads/2016/08/simple_neural_network_header.jpg\" width=400px>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Goals for this pre-class assignment:\n",
    "\n",
    "1. Reviewing gradient descent\n",
    "1. Performing Back Propagation\n",
    "1. Training at network\n",
    "\n",
    "## Assignment instructions\n",
    "\n",
    "**This assignment is due by 11:59 p.m. the day before class** and should be uploaded into the appropriate \"Pre-class assignments\" dropbox folder in the Desire2Learn website.\n",
    "\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Gradient Decent\n",
    "\n",
    "&#9989; Do This -  watch the following video:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "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\n",
      "text/html": [
       "\n",
       "        <iframe\n",
       "            width=\"640\"\n",
       "            height=\"360\"\n",
       "            src=\"https://www.youtube.com/embed/5u0jaA3qAGk\"\n",
       "            frameborder=\"0\"\n",
       "            allowfullscreen\n",
       "        ></iframe>\n",
       "        "
      ],
      "text/plain": [
       "<IPython.lib.display.YouTubeVideo at 0x2028e54c988>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.display import YouTubeVideo\n",
    "YouTubeVideo('5u0jaA3qAGk',width=640,height=360)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Question 1**: In simple terms, explain the \"Curse of Dimensionality\"?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<font size=8 color=\"#009600\">&#9998;</font> Do This - Erase the contents of this cell and replace it with your answer to the above question!  (double-click on this text to edit this cell, and hit shift+enter to save the text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## 2. Back Propagation:\n",
    "\n",
    "Now watch the following video:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/jpeg": "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\n",
      "text/html": [
       "\n",
       "        <iframe\n",
       "            width=\"640\"\n",
       "            height=\"360\"\n",
       "            src=\"https://www.youtube.com/embed/GlcnxUlrtek\"\n",
       "            frameborder=\"0\"\n",
       "            allowfullscreen\n",
       "        ></iframe>\n",
       "        "
      ],
      "text/plain": [
       "<IPython.lib.display.YouTubeVideo at 0x2028e39e688>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "YouTubeVideo('GlcnxUlrtek',width=640,height=360)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Question 2**: The gradient decent algorithm in Neural Networks is often called  \"back propagation.\"  What is being passed back though the algorithm and causing the weights to be updated? "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<font size=8 color=\"#009600\">&#9998;</font> Do This - Erase the contents of this cell and replace it with your answer to the above question!  (double-click on this text to edit this cell, and hit shift+enter to save the text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here is a link to the entire code so far:\n",
    "\n",
    "https://raw.githubusercontent.com/stephencwelch/Neural-Networks-Demystified/master/partSix.py"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "&#9989; Do This -  Download and inspect the partSix.py file and run the following command:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from partSix import *\n",
    "print(X)\n",
    "print(y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "&#9989; Do This -  Create an instance of the Neural Network and apply forward function to estimate $\\hat{y}$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# put your code here\n",
    "NN = \n",
    "NN.forward(X)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Question 3**: How good is this initial estimation?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<font size=8 color=\"#009600\">&#9998;</font> Do This - Erase the contents of this cell and replace it with your answer to the above question!  (double-click on this text to edit this cell, and hit shift+enter to save the text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## 3. Training:\n",
    "\n",
    "Please watch the following video:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from IPython.display import YouTubeVideo\n",
    "YouTubeVideo('9KM9Td6RVgQ',width=640,height=360)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "&#9989; Do This -  Now, create an instance of the ```trainer``` class from the partSix.py file. Call the objects ```train``` function by passing it the original ```X``` and ```y``` data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Put your code here\n",
    "T = \n",
    "T.train(X,y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "&#9989; Do This -  If done correctly, the ```NN``` object should now be trained. Apply the forward function again to see the new estimation of $\\hat{y}$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Question 4**: Hopefully this worked and the estimation is better than the previous one.  How close are these values to the original grades?  What shortcomings are there to testing using this approach?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<font size=8 color=\"#009600\">&#9998;</font> Do This - Erase the contents of this cell and replace it with your answer to the above question!  (double-click on this text to edit this cell, and hit shift+enter to save the text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "# Assignment wrap-up\n",
    "\n",
    "Please fill out the form that appears when you run the code below.  **You must completely fill this out in order to receive credit for the assignment!**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from IPython.display import HTML\n",
    "HTML(\n",
    "\"\"\"\n",
    "<iframe \n",
    "\tsrc=\"https://cmse.msu.edu/cmse202-pc-survey\" \n",
    "\twidth=\"800px\" \n",
    "\theight=\"600px\" \n",
    "\tframeborder=\"0\" \n",
    "\tmarginheight=\"0\" \n",
    "\tmarginwidth=\"0\">\n",
    "\tLoading...\n",
    "</iframe>\n",
    "\"\"\"\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---------\n",
    "### Congratulations, you're done with your pre-class assignment!\n",
    "\n",
    "Now, you just need to submit this assignment by uploading it to the course <a href=\"https://d2l.msu.edu/\">Desire2Learn</a> web page for today's submission folder (Don't forget to add your name in the first cell)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "&#169; Copyright Michigan State University Board of Trustees."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
