{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Intro to Neural Networks\n", "\n", "## Exercise: neurons as logic gates\n", "In this exercise we will experiment with neuron computations. We will show how to represent basic logic functions like AND, OR, and XOR using single neurons (or more complicated structures). Finally, at the end we will walk through how to represent neural networks as a chain of matrix computations." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sigmoid function:\n", "\n", "$$\n", "\\sigma = \\frac{1}{1 + e^{-x}}\n", "$$\n", "\n", "$\\sigma$ ranges from (0, 1). When the input $x$ is negative, $\\sigma$ is close to 0. When $x$ is positive, $\\sigma$ is close to 1. At $x=0$, $\\sigma=0.5$" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "## Quickly define the sigmoid function\n", "def sigmoid(x):\n", " \"\"\"Sigmoid function\"\"\"\n", " return 1.0 / (1.0 + np.exp(-x))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "