Computer_Vision/Chapter01/Back_propagation.ipynb

281 lines
23 KiB
Plaintext
Raw Permalink Normal View History

2024-02-13 03:34:51 +01:00
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Back_propagation.ipynb",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"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"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/PacktPublishing/Modern-Computer-Vision-with-PyTorch/blob/master/Chapter01/Back_propagation.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2020-09-24T13:36:49.845714Z",
"start_time": "2020-09-24T13:36:49.666592Z"
},
"id": "TTWK_bQBC7mf"
},
"source": [
"import numpy as np \n",
"from copy import deepcopy\n",
"import matplotlib.pyplot as plt\n",
"x = np.array([[1,1]])\n",
"y = np.array([[0]])"
],
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2020-09-24T13:36:49.850377Z",
"start_time": "2020-09-24T13:36:49.846832Z"
},
"id": "V8f13jAKC9Rv"
},
"source": [
"from copy import deepcopy\n",
"import numpy as np\n",
"def feed_forward(inputs, outputs, weights): \n",
" pre_hidden = np.dot(inputs,weights[0])+ weights[1]\n",
" hidden = 1/(1+np.exp(-pre_hidden))\n",
" out = np.dot(hidden, weights[2]) + weights[3]\n",
" mean_squared_error = np.mean(np.square(out - outputs))\n",
" return mean_squared_error"
],
"execution_count": 2,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2020-09-24T13:36:49.855575Z",
"start_time": "2020-09-24T13:36:49.851797Z"
},
"id": "8mF3nQbMC_Ja"
},
"source": [
"def update_weights(inputs, outputs, weights, lr):\n",
" original_weights = deepcopy(weights)\n",
" temp_weights = deepcopy(weights)\n",
" updated_weights = deepcopy(weights)\n",
" original_loss = feed_forward(inputs, outputs, original_weights)\n",
" for i, layer in enumerate(original_weights):\n",
" for index, weight in np.ndenumerate(layer):\n",
" temp_weights = deepcopy(weights)\n",
" temp_weights[i][index] += 0.0001\n",
" _loss_plus = feed_forward(inputs, outputs, temp_weights)\n",
" grad = (_loss_plus - original_loss)/(0.0001)\n",
" updated_weights[i][index] -= grad*lr\n",
" return updated_weights, original_loss"
],
"execution_count": 3,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2020-09-24T13:36:49.859883Z",
"start_time": "2020-09-24T13:36:49.856643Z"
},
"id": "jgka7ZyOC_Ow",
"scrolled": false
},
"source": [
"W = [\n",
" np.array([[-0.0053, 0.3793],\n",
" [-0.5820, -0.5204],\n",
" [-0.2723, 0.1896]], dtype=np.float32).T, \n",
" np.array([-0.0140, 0.5607, -0.0628], dtype=np.float32), \n",
" np.array([[ 0.1528, -0.1745, -0.1135]], dtype=np.float32).T, \n",
" np.array([-0.5516], dtype=np.float32)\n",
"]"
],
"execution_count": 4,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2020-09-24T13:36:50.261156Z",
"start_time": "2020-09-24T13:36:49.860952Z"
},
"id": "EFr7P1F0C_L_",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 298
},
"outputId": "2a439af3-e2a1-4605-acf1-d8d2b874b1e3"
},
"source": [
"losses = []\n",
"for epoch in range(100):\n",
" W, loss = update_weights(x,y,W,0.01)\n",
" losses.append(loss)\n",
"plt.plot(losses)\n",
"plt.title('Loss over increasing number of epochs')"
],
"execution_count": 5,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Loss over increasing number of epochs')"
]
},
"metadata": {
"tags": []
},
"execution_count": 5
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2020-09-24T13:36:50.265635Z",
"start_time": "2020-09-24T13:36:50.262366Z"
},
"id": "Hyul1G_CDFy_",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "f0ce94c6-9902-4c16-def4-0b6b6f9f436c"
},
"source": [
"W"
],
"execution_count": 6,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[array([[ 0.01424004, -0.5907864 , -0.27549535],\n",
" [ 0.39883757, -0.52918637, 0.18640439]], dtype=float32),\n",
" array([ 0.00554004, 0.5519136 , -0.06599568], dtype=float32),\n",
" array([[ 0.3475135 ],\n",
" [-0.05529078],\n",
" [ 0.03760847]], dtype=float32),\n",
" array([-0.22443289], dtype=float32)]"
]
},
"metadata": {
"tags": []
},
"execution_count": 6
}
]
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2020-09-24T13:36:50.269686Z",
"start_time": "2020-09-24T13:36:50.266775Z"
},
"id": "zWGav-f7DIhI"
},
"source": [
"pre_hidden = np.dot(x,W[0]) + W[1]\n",
"hidden = 1/(1+np.exp(-pre_hidden))\n",
"out = np.dot(hidden, W[2]) + W[3]"
],
"execution_count": 7,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"ExecuteTime": {
"end_time": "2020-09-24T13:36:50.273559Z",
"start_time": "2020-09-24T13:36:50.271055Z"
},
"id": "30Wqe4KADQFE",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "f81dacdc-4efe-4cdf-ef39-e6ffb19e4ca9"
},
"source": [
"out"
],
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[-0.0174781]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 8
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "QqapuMCwDQiJ"
},
"source": [
""
],
"execution_count": 8,
"outputs": []
}
]
}