From e8be7a05cfc9496db59e92d5836036e97fe38c26 Mon Sep 17 00:00:00 2001 From: tmayer868 Date: Tue, 18 Feb 2020 00:57:08 -0700 Subject: [PATCH] Add files via upload --- resent.ipynb | 206 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 172 insertions(+), 34 deletions(-) diff --git a/resent.ipynb b/resent.ipynb index 36c748d..6d8299f 100644 --- a/resent.ipynb +++ b/resent.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -36,9 +36,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Weight Gradients')" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Choose an activation function\n", "activation = torch.tanh\n", @@ -62,7 +85,7 @@ "# Loop over a number of hidden layers\n", "for i in range(n):\n", " # New weight\n", - " w_i = torch.tensor([1.0],requires_grad=True)\n", + " w_i = torch.tensor([.9],requires_grad=True)\n", "\n", " # Linear transform\n", " a_i = z_prev*w_i\n", @@ -84,7 +107,7 @@ "L = torch.sqrt((z_i - z_obs)**2)\n", "\n", "# Reverse-mode AD\n", - "L.backward()\n", + "L.backward(retain_graph=True)\n", "\n", "# Print each weight's gradient\n", "w_grad_init = []\n", @@ -102,9 +125,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Weight Gradients')" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# Store the feed-forward steps\n", "w_list = []\n", @@ -120,19 +166,20 @@ "\n", "\n", "\n", - "skip1 = #TODO\n", - "skip2 = #TODO \n", + "#skip1 = #TODO\n", + "#skip2 = #TODO \n", "\n", " \n", "for i in range(1,n+1):\n", " # New weight\n", - " w_i = torch.tensor([1.],requires_grad=True)\n", + " w_i = torch.tensor([.9],requires_grad=True)\n", " \n", " # Linear transform\n", " a_i = w_i*z_prev \n", "\n", " # Activation\n", " zprime_i = activation(a_i) \n", + " zprime_i.add(z_prev)\n", "\n", " # TODO: replace the line below with one that would add a skip connection\n", " \n", @@ -148,13 +195,13 @@ " z_list.append(z_prev)\n", " a_list.append(a_i)\n", " # output of layer i becomes input for layer i+1\n", - " z_prev = z_i\n", + " z_prev = zprime_i\n", "\n", "# Objective function\n", - "L = torch.sqrt((z_i - z_obs)**2)\n", + "L = torch.sqrt((zprime_i - z_obs)**2)\n", "\n", "# Reverse-mode AD\n", - "L.backward()\n", + "L.backward(retain_graph=True)\n", "\n", "# Print each weight's gradient\n", "w_grad = []\n", @@ -166,12 +213,32 @@ "\n", "#w_grad = sp.savgol_filter(w_grad,5,3)\n", "plt.semilogy(w_grad,label='Skip Connections')\n", - "plt.semilogy(w_grad_init,labl='No Skip Connections') #compare to previous network\n", + "plt.semilogy(w_grad_init,label='No Skip Connections') #compare to previous network\n", "plt.title('Hidden Layer Gradients of a FNN With Skip Connections')\n", "plt.xlabel('Hidden Layers')\n", "plt.ylabel('Weight Gradients')\n" ] }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([-3.2747e-25])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w_list[0].grad" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -196,7 +263,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -237,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -264,7 +331,7 @@ " for i in range(1,self.num_layers-1): #loops over a set number of blocks conv to relu\n", " \n", " x = self.linears[i](zprev)\n", - " zi = F.relu(x)\n", + " zi = F.sigmoid(x)\n", " zprev = zi\n", " \n", " \n", @@ -278,7 +345,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -348,7 +415,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -361,9 +428,41 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Tony\\Anaconda3\\envs\\tensorflow_env\\lib\\site-packages\\torch\\nn\\functional.py:1386: UserWarning: nn.functional.sigmoid is deprecated. Use torch.sigmoid instead.\n", + " warnings.warn(\"nn.functional.sigmoid is deprecated. Use torch.sigmoid instead.\")\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 2.2820563316345215 Train_Accuracy = 9.433333333333334 Test_Accuracy = 9.4\n", + "10 2.300017833709717 Train_Accuracy = 11.033333333333333 Test_Accuracy = 11.799999999999999\n", + "20 0.8619336485862732 Train_Accuracy = 63.7 Test_Accuracy = 61.8\n", + "30 1.0166387557983398 Train_Accuracy = 67.0 Test_Accuracy = 64.2\n", + "40 0.8312216401100159 Train_Accuracy = 71.3 Test_Accuracy = 70.19999999999999\n" + ] + }, + { + "data": { + "image/png": "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T8322FE9GyIiRwSFDUk9+3o2mt5nozqsng0RkaAobEjqqamENu0gPbPJIrVajSIiEhiFDUk9HnYP3TtnIycrI4gaiYgc1RQ2JPV42D20WnM2REQCo7Ahqcfj7eUBsrP0X0BExG+60krqqdnu4b4oDYCGUUREgqCwIamnxkPPRjgKQHaG/guIiPhNV1pJLZEGqN3haYJoVnoaGen6LyAi4jddaSW11FbFjh6GUbTHhohIMBQ2JLV42KocYj0bWokiIhIMhQ1JLftuwtbcMEqUHPVsiIgEQmFDUovXno1wA9nq2RARCYTChqQWD7eXh/gwino2REQCobAhqcVjz0Z1OKJhFBGRgChsSGqpqYS0DGiTf/Bi4YiGUUREAqKwIall71blZgctVqvVKCIigVHYkNTi4SZsoGEUEZEgKWxIaqne3ux8DYhNENUwiohIMJoNG2bW08zmmdkqM1tpZrfGzxeY2dtmti5+PPjGBiJB8NizUVuvng0RkaB46dloAH7onDseGAncaGaDgDuBd51z/YB3449FEqu6stn7otRHotRHnOZsiIgEpNmw4Zwrdc4tjn+9C1gFdAfGA8/Giz0LTPCrkiKeOOft9vL1EQDtsyEiEpAWzdkws97AScB8oItzrhRigQQoau3KibRIfTVE6jzsHqqwISISJM9hw8zygJeA25xzO1vwvKlmttDMFpaXlx9KHUW8qfa4e+jesKFhFBGRQHgKG2aWSSxozHDOzY6f3mZm3eLf7waEGnuuc+5x51yxc664sLCwNeos0ri9W5U3M2dj3zCKwoaISCC8rEYx4ElglXPu9/t961VgcvzrycArrV89kRZowVbloGEUEZGgZHgocwZwDbDczJbGz90NTANeMLMpwCbgcn+qKOKRx5uw1apnQ0QkUM2GDefcP4Cm9n4e17rVETkMnm8vHwsbOVlesraIiBwu7SAqqaNme+zYzJyN6n1LX/XPX0QkCLraSuqoroSsfMjIOmix2njPhrYrFxEJhsKGpI6aSshpftf86nADoGEUEZGgKGxI6ihfAx17N1uspj4KaIKoiEhQFDYkNUTqIfQpdD2h2aJ799lok6F//iIiQdDVVlJD+RqIhKHbic0WrQk30DYznbS0phZZiYhIa1LYkNRQVhI7egkb9RFt6CUiEiCFDUkNpSWQmQOd+jZbtCYc1XwNEZEAKWxI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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "trainacc_init, testacc_init = train_model(num_epochs, Net(num_input_images, num_layers)) #train the model for a hundred epochs\n", "\n", @@ -382,13 +481,13 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "# basic net class\n", - "skip1 = # TODO fill in SKIPS\n", - "skip2 = #\n", + "#skip1 = # TODO fill in SKIPS\n", + "#skip2 = #\n", "\n", "\n", "class ResNet(nn.Module):\n", @@ -423,7 +522,7 @@ " # Think carefully about your skip intervals, and what should be used where\n", " # hint: use the lists defined as a class object, the modulus operator, and the .add() method\n", " \n", - " zi = F.relu(ai)\n", + " zi = F.sigmoid(ai) + zprev\n", " zprev = zi\n", " self.z_list.append(zi)\n", " self.a_list.append(ai)\n", @@ -439,16 +538,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 8.095459938049316 Train_Accuracy = 65.9 Test_Accuracy = 77.8\n", + "10 0.6382400393486023 Train_Accuracy = 94.33333333333334 Test_Accuracy = 83.39999999999999\n", + "20 0.15798747539520264 Train_Accuracy = 97.7 Test_Accuracy = 84.39999999999999\n", + "30 0.2987133264541626 Train_Accuracy = 98.7 Test_Accuracy = 83.6\n", + "40 0.1518917679786682 Train_Accuracy = 97.93333333333332 Test_Accuracy = 83.0\n" + ] + }, + { + "data": { + "image/png": "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69ath7UZYOrUqcydOxeAxMREHnjgAQYMGMCbb77Jc889R+/evUlJSeHCCy+kpKQEgD179jB+/HhSUlJISUnhyy+/5P/+7/944oknPOe966676hTQjoXujpEmq+TrlZjwcMKTkuq0v1bQFfnN/e9uYOOuOi+MXifd2kZz79juNe7z448/MmfOHJ5++mn27t3L3/72NzIyMoiMjOSRRx5h5syZTJ06lYULF5KZmYkxhoKCgsPOkZiYyLXXXktUVJQnoLzwwgts3ryZjIwMgoOD2b9/P5999hkhISFkZGRw5513smDBgqPak5mZyfLlyykqKqJz585cd911R92O+u2337Jhwwbatm1L//79WbFiBWlpaVxzzTV89tlndOzYkYkTJ1b5flu1asXHH39MWFgYWVlZTJw4kTVr1vDhhx+yaNEiVq5cSUREBPn5+QBMmjSJ6dOnM378eEpLS3G5XGzfvr3GaxoWFsYXX3wBQF5eHldddRUAd999Ny+88ALTpk3jxhtvZODAgSxcuJCKigrsdjtt27blggsu4KabbsLlcvH666+zatWqGl/rWCmESJNVsmolEb16YULrNrxSXF6sQmUifnbKKaeQnp4OwNdff83GjRvp378/AOXl5fTr14/o6GjCwsKYMmUKo0ePrrKHoSoTJkwgODgYgMLCQq644gqysrIwxuBwOKo8ZvTo0TRr1oxmzZrRqlUr9uzZQ/v27Q/bp0+fPp5tqampZGdnExUVRadOnTy3rk6cOJHZs2cfdX6Hw8HUqVNZt24dwcHBbN68GYCMjAwmT55MREQEAHFxcRQVFbFz507Gjx8PVIaLurjkkks8369fv567776bgoIC7HY75557LgDLli1j3rx5AAQHBxMTE0NMTAzx8fF8++237Nmzh549exIfH1+n16wrhRBpkpx5eZRlbSF67Lg6H1Ps1Aq6IgfV1mPhK5GRv/0btCyLYcOG8dprrx2136pVq1i6dCmvv/46Tz31FMuWLTumc//f//0fgwcPZuHChWRnZzNo0KAqj2l2yKT24ODgKueTVLXPwSGZ2syaNYvWrVvz3Xff4XK5PMHCsqyj7jyp7pwhISGHzZ858pbZQ9/3lVdeyaJFi0hJSWHu3Ll88sknNbZvypQpzJ07l19//ZU//vGPdXpPx0JzQqRJKnF3GUbWcVIqgL1cwzEijUl6ejor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abIhBODUs7Vcu4iISGOlVbxERETELxRCRESkUSgoKODpp58+7uMff/xxSkpqXnNLGheFEBERaRSaQgg5WP5d6kYhREREGoXp06ezdetWUlNT+etf/wrAP/7xD3r37k1ycjL33nsvAMXFxYwePZqUlBR69OjB/PnzefLJJ9m1axeDBw9m8ODBR537gQceoHfv3vTo0YOrr77as0bMli1bGDp0KCkpKfTq1YutW7cC8Oijj5KUlERKSgrTp08HYNCgQRwsrLl3714SExMBmDt3LhMmTGDs2LEMHz4cu93OkCFD6NWrF0lJSSxevNjTjnnz5pGcnExKSgqXX345RUVFdOzYEYejctHS/fv3k5iY6Hnc1DXpiakiInJ8fp0xg7JNmV49Z7OuXTjpzjurff7hhx9m/fr1ngqlS5YsISsri1WrVmFZFuPGjeOzzz4jNzeXtm3b8v777wOVa6vExMQwc+ZMli9fTkLC0St3T506lXvuuQeAyy+/nPfee4+xY8cyadIkpk+fzvjx4yktLcXlcvHhhx+yaNEiVq5c6VmTpTZfffUV33//PXFxcTidThYuXEh0dDR79+4lPT2dcePGsXHjRh566CFWrFhBQkIC+fn5NG/enEGDBvH+++9z/vnn8/rrr3PhhRdis3lnLbLGTj0hIiLSKC1ZsoQlS5bQs2dPevXqRWZmJllZWSQlJZGRkcHtt9/O559/TkxMTK3nWr58OX379iUpKYlly5axYcMGioqK2LlzJ+PHjwcgLCyMiIgIMjIymDx5MhERlQtuxsXF1Xr+YcOGefazLIs777yT5ORkhg4dys6dO9mzZw/Lli3joosu8oSkg/tPmTKFOXPmADBnzhwmT5587BfrBKWeEBEROUpNPRYNxbIs7rjjDq655pqjnlu7di0ffPABd9xxB8OHD/f0clSltLSU66+/njVr1tChQwfuu+8+SktLqW7tNMuyqqzkHBISgsvl8pzzUAcXlQN45ZVXyM3NZe3atdhsNhITEz2vV9V5+/fvT3Z2Np9++ikVFRX06NGj2vfS1KgnREREGoXmzZtTVFTkeXzuuefy4osvYrfbAdi5cyc5OTns2rWLiIgILrvsMm699Va++eabKo8/6GBgSEhIwG6389ZbbwEQHR1N+/btWbRoEVC5eF1JSQnDhw/nxRdf9ExyPTgck5iYyNq1awE856hK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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ - "trainacc, testacc = train_model(num_epochs, ResNet(num_input_images, num_layers)) #train the model for a hundred epochs\n", + "trainaccres_init, testaccres_init = train_model(num_epochs, ResNet(num_input_images, num_layers)) #train the model for a hundred epochs\n", "\n", - "plt.plot(trainacc, label = 'training accuracy (skip connects)')\n", - "plt.plot(testacc, label = 'test accuracy (skip connects)')\n", - "plt.plot(trainacc_init, label = 'training accuracy (no skip connects)')\n", - "plt.plot(testacc_init, label = 'test accuracy (no skip connects)')\n", + "plt.plot(trainaccres_init, label = 'res training accuracy')\n", + "plt.plot(testaccres_init, label = 'res test accuracy')\n", + "plt.plot(trainacc_init, label = 'training accuracy')\n", + "plt.plot(testacc_init, label = 'test accuracy')\n", "plt.legend()\n", "plt.show()" ] @@ -461,19 +584,34 @@ "\n", "1. What is the vanishing gradient problem, and what is its primary cause?\n", "\n", + "Vanishing gradient is when the gradient of the error funtion with respect to weights many layers away from the output becomes extremely small. \n", + "\n", "2. What are 4 limitations to optimizing a deep convolutional neural network?\n", "\n", + "Even with residual blocks the amount of layers in the resnet is limited. We are still limited by computaion time. Batch Normalization should help with gradients as well but limits what can be down in parrallel. \n", + "\n", "3. In terms of how a given block of a network is \"fitted\", what is the key difference between using skip connections and traditional blocks?\n", "\n", + "My understanding is if the ideal mapping between layers is F(X), without residual connections the blocks would have to learn F directly. With skip connection the block only needs to learn the residual mapping R(X) = F(X)-X. When you add X to R(X) you recover the ideal mapping F. R(X) should be simpler to learn if the F(X) is relatively closs to the identity mapping. \n", + "\n", "4. In the context of model hyper-parameters, what additional parameters is added in the res-net implementation?\n", + "How many residual blocks to use and how many layers are in the residual block\n", "\n", "5. How do skip connections resolve the \"vanishing gradient\" problem? (Open Ended)\n", "\n", + "you allow weights in early parts of the network a shorter path ,through less multiplications and activations, to the output. \n", + "\n", "6. Give an appropriate anology for how kernels are used to extract features from images (i.e. sanding wood)\n", "\n", + "A kernel such as Sobel operator can look for large gradients and thus edge detection.\n", + "The anaolgy would be to walk along the image and see where the intensity is decreasing most steeply\n", + "\n", "7. Was this a good paper when it was released? Is it a good paper now? What has changed between now and it's initial release point? What other methods are there of solving the vanishing gradient problem? (Open Ended)\n", "\n", - "8. What interval of skip connections did you use and where were they applied to? Did you find any #accuracygainz ?" + "I believe this was a good paper and still is a good paper. It demonstrated the effectiveness of their residual technique and changed the game when it comes to deep CNN. Two very good techniques for solving vanishing gradient are bactch normalization and relu activation. \n", + "\n", + "8. What interval of skip connections did you use and where were they applied to? Did you find any #accuracygainz ?\n", + "I used a skip connection of length one. The accuracy wasnt any better but the network did train better.\n" ] }, { @@ -500,7 +638,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.7.1" } }, "nbformat": 4,