Skip to content

Instantly share code, notes, and snippets.

@deep5050
Last active January 4, 2020 20:57
Show Gist options
  • Save deep5050/86e7f17d995fbf9d461381420cdac2a4 to your computer and use it in GitHub Desktop.
Save deep5050/86e7f17d995fbf9d461381420cdac2a4 to your computer and use it in GitHub Desktop.
bacpropagation, GA based weight determination, generic GA, perceptron learning
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"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.3"
},
"colab": {
"name": "generic_backprop.ipynb",
"provenance": [],
"include_colab_link": true
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/deep5050/86e7f17d995fbf9d461381420cdac2a4/generic_backprop.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "HsWRMBkoUq5x",
"colab_type": "code",
"colab": {}
},
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"# for this assignment we are using this only for ploting the MSE in each tuning iteration"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "j6KLtlKZUq6F",
"colab_type": "code",
"colab": {}
},
"source": [
"np.random.seed(100)"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "1opQmE57Uq6P",
"colab_type": "code",
"colab": {}
},
"source": [
"#Object Oriented approach of the neural network model has been taken here\n",
"#we are assuming here that weights,bias,activation function can be given by the user as function parameter\n",
"# if these paremeters are not passed to the class , each layer will be likely different\n",
"# w.r.t to the bias and weights from the other one\n",
"# To make the the whole program generic , we have assumed that there can be \n",
"# more than one activation function to experiment with, so every time we create an object \n",
"# of this class we specify the activation type"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "XQYNVhctUq6Y",
"colab_type": "code",
"colab": {}
},
"source": [
"class Layer:\n",
" \"\"\"\n",
" Represents a layer (hidden or output) in our neural network.\n",
" \"\"\"\n",
"\n",
" def __init__(self, n_input, n_neurons, activation=None, weights=None, bias=None):\n",
" \"\"\"\n",
" :param int n_input: The input size (coming from the input layer or a previous hidden layer)\n",
" :param int n_neurons: The number of neurons in this layer.\n",
" :param str activation: The activation function to use (if any).\n",
" :param weights: The layer's weights.\n",
" :param bias: The layer's bias.\n",
" \"\"\"\n",
" \n",
" # if bias and weights are not passed to the constructor set them randomly\n",
" self.weights = weights if weights is not None else np.random.rand(n_input, n_neurons)\n",
" self.activation = activation\n",
" self.bias = bias if bias is not None else np.random.rand(n_neurons)\n",
" self.last_activation = None # incase we need different activation functions in future\n",
" self.error = None\n",
" self.delta = None\n",
"\n",
" def activate(self, x):\n",
" \"\"\"\n",
" Calculates the dot product of this layer.\n",
" :param x: The input.\n",
" :return: The result.\n",
" \"\"\"\n",
"\n",
" r = np.dot(x, self.weights) + self.bias\n",
" self.last_activation = self._apply_activation(r)\n",
" return self.last_activation\n",
"\n",
" def _apply_activation(self, r):\n",
" \"\"\"\n",
" Applies the chosen activation function (if any).\n",
" :param r: The normal value.\n",
" :return: The \"activated\" value.\n",
" \"\"\"\n",
"\n",
" # sigmoid\n",
" if self.activation == 'sigmoid':\n",
" return 1 / (1 + np.exp(-r))\n",
"\n",
" return r\n",
"\n",
" def apply_activation_derivative(self, r):\n",
" \"\"\"\n",
" Applies the derivative of the activation function (if any).\n",
" :param r: The normal value.\n",
" :return: The \"derived\" value.\n",
" \"\"\"\n",
"\n",
" # We use 'r' directly here because its already activated, the only values that\n",
" # are used in this function are the last activations that were saved.\n",
"\n",
" if self.activation == 'sigmoid':\n",
" return r * (1 - r)\n",
"\n",
" return r\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "HPiR79nSUq6j",
"colab_type": "code",
"colab": {}
},
"source": [
"# Object Oriented implementation of the actual network.\n",
"# here the input to the network acts as the input layer\n",
"# every time we add a hidden layer( remember: the last hidden layer is actuall the output layer)\n",
"# by calling the add_layer() function\n",
"# The add_layer() calls' parameters should be in zig-zag format\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "EBySt0ebUq6t",
"colab_type": "code",
"colab": {}
},
"source": [
"class NeuralNetwork:\n",
" \"\"\"\n",
" Represents a neural network.\n",
" \"\"\"\n",
"\n",
" def __init__(self):\n",
" self._layers = []\n",
"\n",
" def add_layer(self, layer):\n",
" \"\"\"\n",
" Adds a layer to the neural network.\n",
" :param Layer layer: The layer to add.\n",
" \"\"\"\n",
"\n",
" self._layers.append(layer)\n",
"\n",
" def feed_forward(self, X):\n",
" \"\"\"\n",
" Feed forward the input through the layers.\n",
" :param X: The input values.\n",
" :return: The result.\n",
" \"\"\"\n",
"\n",
" for layer in self._layers:\n",
" X = layer.activate(X)\n",
"\n",
" return X\n",
"\n",
" def predict(self, X):\n",
" \"\"\"\n",
" Predicts a class (or classes).\n",
" :param X: The input values.\n",
" :return: The predictions.\n",
" \"\"\"\n",
"\n",
" ff = self.feed_forward(X)\n",
"\n",
" # If One row output, simply return the value\n",
" if ff.ndim == 1:\n",
" return np.argmax(ff)\n",
"\n",
" # If Multiple rows, return the index having maximum value \n",
" return np.argmax(ff, axis=1)\n",
"\n",
" def backpropagation(self, X, y, learning_rate):\n",
" \"\"\"\n",
" Performs the backward propagation algorithm and updates the layers weights.\n",
" :param X: The input values.\n",
" :param y: The target values.\n",
" :param float learning_rate: The learning rate (between 0 and 1).\n",
" \"\"\"\n",
"\n",
" # Feed forward for the output\n",
" output = self.feed_forward(X)\n",
"\n",
" # Loop over the layers backward\n",
" for i in reversed(range(len(self._layers))):\n",
" layer = self._layers[i]\n",
"\n",
" # If this is the output layer\n",
" if layer == self._layers[-1]:\n",
" layer.error = y - output\n",
" # The output = layer.last_activation in this case\n",
" layer.delta = layer.error * layer.apply_activation_derivative(output)\n",
" else:\n",
" next_layer = self._layers[i + 1]\n",
" layer.error = np.dot(next_layer.weights, next_layer.delta)\n",
" layer.delta = layer.error * layer.apply_activation_derivative(layer.last_activation)\n",
"\n",
" # Update the weights\n",
" for i in range(len(self._layers)):\n",
" layer = self._layers[i]\n",
" # The input is either the previous layers output or X itself (for the first hidden layer)\n",
" # the input shoul be atleast two\n",
" input_to_use = np.atleast_2d(X if i == 0 else self._layers[i - 1].last_activation)\n",
" layer.weights += layer.delta * input_to_use.T * learning_rate\n",
"\n",
" def train(self, X, y, learning_rate, max_epochs):\n",
" \"\"\"\n",
" Trains the neural network using backpropagation.\n",
" :param X: The input values.\n",
" :param y: The target values.\n",
" :param float learning_rate: The learning rate (between 0 and 1).\n",
" :param int max_epochs: The maximum number of epochs (cycles).\n",
" :return: The list of calculated MSE errors.\n",
" \"\"\"\n",
" # stores the MSE values in each iteration ( useful for ploting purpose)\n",
" mses = []\n",
"\n",
" for i in range(max_epochs):\n",
" for j in range(len(X)):\n",
" self.backpropagation(X[j], y[j], learning_rate)\n",
" if i % 1000 == 0:\n",
" mse = np.mean(np.square(y - self.feed_forward(X)))\n",
" mses.append(mse)\n",
" print('Epoch: #%s, MSE: %f' % (i, float(mse)))\n",
"\n",
" return mses\n",
" \n",
"# @staticmethod\n",
"# def accuracy(y_pred, y_true):\n",
"# \"\"\"\n",
"# Calculates the accuracy between the predicted labels and true labels.\n",
"# :param y_pred: The predicted labels.\n",
"# :param y_true: The true labels.\n",
"# :return: The calculated accuracy.\n",
"# \"\"\"\n",
"\n",
"# return (y_pred == y_true).mean()\n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "_NEqtQysUq60",
"colab_type": "code",
"colab": {}
},
"source": [
"# For this assignment we have to find the optimal learning rate for the whole model for which MSE becomes 0 ( let say)\n",
"# on earlier iteration\n",
"\n",
"# We are calling this function with learning rate = learning rate + 0.1"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"scrolled": false,
"id": "BfgzT3IrUq69",
"colab_type": "code",
"colab": {}
},
"source": [
"\n",
"def tune(lr):\n",
" nn = NeuralNetwork()\n",
" nn.add_layer(Layer(3, 5, 'sigmoid'))\n",
" nn.add_layer(Layer(5, 3, 'sigmoid'))\n",
" nn.add_layer(Layer(3, 2, 'sigmoid'))\n",
"\n",
" # Define dataset\n",
" X = np.array([[0, 0,0],[0,0,1], [0, 1,0], [0,1, 1], [1,0,0],[1, 1,1]])\n",
" y = np.array([[0], [0], [0],[0],[0],[1]])\n",
"\n",
" # Train the neural network\n",
" errors = nn.train(X, y,lr, 10000)\n",
"# print('Accuracy: %.2f%%' % (nn.accuracy(nn.predict(X), y.flatten()) * 100))\n",
"\n",
" # Plot changes in mse\n",
" plt.plot(errors)\n",
" plt.title('Changes in MSE')\n",
" plt.xlabel('Epoch (every 1000th)')\n",
" plt.ylabel('MSE')\n",
" plt.show()\n",
"\n",
"# print(nn.predict([[1,1,1], [1,1,1], [1,0,1]]))\n",
" \n",
" \n",
" \n"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "beKNZ4lJUq7F",
"colab_type": "code",
"colab": {}
},
"source": [
"# Calling the tune function with increasing lr value.\n",
"# we have to compare with plot carefully. for some iteration the output can be totally different \n",
"# especially for the higher lr values ( over fitting)\n",
"# for extremely lower lr values we may require a large number of max_iteration value.\n",
"# we are starting the tuning with initial lr value 0.2 and continue upto 0.9"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"scrolled": false,
"id": "kA--n98SUq7M",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "fec11459-a409-4500-e0f6-9ad034e68815"
},
"source": [
"\n",
"print(\"Training set : Bipolar AND\")\n",
"lr = 0.2\n",
"for i in range(2,10):\n",
" print()\n",
" print(\"Testing the network with learning rate \",lr)\n",
" tune(lr)\n",
" lr += 0.1\n",
" "
],
"execution_count": 37,
"outputs": [
{
"output_type": "stream",
"text": [
"Training set : Bipolar AND\n",
"\n",
"Testing the network with learning rate 0.2\n",
"Epoch: #0, MSE: 0.587965\n",
"Epoch: #1000, MSE: 0.135627\n",
"Epoch: #2000, MSE: 0.058733\n",
"Epoch: #3000, MSE: 0.002685\n",
"Epoch: #4000, MSE: 0.001196\n",
"Epoch: #5000, MSE: 0.000753\n",
"Epoch: #6000, MSE: 0.000546\n",
"Epoch: #7000, MSE: 0.000426\n",
"Epoch: #8000, MSE: 0.000349\n",
"Epoch: #9000, MSE: 0.000295\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"\n",
"Testing the network with learning rate 0.30000000000000004\n",
"Epoch: #0, MSE: 0.563273\n",
"Epoch: #1000, MSE: 0.138509\n",
"Epoch: #2000, MSE: 0.003410\n",
"Epoch: #3000, MSE: 0.000838\n",
"Epoch: #4000, MSE: 0.000459\n",
"Epoch: #5000, MSE: 0.000313\n",
"Epoch: #6000, MSE: 0.000236\n",
"Epoch: #7000, MSE: 0.000189\n",
"Epoch: #8000, MSE: 0.000158\n",
"Epoch: #9000, MSE: 0.000135\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nmVnO/Q/2mCxYYYMIxAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"\n",
"Testing the network with learning rate 0.4\n",
"Epoch: #0, MSE: 0.451128\n",
"Epoch: #1000, MSE: 0.020802\n",
"Epoch: #2000, MSE: 0.001178\n",
"Epoch: #3000, MSE: 0.000545\n",
"Epoch: #4000, MSE: 0.000348\n",
"Epoch: #5000, MSE: 0.000254\n",
"Epoch: #6000, MSE: 0.000199\n",
"Epoch: #7000, MSE: 0.000164\n",
"Epoch: #8000, MSE: 0.000139\n",
"Epoch: #9000, MSE: 0.000120\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"\n",
"Testing the network with learning rate 0.5\n",
"Epoch: #0, MSE: 0.506018\n",
"Epoch: #1000, MSE: 0.002822\n",
"Epoch: #2000, MSE: 0.000503\n",
"Epoch: #3000, MSE: 0.000258\n",
"Epoch: #4000, MSE: 0.000170\n",
"Epoch: #5000, MSE: 0.000125\n",
"Epoch: #6000, MSE: 0.000099\n",
"Epoch: #7000, MSE: 0.000081\n",
"Epoch: #8000, MSE: 0.000069\n",
"Epoch: #9000, MSE: 0.000060\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nrkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"\n",
"Testing the network with learning rate 0.6\n",
"Epoch: #0, MSE: 0.584105\n",
"Epoch: #1000, MSE: 0.127817\n",
"Epoch: #2000, MSE: 0.000915\n",
"Epoch: #3000, MSE: 0.000388\n",
"Epoch: #4000, MSE: 0.000243\n",
"Epoch: #5000, MSE: 0.000177\n",
"Epoch: #6000, MSE: 0.000139\n",
"Epoch: #7000, MSE: 0.000114\n",
"Epoch: #8000, MSE: 0.000096\n",
"Epoch: #9000, MSE: 0.000084\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"\n",
"Testing the network with learning rate 0.7\n",
"Epoch: #0, MSE: 0.531564\n",
"Epoch: #1000, MSE: 0.002051\n",
"Epoch: #2000, MSE: 0.000380\n",
"Epoch: #3000, MSE: 0.000201\n",
"Epoch: #4000, MSE: 0.000136\n",
"Epoch: #5000, MSE: 0.000102\n",
"Epoch: #6000, MSE: 0.000081\n",
"Epoch: #7000, MSE: 0.000067\n",
"Epoch: #8000, MSE: 0.000058\n",
"Epoch: #9000, MSE: 0.000050\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"\n",
"Testing the network with learning rate 0.7999999999999999\n",
"Epoch: #0, MSE: 0.282077\n",
"Epoch: #1000, MSE: 0.000853\n",
"Epoch: #2000, MSE: 0.000253\n",
"Epoch: #3000, MSE: 0.000144\n",
"Epoch: #4000, MSE: 0.000100\n",
"Epoch: #5000, MSE: 0.000076\n",
"Epoch: #6000, MSE: 0.000062\n",
"Epoch: #7000, MSE: 0.000052\n",
"Epoch: #8000, MSE: 0.000044\n",
"Epoch: #9000, MSE: 0.000039\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3de5hddX3v8fdnZnKfTRKSsAeTQALM\nHk29gB3xQmtbr9BW4jnVI1QqWs7hsUfshV4O1j6o9JwepRetLT0VldZLFRQvTTVKKWJvKk24aqAh\nIQSSCMkk4ZJ7MjPf88dak6xs9syeSWbN2pfP63n2M2uv9Vtrf2dD9mfW+v32bykiMDMzq9ZRdAFm\nZtaYHBBmZlaTA8LMzGpyQJiZWU0OCDMzq8kBYWZmNTkgrGVI+qCkzxddx4mS9PuSPlV0HWYjHBDW\nVCT9sqS1kvZKekLStyT9VNF1TYaI+KOI+O8nsq+kv5UUklZWrf9ouv6d6fPpkv5U0tb0Pdws6WOZ\n9pslHUi3jTz+8qR+MWtaDghrGpKuBj4G/BFQBs4A/gpYOdZ+beRh4B0jTyR1Af8NeCTT5n1AP3A+\nUAJ+Frin6jhviojuzOOqXKu2huWAsKYgaS5wHfCeiPhqROyLiCMR8Q8R8buZptMlfVbSHknrJPVn\njnGNpEfSbQ9K+i+Zbe+U9G+S/kTSU5IelXRRZvtySf+S7vtPkm7IXs6S9ApJ35P0tKT7Jf1s1bE3\npfs+Kunto/yORy+RSVqW/uV/uaTHJe2U9P46b9M/AD8laX76/ELgAeDJTJuXAV+LiB9HYnNEfLbO\nca1NOSCsWbwSmAl8rU67i4GbgXnAKiB7eeQR4KeBucCHgM9LOj2z/eXAemAhcD3waUlKt30B+A9g\nAfBB4FdGdpK0GPgm8L+BU4HfAb4iaZGkOcDHgYsiogS8CrhvAr/3TwF9wGuBayW9YIy2B4G/By5J\nn78DqP7w/wFwtaT/KelFmd/P7DkcENYsFgA7I2KwTrt/i4jVETEEfA54yciGiPhy+pfzcETcAmwg\nudQy4rGI+GS672eA04GypDNI/vK+NiIOR8S/kYTPiMuA1enrDkfE7cBa4OfT7cPACyXNiognImLd\nBH7vD0XEgYi4H7g/+/uM4rPAOyTNA34G+HrV9v8LfAR4e1rjNkmXV7X5enomNPL4HxOo11qIA8Ka\nxS5gYXpdfSzZyyn7gZkj+0h6h6T7Rj74gBeSnC08Z9+I2J8udgPPA3Zn1gFsySyfCbw1+6FK8pf/\n6RGxD3gb8G7gCUnflPT88f7SNX6f7rEap+G1CHg/8I2IOFC1fSgiboiIC0jOsv4PcFPVmcmbI2Je\n5vHJCdRrLcQBYc3i+8Ah4M0nsrOkM4FPAlcBCyJiHvAjYDyXWJ4ATpU0O7NuaWZ5C/C5qg/VORHx\nYYCIuC0iXk9yRvKfaR15+jzw2zz38tJx0jOTG4CngBU512RNyAFhTSEingGuBW6Q9GZJsyVNk3SR\npOvHcYg5QAADAJLeRXIGMZ7XfozkcswH02GirwTelGnyeeBNkt4oqVPSTEk/K2mJpLKklWlfxCFg\nL8klpzx9HHg98C/VGyT9ZlrbLEld6eWlEnBvzjVZE3JAWNOIiD8Frgb+gOSDfgvJGUH1dfZa+z4I\n/CnJmch24EXAv0/g5d9O0lG+i6Qz+haSD3wiYgvJUNvfz9T1uyT/vjrSmn8M7CbpF/i1CbzuhEXE\n7oi4I2rf7GU/yfvwJLATeA/wSxGxKdPmH6q+B1FvYIC1KPmGQWYTJ+kW4D8j4gNF12KWF59BmI2D\npJdJOltSh6QLSc4Y6p65mDWzeiNCzCzRA3yVZLjtVuDXIsLX7a2l+RKTmZnV5EtMZmZWU8tcYlq4\ncGEsW7as6DLMzJrK3XffvTMiFtXa1jIBsWzZMtauXVt0GWZmTUXSY6Nt8yUmMzOryQFhZmY1OSDM\nzKwmB4SZmdXkgDAzs5ocEGZmVpMDwszMamr7gHhm/xE+fscGHtj6dNGlmJk1lJb5otyJ6uiAP7v9\nYTo7xIuXzCu6HDOzhtH2ZxClmdN43tyZPLx9T9GlmJk1lLYPCIBKT4n1TzogzMyyHBBAX7nEpoF9\nDA7lfatgM7Pm4YAAKuUSh4eG2bxrf9GlmJk1DAcE0NdTAnA/hJlZhgMCOOe0biTcD2FmluGAAGZO\n62TZgjk+gzAzy3BApCrlbtY7IMzMjnJApPrKJTbv3MfBI0NFl2Jm1hAcEKlKT4nhgEcG9hZdiplZ\nQ3BApPrKHslkZpblgEgtWziHaZ1i/ZM+gzAzAwfEUdM6Ozh7UbfPIMzMUg6IjN6y52QyMxvhgMjo\nK3ez7ekD7Dl4pOhSzMwK54DIqKQd1Rt2uB/CzMwBkXF0TiZfZjIzc0BkLZ0/m5nTOnh4u88gzMwc\nEBkdHaJSLnkkk5kZOQeEpAslrZe0UdI1NbZfLelBSQ9IukPSmZltQ5LuSx+r8qwzq1IueU4mMzNy\nDAhJncANwEXACuBSSSuqmt0L9EfEi4Fbgesz2w5ExLnp4+K86qzWVy4xsOcQu/cdnqqXNDNrSHme\nQZwPbIyITRFxGLgZWJltEBF3RsTIbdx+ACzJsZ5xqfjmQWZmQL4BsRjYknm+NV03miuAb2Wez5S0\nVtIPJL251g6SrkzbrB0YGDj5ivGcTGZmI7qKLgBA0mVAP/AzmdVnRsQ2SWcB35H0w4h4JLtfRNwI\n3AjQ398fk1FL+ZQZnDKzy9+oNrO2l+cZxDZgaeb5knTdcSS9Dng/cHFEHBpZHxHb0p+bgO8C5+VY\na7Ye+no8ksnMLM+AWAP0SlouaTpwCXDcaCRJ5wGfIAmHHZn18yXNSJcXAhcAD+ZY63Eq6ZxMEZNy\nUmJm1pRyC4iIGASuAm4DHgK+FBHrJF0naWRU0h8D3cCXq4azvgBYK+l+4E7gwxExZQHR11Pi2YOD\nbH/2UP3GZmYtKtc+iIhYDayuWndtZvl1o+z3PeBFedY2lt7Tko7q9dv30DN3ZlFlmJkVyt+krqFS\n7gY8J5OZtTcHRA0LumewsHuGv1FtZm3NATGKvp5uNjggzKyNOSBGkUzat5fhYY9kMrP25IAYRV+5\nxIEjQ2x96kDRpZiZFcIBMYqROZncD2Fm7coBMYre09KRTA4IM2tTDohRlGZOY/G8WZ6TyczalgNi\nDJ6TyczamQNiDJVyiUcG9nJkaLjoUszMppwDYgx9Pd0cGQo279xXdClmZlPOATGGStkjmcysfTkg\nxnD2om465DmZzKw9OSDGMHNaJ8sWzPEZhJm1JQdEHSNTbpiZtRsHRB2VnhKP7drHwSNDRZdiZjal\nHBB19JVLDAds3OGzCDNrLw6IOvp6POWGmbUnB0QdZy6Yw/TODndUm1nbcUDUMa2zg7MWzfFQVzNr\nOw6IcUjmZHIfhJm1FwfEOFTKJbY9fYA9B48UXYqZ2ZRxQIxDXzrlhs8izKydOCDGoa9nJCDcD2Fm\n7cMBMQ6L581i9vRO3zzIzNqKA2IcOjpE72ndPoMws7aSa0BIulDSekkbJV1TY/vVkh6U9ICkOySd\nmdl2uaQN6ePyPOscj2ROJgeEmbWP3AJCUidwA3ARsAK4VNKKqmb3Av0R8WLgVuD6dN9TgQ8ALwfO\nBz4gaX5etY5HX0+JnXsPs3PvoSLLMDObMnmeQZwPbIyITRFxGLgZWJltEBF3RsT+9OkPgCXp8huB\n2yNid0Q8BdwOXJhjrXVVyu6oNrP2kmdALAa2ZJ5vTdeN5grgWxPZV9KVktZKWjswMHCS5Y5tZCTT\nBg91NbM20RCd1JIuA/qBP57IfhFxY0T0R0T/okWL8ikudVppBnNnTfOcTGbWNvIMiG3A0szzJem6\n40h6HfB+4OKIODSRfaeSJPrKJc/JZGZtI8+AWAP0SlouaTpwCbAq20DSecAnSMJhR2bTbcAbJM1P\nO6ffkK4rVKWnm/Xb9xARRZdiZpa73AIiIgaBq0g+2B8CvhQR6yRdJ+nitNkfA93AlyXdJ2lVuu9u\n4A9JQmYNcF26rlB95RJ7Dg7y5LMHiy7FzCx3XXkePCJWA6ur1l2bWX7dGPveBNyUX3UTNzKSaf2T\nezh97qyCqzEzy1dDdFI3Cw91NbN24oCYgPlzpnNaaQbrn/RQVzNrfQ6ICUpuHuQzCDNrfQ6ICeo9\nrcSGHXsYGvZIJjNrbQ6ICerr6ebgkWG27N5fv7GZWRNzQEzQ0ZFMvsxkZi3OATFBvSMjmfyNajNr\ncQ6ICeqe0cWS+bN4eIdHMplZa3NAnADPyWRm7cABcQIqPSUeGdjL4cHhoksxM8uNA+IE9JVLDA4H\nm3ftK7oUM7PcOCBOQHZOJjOzVuWAOAFnLZpDZ4f8jWoza2kOiBMwc1onyxbM9hmEmbU0B8QJ8pxM\nZtbqHBAnqFIu8dju/Rw4PFR0KWZmuXBAnKC+cokI2OgvzJlZi3JAnKBez8lkZi3OAXGCli2YzfTO\nDvdDmFnLckCcoK7ODs4+rdsjmcysZTkgTkJfuZsNPoMwsxblgDgJlZ4SP37mIM8ePFJ0KWZmk84B\ncRL60o5qn0WYWStyQJyEY3MyeairmbUeB8RJWDxvFnOmd3okk5m1JAfESejoEL3lkkcymVlLyjUg\nJF0oab2kjZKuqbH91ZLukTQo6S1V24Yk3Zc+VuVZ58noK3tOJjNrTWMGhKTLMssXVG27qs6+ncAN\nwEXACuBSSSuqmj0OvBP4Qo1DHIiIc9PHxWO9VpEqPSV27TvMzr2Hii7FzGxS1TuDuDqz/BdV2361\nzr7nAxsjYlNEHAZuBlZmG0TE5oh4AGjae3eOjGTyParNrNXUCwiNslzrebXFwJbM863puvGaKWmt\npB9IenPN4qQr0zZrBwYGJnDoyVPp6QY8J5OZtZ56ARGjLNd6PtnOjIh+4JeBj0k6u7pBRNwYEf0R\n0b9o0aKcy6ltUfcM5s2e5n4IM2s5XXW2P1/SAyRnC2eny6TPz6qz7zZgaeb5knTduETEtvTnJknf\nBc4DHhnv/lNFEhWPZDKzFlQvIF5wEsdeA/RKWk4SDJeQnA3UJWk+sD8iDklaCFwAXH8SteSqr1zi\na/duIyKQ6l15MzNrDmNeYoqIx7IPYC/wUmBh+nysfQeBq4DbgIeAL0XEOknXSboYQNLLJG0F3gp8\nQtK6dPcXAGsl3Q/cCXw4Ih48id8zV5WeEnsPDfLjZw4WXYqZ2aQZ8wxC0jeAayLiR5JOB+4B1pJc\nbroxIj421v4RsRpYXbXu2szyGpJLT9X7fQ940bh/i4IdHcm0fQ+L580quBozs8lRr5N6eUT8KF1+\nF3B7RLwJeDn1h7m2jUo5Gcnkoa5m1krqBUR2HuvXkp4NRMQemvi7C5Nt3uzplE+Z4aGuZtZS6nVS\nb5H0XpLvMLwU+DaApFnAtJxrayoVT7lhZi2m3hnEFcBPkEyH8baIeDpd/wrgb3Ksq+n0lUts2L6X\noeG8vx5iZjY1xjyDiIgdwLtrrL+TZHSRpSo9JQ4NDvP47v0sXzin6HLMzE5avVFMY86i2siT6E21\nvqM3D9rjgDCzllCvD+KVJPMpfRG4i/rzL7Wt3pGRTNv3cOELewquxszs5NULiB7g9cClJN+C/ibw\nxYhYN+ZebWj29C7OOHW2RzKZWcuo903qoYj4dkRcTtIxvRH4br17QbSrSrnb34Uws5ZR7wwCSTOA\nXyA5i1gGfBz4Wr5lNadKucR31w9waHCIGV2dRZdjZnZS6nVSfxZ4IckX5D6U+Va11dDXU2JwOHh0\n5z6e33NK0eWYmZ2Uet+DuAzoBX4D+J6kZ9PHHknP5l9ec6lkRjKZmTW7et+DqBcglnHWojl0dogN\n2/cWXYqZ2UlzAEyiGV2dLF84xyOZzKwlOCAmWZ/nZDKzFuGAmGSVconHd+9n/+HBoksxMzspDohJ\n1tfTTQRs3OF+CDNrbg6ISeaRTGbWKhwQk+zMBXOY3tXhfggza3oOiEnW2SF6T+tmvYe6mlmTc0Dk\noK9c8pxMZtb0HBA56C2XePLZgzyz/0j9xmZmDcoBkYO+nvTeEDt8FmFmzcsBkQOPZDKzVuCAyMHi\nebOYM73TI5nMrKk5IHIgiUqPp9wws+aWa0BIulDSekkbJV1TY/urJd0jaVDSW6q2XS5pQ/q4PM86\n89BXLrH+yT1ERNGlmJmdkNwCQlIncANwEbACuFTSiqpmjwPvBL5Qte+pwAeAlwPnAx+QND+vWvNQ\nKZd4av8Rdu49XHQpZmYnJM8ziPOBjRGxKSIOAzcDK7MNImJzRDwADFft+0bg9ojYHRFPAbcDF+ZY\n66Tr60k6qn2ZycyaVZ4BsRjYknm+NV03aftKulLSWklrBwYGTrjQPHgkk5k1u6bupI6IGyOiPyL6\nFy1aVHQ5x1nYPZ1T50z3GYSZNa08A2IbsDTzfEm6Lu99G4IkKuVu313OzJpWngGxBuiVtFzSdOAS\nYNU4970NeIOk+Wnn9BvSdU1lZE4mj2Qys2aUW0BExCBwFckH+0PAlyJinaTrJF0MIOllkrYCbwU+\nIWlduu9u4A9JQmYNcF26rqlUekrsOzzEtqcPFF2KmdmEdeV58IhYDayuWndtZnkNyeWjWvveBNyU\nZ3156ysfG8m0ZP7sgqsxM5uYpu6kbnS9R0cy+d4QZtZ8HBA5mjtrGj2nzPRIJjNrSg6InFV6Sv4u\nhJk1JQdEzvrK3Wwc2MvQsEcymVlzcUDkrFIucXhwmMd27Su6FDOzCXFA5MxzMplZs3JA5Oyc07qR\nPJLJzJqPAyJns6d3ccaps30GYWZNxwExBSrlkudkMrOm44CYAn3lEo/u3MehwaGiSzEzGzcHxBSo\n9JQYGg42DXgkk5k1DwfEFMjOyWRm1iwcEFNg+cI5dHXI36g2s6bigJgC07s6WL5wjs8gzKypOCCm\nSKXHI5nMrLk4IKZIX7nElt0H2HdosOhSzMzGxQExRSppR/WGHf5GtZk1BwfEFPGcTGbWbBwQU+SM\nU2czo6uDhz2SycyahANiinR2iN5ytzuqzaxpOCCmUKVc8iUmM2saDogp1Fcusf3ZQzy9/3DRpZiZ\n1eWAmEKVox3VHslkZo3PATGFRuZkcj+EmTUDB8QUOn3uTEozujySycyaggNiCknylBtm1jRyDQhJ\nF0paL2mjpGtqbJ8h6ZZ0+12SlqXrl0k6IOm+9PHXedY5lSrlbh7evoeIKLoUM7Mx5RYQkjqBG4CL\ngBXApZJWVDW7AngqIs4BPgp8JLPtkYg4N328O686p1qlXOLp/UcY2HOo6FLMzMaU5xnE+cDGiNgU\nEYeBm4GVVW1WAp9Jl28FXitJOdZUOHdUm1mzyDMgFgNbMs+3putqtomIQeAZYEG6bbmkeyX9s6Sf\nrvUCkq6UtFbS2oGBgcmtPicjQ1198yAza3SN2kn9BHBGRJwHXA18QdIp1Y0i4saI6I+I/kWLFk15\nkSdiYfcMFsyZzgZ/F8LMGlyeAbENWJp5viRdV7ONpC5gLrArIg5FxC6AiLgbeASo5FjrlKqUPZLJ\nzBpfngGxBuiVtFzSdOASYFVVm1XA5enyW4DvRERIWpR2ciPpLKAX2JRjrVOqr6fEhu17GB72SCYz\na1xdeR04IgYlXQXcBnQCN0XEOknXAWsjYhXwaeBzkjYCu0lCBODVwHWSjgDDwLsjYndetU61SrnE\nvsNDbHv6AEtPnV10OWZmNeUWEAARsRpYXbXu2szyQeCtNfb7CvCVPGsrUl9PN5DcPMgBYWaNqlE7\nqVtar4e6mlkTcEAU4JSZ03je3Jmek8nMGpoDoiDJnEwe6mpmjcsBUZC+colHduxlcGi46FLMzGpy\nQBSkt1zi8NAwm3ftL7oUM7OaHBAFGZmTyfeoNrNG5YAoyDmndSN5TiYza1wOiILMmt7JmafO9hmE\nmTUsB0SBPCeTmTUyB0SB+npKPLZrPwePDBVdipnZczggClQplxgaDjYN7Cu6FDOz53BAFKivxyOZ\nzKxxOSAKtGzBHKZ1yv0QZtaQHBAFmt7VwVkLuz0nk5k1JAdEwZI5mRwQZtZ4HBAF6yt3s/WpA+w9\nNFh0KWZmx3FAFKySTrmxwWcRZtZgHBAFq3hOJjNrUA6Igi09dTYzp3Ww/knfG8LMGosDomCdHaL3\ntJLPIMys4TggGoDnZDKzRuSAaAB9Pd0M7DnEU/sOF12KmdlRDogG4I5qM2tEDogG4DmZzKwROSAa\nQM8pMynN7HI/hJk1FAdEA5BEX7nEwx7qamYNJNeAkHShpPWSNkq6psb2GZJuSbffJWlZZtv70vXr\nJb0xzzobwcicTBFRdClmZgB05XVgSZ3ADcDrga3AGkmrIuLBTLMrgKci4hxJlwAfAd4maQVwCfAT\nwPOAf5JUiYiWvfVaX7nEFw48zk3/vpnSjC46OkRnB3RIdHaIzpGfHUq2ZZ53dqhmu+P27zi2/ej+\nncfadxz9mZzRmJnlFhDA+cDGiNgEIOlmYCWQDYiVwAfT5VuBv1Ty6bQSuDkiDgGPStqYHu/7OdZb\nqJeeMR8J/vAbD9ZvnLORkBiJiZG8OLpG1Nx2bHlk27FjZHY9GkBjtVf1js9ZX2vrc7cfV/e4jzHx\ngKy3y3gOWV3niRyj/mtMwjEmoZBJ+ROkhd6Pk/WC00/hLy49b9KPm2dALAa2ZJ5vBV4+WpuIGJT0\nDLAgXf+Dqn0XV7+ApCuBKwHOOOOMSSu8CC9aMpf7rn0DBw4PMRTB0FAkP4eD4fTn0UcEw5nlkfVJ\nO8bZrtbxOLocJJe6Rq54jVz4iuDotuyPkUtjcdy6keXjt5FtX+O41a9Jpk3Vmjrbn7su6uxT/zVr\nvMZz9npOg3Eco872Sbj0OBkXLyfjCujk1NEY78fkHOTkLZ0/K5fj5hkQuYuIG4EbAfr7+xvkP9WJ\nmztrGnNnTSu6DDMzIN9O6m3A0szzJem6mm0kdQFzgV3j3NfMzHKUZ0CsAXolLZc0naTTeVVVm1XA\n5enyW4DvRHLuuAq4JB3ltBzoBf4jx1rNzKxKbpeY0j6Fq4DbgE7gpohYJ+k6YG1ErAI+DXwu7YTe\nTRIipO2+RNKhPQi8p5VHMJmZNSK1yrj7/v7+WLt2bdFlmJk1FUl3R0R/rW3+JrWZmdXkgDAzs5oc\nEGZmVpMDwszMamqZTmpJA8BjJ3GIhcDOSSqn2fm9OJ7fj+P5/TimFd6LMyNiUa0NLRMQJ0vS2tF6\n8tuN34vj+f04nt+PY1r9vfAlJjMzq8kBYWZmNTkgjrmx6AIaiN+L4/n9OJ7fj2Na+r1wH4SZmdXk\nMwgzM6vJAWFmZjW1fUBIulDSekkbJV1TdD1FkrRU0p2SHpS0TtJvFF1T0SR1SrpX0jeKrqVokuZJ\nulXSf0p6SNIri66pSJJ+K/138iNJX5Q0s+iaJltbB4SkTuAG4CJgBXCppBXFVlWoQeC3I2IF8Arg\nPW3+fgD8BvBQ0UU0iD8Hvh0RzwdeQhu/L5IWA78O9EfEC0luaXBJsVVNvrYOCOB8YGNEbIqIw8DN\nwMqCaypMRDwREfeky3tIPgCecy/wdiFpCfALwKeKrqVokuYCrya5hwsRcTgini62qsJ1AbPSu2HO\nBn5ccD2Trt0DYjGwJfN8K238gZglaRlwHnBXsZUU6mPA7wHDRRfSAJYDA8DfpJfcPiVpTtFFFSUi\ntgF/AjwOPAE8ExH/WGxVk6/dA8JqkNQNfAX4zYh4tuh6iiDpF4EdEXF30bU0iC7gpcD/i4jzgH1A\n2/bZSZpPcrVhOfA8YI6ky4qtavK1e0BsA5Zmni9J17UtSdNIwuHvIuKrRddToAuAiyVtJrn0+BpJ\nny+2pEJtBbZGxMgZ5a0kgdGuXgc8GhEDEXEE+CrwqoJrmnTtHhBrgF5JyyVNJ+lkWlVwTYWRJJJr\nzA9FxJ8VXU+RIuJ9EbEkIpaR/H/xnYhoub8QxysingS2SOpLV72W5J7x7epx4BWSZqf/bl5LC3ba\ndxVdQJEiYlDSVcBtJKMQboqIdQWXVaQLgF8BfijpvnTd70fE6gJrssbxXuDv0j+mNgHvKriewkTE\nXZJuBe4hGf13Ly047Yan2jAzs5ra/RKTmZmNwgFhZmY1OSDMzKwmB4SZmdXkgDAzs5ocENZwJA1J\nui/zmLRv7EpaJulH42z7m5LeMVmvfaIkPV/S9yUdkvQ7VdtqzkacfrfnrnT9LenQVCTNSJ9vTLcv\nS9efK+nnM/t/sPq10vXTJf1LOv+QtTgHhDWiAxFxbubx4akuIP0A/FXgCzm/xnjsJpk59E+q9h9r\nNuKPAB+NiHOAp4Ar0vVXAE+l6z+atgM4FzgaEKNJJ7W8A3jbOGu3JuaAsKYhabOk6yX9UNJ/SDon\nXb9M0nckPSDpDklnpOvLkr4m6f70MTIVQqekT6Zz+f+jpFk1Xu41wD0RMZge62xJ35Z0t6R/Tf+q\nnyvpMUkdaZs5krZImlarfdrmbyX9taS7gOslbZC0KN3Wkf5lvyhbSETsiIg1wJGqGmvORpx+s/c1\nJNNhAHwGeHO6vDJ9Trr9tZJmANcBb0vP2EY+/FdI+q6kTZJ+PfO6XwfePvZ/LWsFDghrRLOqLjFl\n/1p9JiJeBPwlyWyrAH8BfCYiXgz8HfDxdP3HgX+OiJeQzBs08i35XuCGiPgJ4Gngl2rUcAGQnajv\nRuC9EfGTwO8AfxURzwD3AT+TtvlF4LZ0bp7ntM8cawnwqoi4Gvg8xz5sXwfcHxED43iPYPTZiBcA\nT4+EG8fPUnx0n3T7M0AJuBa4JT1juyVt+3zgjSRB9IF0ni6AHwEvG2eN1sR8HdEa0YGIOHeUbV/M\n/PxouvxK4L+my58Drk+XXwO8AyAihoBn0lk4H42IkalE7gaW1Xid00nn1klnt30V8OXkj3MAZqQ/\nbyG53HInyZxNf1WnPcCX03oAbgL+niTsfhX4m1F+7yJ8MyIOAYck7QDKJBP2DUk6LKmU3jfEWpQD\nwppNjLI8EYcyy0NArUtMB4CRW0h2kPxFXiu0VgF/JOlU4CeB7wBzxmgPyVTZAETEFknbJb2G5C/1\niVy6GW024l3APEld6VlCdpbikX22pn0gc9P2tVS/T9nPixnAwQnUak3Il5is2bwt8/P76fL3OHa7\nx7cD/5ou3wH8Ghy9t/TcCZDuaq0AAAFVSURBVLzOQ8A5AOk9MR6V9Nb0WJL0knTbXpJZgf8c+EZE\nDI3VfhSfIrnUlD2zGI+asxFHMsHancBb0naXk5ylQBJol6fLbyGZpTaAPSSXmuqStADYmV5Ksxbm\ngLBGVN0HkR3FNF/SAyT3iv6tdN17gXel638l3Ub68+ck/ZDkUtJE7q/9LZJbbI54O3CFpPtJ+jKy\nt6a9Bbgs/Tme9tVWAd2McnlJUo+krcDVwB9I2irplPTsYGQ24oeAL2VmI/5fwNWSNpL0SXw6Xf9p\nYEG6/mqO3fTnTpJO6eo+n1p+DvhmnTbWAjybqzUNJTfv6Y+InVP0el8Dfi8iNuT8Ov0kQ1J/Os/X\nmSySvgpcExEPF12L5ctnEGaju4akszo3Sr7c9hXgfXm+zmRJL2V93eHQHnwGYWZmNfkMwszManJA\nmJlZTQ4IMzOryQFhZmY1OSDMzKym/w+sCCkZMTvRGAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "stream",
"text": [
"\n",
"Testing the network with learning rate 0.8999999999999999\n",
"Epoch: #0, MSE: 0.542786\n",
"Epoch: #1000, MSE: 0.026983\n",
"Epoch: #2000, MSE: 0.025789\n",
"Epoch: #3000, MSE: 0.025503\n",
"Epoch: #4000, MSE: 0.025381\n",
"Epoch: #5000, MSE: 0.025315\n",
"Epoch: #6000, MSE: 0.025276\n",
"Epoch: #7000, MSE: 0.025249\n",
"Epoch: #8000, MSE: 0.025231\n",
"Epoch: #9000, MSE: 0.025217\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "fL6CiAluUq7Z",
"colab_type": "code",
"colab": {}
},
"source": [
"# From the obove output it is clear that from 0.5 - 0.9 the model converge faster than the lower lr values."
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "aA6Zn4XqUq7h",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "6f01fe45-b0f9-4696-d682-95af5f5e0a9e"
},
"source": [
"# perceptron\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"class Perceptron(object):\n",
" \"\"\"\n",
" This class defines a single layer perceptron with 3 inputs ;\n",
" initial weights will be set to 0;\n",
" one extra bias w[0] will be added;\n",
" Params\n",
" ------\n",
" eta : float\n",
" the learning rate to the model ( between 0 to 1)\n",
" max_iter : int\n",
" maximum number of iterration allowed for the prediction . default values is set to 50\n",
" Attributes:\n",
" ---------\n",
" weights : array\n",
" stores the weights to the percpetron\n",
" len(weoights) willl be 1 extra to the len(inputs)\n",
"\n",
" errors_ : array\n",
" stores the error in each epoch for simple ploting purpose\n",
" \"\"\"\n",
" def __init__(self,eta=0.1,max_iter = 50):\n",
" self.eta = eta\n",
" self.max_iter = max_iter\n",
"\n",
" def net_input(self,x):\n",
" \"\"\"\n",
" cal culate the net input\n",
" :return:\n",
" \"\"\"\n",
" return np.dot(x,self.weights[1:]) + self.weights[0]\n",
"\n",
" def predict(self,x):\n",
" # return np.where(self.net_input(x) >= 0.0 ,1 ,0)\n",
" # if traing set contains 0 the use this\n",
" # if traing set contain -1 instead of 0 use the below\n",
" return np.where(self.net_input(x) >= 0.0, 1, -1)\n",
" def fit(self,X,Y):\n",
" \"\"\"\n",
" :param X:\n",
" the input training set to the model\n",
" :param Y:\n",
" input output training set to the model\n",
" :return: self(object)\n",
" \"\"\"\n",
" # self.weights = np.array([0.001,0.5,0.9,0.3])\n",
" self.weights = np.zeros(1+ X.shape[1]) # initialze weights to 0 including the bias\n",
" self.errors_ = []\n",
" for iter in range(self.max_iter):\n",
" print(\"----------------------------------------------------\")\n",
" print(\" In iter no.:-> \",iter)\n",
" print()\n",
" errors = 0\n",
" for x_i,target in zip(X,Y):\n",
" predicted = self.predict(x_i)\n",
" update = self.eta * (target- predicted)\n",
" print(\"Target:->\",target,\" Predicted:->\",predicted,\" Update:->\",update)\n",
" self.weights[1:] += update * x_i\n",
" self.weights[0] += update\n",
" if update !=0.0:\n",
" errors += update\n",
"\n",
" print(\"Total error:->\",errors)\n",
" self.errors_.append(errors)\n",
"\n",
" print(\"Weights:->\", self.weights)\n",
" if errors == 0.0 :break\n",
" # plt.plot(self.errors_,c='r')\n",
" # plt.ylabel(\"Error in each epoch\")\n",
" # plt.xlabel(\"Epoch no.\")\n",
" # plt.show()\n",
"train_x = np.array([\n",
" [-1, -1, -1],\n",
" [-1, -1, 1],\n",
" [-1, 1, -1],\n",
" [-1, 1, 1],\n",
" [1, -1, -1],\n",
" [1, -1, 1],\n",
" [1, 1, -1],\n",
" [1, 1, 1]\n",
"])\n",
"And_Y = np.array([-1, -1, -1, -1, -1, -1, -1, 1])\n",
"OR_Y = np.array([-1, 1, 1, 1, 1, 1, 1, 1])\n",
"NAND_Y = np.array([1, 1, 1, 1, 1, 1, 1, -1])\n",
"NOR_y = np.array([1, -1, -1, -1, -1, -1, -1, -1])\n",
"\n",
"AND = Perceptron(0.3, 100)\n",
"NAND = Perceptron(0.3, 100)\n",
"OR = Perceptron(0.3, 100)\n",
"NOR = Perceptron(0.3, 100)\n",
"print(\"\\n############# LOGIC GATE : AND ####################\\n\")\n",
"AND.fit(train_x, And_Y)\n",
"print(\"\\n################# LOGIC GATE : NAND #####################\\n\")\n",
"NAND.fit(train_x,NAND_Y)\n",
"print(\"\\n################## LOGIC GATE : OR ########################\\n\")\n",
"OR.fit(train_x,OR_Y)\n",
"print(\"\\n################## LOGIC GATE : NOR ########################\\n\")\n",
"NOR.fit(train_x,NOR_y)\n",
"\n",
"\n",
"\n"
],
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"text": [
"\n",
"############# LOGIC GATE : AND ####################\n",
"\n",
"----------------------------------------------------\n",
" In iter no.:-> 0\n",
"\n",
"Target:-> -1 Predicted:-> 1 Update:-> -0.6\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> 1 Update:-> -0.6\n",
"Target:-> -1 Predicted:-> 1 Update:-> -0.6\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Total error:-> -1.7999999999999998\n",
"Weights:-> [-1.8 0.6 0.6 0.6]\n",
"----------------------------------------------------\n",
" In iter no.:-> 1\n",
"\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Total error:-> 0\n",
"Weights:-> [-1.8 0.6 0.6 0.6]\n",
"\n",
"################# LOGIC GATE : NAND #####################\n",
"\n",
"----------------------------------------------------\n",
" In iter no.:-> 0\n",
"\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> 1 Update:-> -0.6\n",
"Total error:-> -0.6\n",
"Weights:-> [-0.6 -0.6 -0.6 -0.6]\n",
"----------------------------------------------------\n",
" In iter no.:-> 1\n",
"\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> -1 Update:-> 0.6\n",
"Target:-> 1 Predicted:-> -1 Update:-> 0.6\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Total error:-> 1.2\n",
"Weights:-> [ 0.6 -0.6 -0.6 -0.6]\n",
"----------------------------------------------------\n",
" In iter no.:-> 2\n",
"\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Total error:-> 0\n",
"Weights:-> [ 0.6 -0.6 -0.6 -0.6]\n",
"\n",
"################## LOGIC GATE : OR ########################\n",
"\n",
"----------------------------------------------------\n",
" In iter no.:-> 0\n",
"\n",
"Target:-> -1 Predicted:-> 1 Update:-> -0.6\n",
"Target:-> 1 Predicted:-> -1 Update:-> 0.6\n",
"Target:-> 1 Predicted:-> -1 Update:-> 0.6\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> -1 Update:-> 0.6\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Total error:-> 1.2\n",
"Weights:-> [1.2 0. 0. 0. ]\n",
"----------------------------------------------------\n",
" In iter no.:-> 1\n",
"\n",
"Target:-> -1 Predicted:-> 1 Update:-> -0.6\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Total error:-> -0.6\n",
"Weights:-> [0.6 0.6 0.6 0.6]\n",
"----------------------------------------------------\n",
" In iter no.:-> 2\n",
"\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Total error:-> 0\n",
"Weights:-> [0.6 0.6 0.6 0.6]\n",
"\n",
"################## LOGIC GATE : NOR ########################\n",
"\n",
"----------------------------------------------------\n",
" In iter no.:-> 0\n",
"\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> 1 Update:-> -0.6\n",
"Target:-> -1 Predicted:-> 1 Update:-> -0.6\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> 1 Update:-> -0.6\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> 1 Update:-> -0.6\n",
"Total error:-> -2.4\n",
"Weights:-> [-2.4 0. 0. 0. ]\n",
"----------------------------------------------------\n",
" In iter no.:-> 1\n",
"\n",
"Target:-> 1 Predicted:-> -1 Update:-> 0.6\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Total error:-> 0.6\n",
"Weights:-> [-1.8 -0.6 -0.6 -0.6]\n",
"----------------------------------------------------\n",
" In iter no.:-> 2\n",
"\n",
"Target:-> 1 Predicted:-> 1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Target:-> -1 Predicted:-> -1 Update:-> 0.0\n",
"Total error:-> 0\n",
"Weights:-> [-1.8 -0.6 -0.6 -0.6]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "yi29rzF5aUtf",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 884
},
"outputId": "0d91c802-16e8-4389-b9fe-910cd8ed84f4"
},
"source": [
"\n",
"# GA based weight\n",
"import random\n",
"\n",
"#consider a 2-2-2(l-m-n) neural network\n",
"l=2\n",
"m=2\n",
"n=2\n",
"\n",
"#no of digit for each weight is 'd'(let)\n",
"d=5\n",
"\n",
"#no of genes (l+n)*m\n",
"#calculate length of the string\n",
"s=int(((l+n)*m)*d)\n",
"print(\"length of the generared chromosome is\",s)\n",
"#generate chromosome\n",
"chromosome=[]\n",
"for i in range (0,s):\n",
" val=random.randint(1,9)\n",
" chromosome.append(val)\n",
"print(chromosome)\n",
"\n",
"genes=[]\n",
"gene=[]\n",
"for i in range(0,s,d):\n",
" gene=chromosome[i:i+5]\n",
" genes.append(gene)\n",
"\n",
"print(\"genes in chromosome\")\n",
"for gene in genes:\n",
" print(gene)\n",
"\n",
"#function for calculate weight for each gene \n",
"def cal_weight(gene):\n",
" p=len(gene)-1\n",
" w=0.0\n",
" for i in range(1,len(gene)):\n",
" w+=gene[i]*pow(10,p-i)\n",
" print(w)\n",
" w=w/pow(10,p-1)\n",
" return(w)\n",
" \n",
" \n",
"for gene in genes:\n",
" if( 0<=gene[0]<5 ):\n",
" weight=-cal_weight(gene)\n",
" print(\"weigh of gene\",weight)\n",
" \n",
" elif( 5<=gene[0]<=9 ):\n",
" weight=+cal_weight(gene)\n",
" print(\"weigh of gene\",weight)\n",
" \n",
" \n",
" \n"
],
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"text": [
"length of the generared chromosome is 40\n",
"[3, 3, 3, 9, 4, 9, 4, 4, 7, 4, 7, 3, 4, 8, 8, 6, 4, 2, 3, 5, 2, 7, 4, 8, 8, 7, 4, 5, 3, 9, 4, 6, 4, 3, 6, 9, 6, 8, 8, 3]\n",
"genes in chromosome\n",
"[3, 3, 3, 9, 4]\n",
"[9, 4, 4, 7, 4]\n",
"[7, 3, 4, 8, 8]\n",
"[6, 4, 2, 3, 5]\n",
"[2, 7, 4, 8, 8]\n",
"[7, 4, 5, 3, 9]\n",
"[4, 6, 4, 3, 6]\n",
"[9, 6, 8, 8, 3]\n",
"3000.0\n",
"3300.0\n",
"3390.0\n",
"3394.0\n",
"weigh of gene -3.394\n",
"4000.0\n",
"4400.0\n",
"4470.0\n",
"4474.0\n",
"weigh of gene 4.474\n",
"3000.0\n",
"3400.0\n",
"3480.0\n",
"3488.0\n",
"weigh of gene 3.488\n",
"4000.0\n",
"4200.0\n",
"4230.0\n",
"4235.0\n",
"weigh of gene 4.235\n",
"7000.0\n",
"7400.0\n",
"7480.0\n",
"7488.0\n",
"weigh of gene -7.488\n",
"4000.0\n",
"4500.0\n",
"4530.0\n",
"4539.0\n",
"weigh of gene 4.539\n",
"6000.0\n",
"6400.0\n",
"6430.0\n",
"6436.0\n",
"weigh of gene -6.436\n",
"6000.0\n",
"6800.0\n",
"6880.0\n",
"6883.0\n",
"weigh of gene 6.883\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "npxmzyhQad1f",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 323
},
"outputId": "39ff7cd0-2008-4c1c-f048-b2f86188202b"
},
"source": [
"# GA\n",
"#Take n number of initial samples, then compute the fittest population\n",
"# Consider number of 1s in the string as fitness function.\n",
"import random\n",
"\n",
"population = [\"110001\",\"001000\",\"110110\",\"010101\",\"000010\",\"101011\"]\n",
"\n",
"def swap(a, b):\n",
"\treturn b, a\n",
"\n",
"def count_ones(chromosome):\n",
"\ttemp_ch = list(chromosome)\n",
"\tcount = 0\n",
"\tfor bit in temp_ch:\n",
"\t\tif bit == '1':\n",
"\t\t\tcount += 1\n",
"\treturn count\n",
"\n",
"def make_zipped_chromosomes(ch_list):\t#takes the population list and\n",
"\tfitness_list = [count_ones(element) for element in ch_list]\n",
"\t#zip the lists\n",
"\tzipped = zip(ch_list, fitness_list)\n",
"\tzipped_list = list(zipped)\n",
"\tzipped_list_sorted = sorted(zipped_list, key = lambda x : x[1], reverse = True)\n",
"\treturn zipped_list_sorted\n",
"\n",
"def roulette_wheel_select(ch_list):\n",
"\ttotalSum = 0\n",
"\tfor element in ch_list:\n",
"\t\ttotalSum += element[1]\n",
"\n",
"\trand_int = random.randint(0, totalSum)\n",
"\t# print(rand_int)\n",
"\tpartial_sum = 0\n",
"\tfor element in ch_list:\n",
"\t\tpartial_sum += element[1]\n",
"\t\tif partial_sum >= rand_int:\n",
"\t\t\treturn element\t#return the selected chromosome\n",
"\n",
"def crossover(mat1, mat2):\n",
"\tlength = len(mat1)\n",
"\t#find the crossover point in range (1 to n-1)\n",
"\tcross_point = random.randint(1, length-1)\n",
"\t# cross_point = 3\n",
"\n",
"\tmat1_list = list(mat1)\n",
"\tmat2_list = list(mat2)\n",
"\n",
"\t# print('cross point', cross_point)\n",
"\t# print('Chromosomes before swap', mat1_list, mat2_list)\n",
"\n",
"\tfor i in range(cross_point, length):\n",
"\t\tmat1_list[i], mat2_list[i] = swap(mat1_list[i], mat2_list[i])\n",
"\n",
"\t# print('Chromosomes after swap:', mat1_list, mat2_list)\n",
"\ttoss = random.randint(0, 4)\t\t\t#toss with a probability of 0.25\n",
"\t# if [list(mat1), list(mat2)] == [mat1_list, mat2_list] or [list(mat2), list(mat1)] == [mat1_list, mat2_list]:\t\t#mutation. In this one mutation will only occur if parent chromosomes match with offspring chromosomes.\n",
"\t\t# print(\"Yes\")\n",
"\t# print(\"Toss value: \"+str(toss))\n",
"\tif toss == 3:\n",
"\t\tlength = len(mat1_list) * 2\n",
"\t\tbit_changer = random.randint(0, length)\n",
"\t\tif bit_changer >= len(mat1_list):\n",
"\t\t\tswap_val = bit_changer - len(mat2_list) - 1\n",
"\t\t\t# print(swap_val)\n",
"\t\t\tmat2_list[swap_val] = str(1 - int(mat2_list[swap_val]))\n",
"\t\telse:\n",
"\t\t\t# print(bit_changer)\n",
"\t\t\tmat1_list[bit_changer] = str(1 - int(mat1_list[bit_changer]))\n",
"\t\t# print('Chromosomes after Mutation:', mat1_list, mat2_list)\n",
"\telse:\n",
"\t\tpass\n",
"\t\t# print(\"No\")\n",
"\n",
"\tnew_ch1 = ''.join([element for element in mat1_list])\n",
"\tnew_ch2 = ''.join([element for element in mat2_list])\n",
"\n",
"\treturn [new_ch1, new_ch2]\n",
"\n",
"def execute_ga(ch_list):\n",
"\tnew_ch_list = []\n",
"\tlength = len(ch_list) / 2\n",
"\tfor count in range(int(length)):\n",
"\t\titem1 = roulette_wheel_select(ch_list)\n",
"\t\tmat1 = item1[0]\n",
"\t\tch_list.remove(item1)\n",
"\t\titem2 = roulette_wheel_select(ch_list)\n",
"\t\tmat2 = item2[0]\n",
"\t\tch_list.remove(item2)\n",
"\t\ttemp_list = crossover(mat1, mat2)\n",
"\t\tfor item in temp_list:\n",
"\t\t\tnew_ch_list.append(item)\n",
"\treturn make_zipped_chromosomes(new_ch_list)\n",
"\n",
"\n",
"for chromosome in population:\n",
"\tprint(chromosome, 'Fitness count:', count_ones(chromosome))\n",
"\n",
"ch_zip_list = make_zipped_chromosomes(population)\n",
"print(\"before:\")\n",
"print(ch_zip_list)\n",
"\n",
"#we are targetting for 80% accuracy, so the value is close to 28.(80% of 36 as there are 36 total bits)\n",
"threshold_value = 30\n",
"gen_count = 0\n",
"print(\"please wait....\")\n",
"while(True):\n",
"\tch_zip_list = execute_ga(ch_zip_list)\n",
"\t#count maximum fitness of the offspring pool\n",
"\ttotal_fitness = 0\n",
"\tfor item in ch_zip_list:\n",
"\t\ttotal_fitness += int(item[1])\n",
"\t# print(\"Fitness of lot \"+str(gen_count)+\" is \" +str(total_fitness))\n",
"\tif total_fitness >= threshold_value :\n",
"\t\tprint(\"Fitness of lot \"+str(gen_count)+\" is \" +str(total_fitness))\n",
"\t\tbreak\n",
"\telse:\n",
"\t\tgen_count += 1\n",
"\t# print(\"New Pool:\")\n",
"\t# for chromosome in ch_zip_list:\n",
"\t# \tprint(chromosome, 'Fitness count:', count_ones(chromosome[0]))\n",
"\n",
"print(\"after:\")\n",
"print(ch_zip_list)\n",
"for chromosome in ch_zip_list:\n",
"\tprint(chromosome, 'Fitness count:', count_ones(chromosome[0]))\n",
"#crossover(\"010101\", \"110110\")"
],
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"text": [
"110001 Fitness count: 3\n",
"001000 Fitness count: 1\n",
"110110 Fitness count: 4\n",
"010101 Fitness count: 3\n",
"000010 Fitness count: 1\n",
"101011 Fitness count: 4\n",
"before:\n",
"[('110110', 4), ('101011', 4), ('110001', 3), ('010101', 3), ('001000', 1), ('000010', 1)]\n",
"please wait....\n",
"Fitness of lot 13426 is 30\n",
"after:\n",
"[('111111', 6), ('111110', 5), ('110111', 5), ('110111', 5), ('101111', 5), ('110101', 4)]\n",
"('111111', 6) Fitness count: 6\n",
"('111110', 5) Fitness count: 5\n",
"('110111', 5) Fitness count: 5\n",
"('110111', 5) Fitness count: 5\n",
"('101111', 5) Fitness count: 5\n",
"('110101', 4) Fitness count: 4\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "wrUVD5jVaoQZ",
"colab_type": "code",
"colab": {}
},
"source": [
""
],
"execution_count": 0,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment