diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..be84118e426caed4536bd40762635cd8d0181fc2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/data +*.pyc +tests.ipynb + diff --git a/be_image_classification.ipynb b/be_image_classification.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..807001d319129c6873c335e6ddb8d95695ba69c4 --- /dev/null +++ b/be_image_classification.ipynb @@ -0,0 +1,2052 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## CIFAR Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((60000, 3072), (60000,))" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from utils.read_cifar import read_cifar\n", + "\n", + "data, labels = read_cifar('data/cifar-10-batches-py')\n", + "data.shape, labels.shape\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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nHvsscfcqFGj3ObNm93+/fvd4sWL3aRJk9yZM2cCr9zm47aztbXVfeUrX3E7duxwR44cca+//rr7oz/6I3fllVe6jo6O0Ev3tmLFCldcXOy2bdvmTpw40X1pb2/vHrN8+XI3YcIE98Ybb7jdu3e76upqV11dHXDVdhfbzkOHDrlHHnnE7d692x05csRt3rzZTZ482c2ePTvwym2+9rWvufr6enfkyBG3f/9+97Wvfc1FIhH3b//2b865/juWAyKAnHPu+9//vpswYYKLx+Pu+uuvdzt37gy9pD516623uoqKChePx90nPvEJd+utt7pDhw6FXtYlefPNN52kcy5Lly51zp09Ffsb3/iGKysrc4lEws2bN88dOHAg7KJ74eO2s7293c2fP9+NHTvW5efnu4kTJ7q77rprwP3ydL7tk+TWrVvXPebMmTPuz//8z93o0aNdQUGBu/nmm92JEyfCLboXLradR48edbNnz3YlJSUukUi4K664wv31X/+1a25uDrtwozvvvNNNnDjRxeNxN3bsWDdv3rzu8HGu/44lnwcEAAgi598DAgAMTgQQACAIAggAEAQBBAAIggACAARBAAEAgiCAAABBEEAAgCAIIABAEAQQACAIAggAEMT/A9ARKwM2PlqmAAAAAElFTkSuQmCC", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from utils.split_dataset import split_dataset\n", + "from utils.process_image import plot_image_with_label\n", + "\n", + "train_data, train_labels, test_data, test_labels = split_dataset(data, labels, 0.8)\n", + "plot_image_with_label(train_data[0].reshape(3, 32, 32).transpose(1,2,0), train_labels[0])\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## k-nearest neighbors" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0. , 2.82842712],\n", + " [2.82842712, 0. ]])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from utils.distance_matrix import distance_matrix\n", + "import numpy as np\n", + "\n", + "a_test = np.array([[1, 2], [3, 4]])\n", + "b_test = np.array([[1, 2], [3, 4]])\n", + "distance_matrix(a_test, b_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from utils.evaluate_knn import evaluate_knn\n", + "\n", + "if False:\n", + " evaluate_knn(train_data, train_labels, test_data, test_labels, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "k=1, accuracy=0.34833333333333333\n", + "k=2, accuracy=0.30833333333333335\n", + "k=3, accuracy=0.3288333333333333\n", + "k=4, accuracy=0.3405\n", + "k=5, accuracy=0.3375\n", + "k=6, accuracy=0.33366666666666667\n", + "k=7, accuracy=0.33316666666666667\n", + "k=8, accuracy=0.3355\n", + "k=9, accuracy=0.335\n", + "k=10, accuracy=0.33416666666666667\n", + "k=11, accuracy=0.341\n", + "k=12, accuracy=0.3365\n", + "k=13, accuracy=0.3368333333333333\n", + "k=14, accuracy=0.33616666666666667\n", + "k=15, accuracy=0.33366666666666667\n", + "k=16, accuracy=0.3313333333333333\n", + "k=17, accuracy=0.3303333333333333\n", + "k=18, accuracy=0.3285\n", + "k=19, accuracy=0.32866666666666666\n", + "k=20, accuracy=0.331\n" + ] + } + ], + "source": [ + "if True:\n", + " data, labels = read_cifar('data/cifar-10-batches-py')\n", + " train_data, train_labels, test_data, test_labels = split_dataset(data, labels, 0.9)\n", + " k_values = list(np.arange(1, 21))\n", + " accuracies = []\n", + " for k in k_values:\n", + " accuracy = evaluate_knn(train_data, train_labels, test_data, test_labels, k)\n", + " accuracies.append(accuracy)\n", + " print(f'k={k}, accuracy={accuracy}')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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o9G0+DipVIro6GjEx8fjySefxG233Ya0tDQAwPbt21FaWoqePXtCLpdDLpfjzJkzePLJJxEZGdniORMTE1FfX4/Tp093xlMTjcbfCwCnHRIRERERORpRw5dCocDw4cORnp5uu89isSA9PR2jRo1q9XksFgsMBgMAYMaMGdi/fz+ys7Ntt7CwMDz11FPYuHFji+fIzs6GVCpttsOiM9GoGkbnuNcXEREREZFjEX3aYWpqKmbNmoWEhASMHDkSixcvhl6vR0pKCgBg5syZCA8Pt41spaWlISEhAVFRUTAYDFi/fj1WrFiBpUuXAgCCgoIQFBTU5BoeHh7QaDTo378/ACAjIwO7du3C9ddfDz8/P2RkZOCJJ57APffcg27dutnx2Xc+brRMREREROSYRA9f06ZNQ1lZGV588UUUFxcjPj4eGzZssDXhyM3NhVR6foBOr9djzpw5yM/Ph5eXF2JiYrBy5UpMmzat1ddUKpX46quv8NJLL8FgMKB379544oknmqwDc1a2vb447ZCIiIiIyKFIBEEQxC7CGel0OqhUKmi1Wvj7+4tdjs3+/Erc9P5vUPsrseu5pMs/gIiIiIiIOqS12UD0TZapc1mnHZZVGVBvtohcDRERERERWTF8uZggXyVkUgksAlBebRS7HCIiIiIiasTw5WJkUglC/Bo7HnLdFxERERGRw2D4ckEaFTseEhERERE5GoYvF3S+3XytyJUQEREREZEVw5cLsrabL9YZRK6EiIiIiIisGL5ckHXaIff6IiIiIiJyHAxfLuj8tEOGLyIiIiIiR8Hw5YKs0w458kVERERE5DgYvlyQrduhrg6CIIhcDRERERERAQxfLsk67bDGaEaVoV7kaoiIiIiICGD4ckleChlUXh4AgBKu+yIiIiIicggMXy7KOvpVxPBFREREROQQGL5clPqCdV9ERERERCQ+hi8XpfFXAuC0QyIiIiIiR8Hw5aJse31x5IuIiIiIyCEwfLko67RD7vVFREREROQYGL5cFEe+iIiIiIgcC8OXi1Jbw5fWIHIlREREREQEMHy5rNDGaYdn9QYY6y0iV0NERERERAxfLirQRwGFTApBAEqrOPWQiIiIiEhsDF8uSiKRIMTabp7rvoiIiIiIRMfw5cI0XPdFREREROQwGL5cmLXdPDseEhERERGJj+HLhVlHvjjtkIiIiIhIfAxf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d7V2ha85c+YgNTUVeXl5GD58OHx8mu5UPWTIkE4pjuzL1nRD63rha19+Q/iK495eRERE5GCG9eyGYT0bNiNe+fsZ7DhebgtLXheGpJYCUouBSmq7353avjuydoWv6dOnAwAee+wx230SiQSCIEAikcBsNndOdWRXmsZ286448rU/vxIAR76IiIjIcWlUnvi/5P74v+T+YpdCXaRd4evUqVOdXQc5APUF7eZdSWWNEWfONuw/NyQ8QNxiiIiIiMhttSt8ca2Xa7JOOyx2sWmH+xunHEYGeUPlzU3/iIiIiEgc7Qpfn3/++SW/P3PmzHYVQ+Jy1WmH56ccBohaBxERERG5t3aFr3nz5jX52mQyoaamBgqFAt7e3gxfTsoavqrq6qE31MNH2a63h8OxNtvgei8iIiIiElO72p6cO3euya26uho5OTm4+uqr8eWXX3Z2jWQnvko5fBsDlyuNfllHvtjpkIiIiIjE1Gk9J/v27Ys33njjolExci5qfyUA12k3X6KrQ4nOAKkEGBTW8m7jRERERERdrVMb/svlchQWFnbmKcnOXG3d1768SgBAP7UfvBWuMY2SiIiIiJxTuz6Nfv/9902+FgQBRUVFeP/993HVVVd1SmEkDmu7eVcJX/u53ouIiIiIHES7wtctt9zS5GuJRILu3btjzJgx+Oc//9kZdZFIrO3mXWXa4b7G9V6x7HRIRERERCJrV/iyWCydXQc5CFeadigIAg4UNIx8xXHki4iIiIhE1qlrvsj52TZa1hlErqTjcitqUFljgkImRYyGzTaIiIiISFztCl9Tp07FwoULL7r/zTffxO23397hokg8tpEvba3IlXScdb3XgFA/KOT8PQMRERERiatdn0h//fVXTJo06aL7J06ciF9//bXDRZF4rCNfZVUG1Jude3qpdX+vIVzvRUREREQOoF3hq7q6GgqF4qL7PTw8oNPpOlwUiSfIVwmZVAKLAJRXG8Uup0P2sdMhERERETmQdoWv2NhYrF69+qL7v/rqKwwcOLDDRZF4ZFIJQvwaNlp25qYbZouAg9ZmGxEB4hZDRERERIR2djt84YUXcOutt+LEiRMYM2YMACA9PR1ffvklvv76604tkOxP7e+JIm0dirV1QITY1bTPibJq1BjN8FbIENXdV+xyiIiIiIjaF75uvPFGfPvtt3j99dfxzTffwMvLC0OG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lxqN5qKGHvX19aioqGjxukqlEkqlsq1P0aWoRZx2uC+vodnG4DAV5DKn/J0BEREREbk5UT/FKhQKDB8+HOnp6bb7LBYL0tPTMWrUqFafx2KxwGA4v/mvNXgdO3YMmzdvRlBQUJPjR40ahcrKSmRmZtru27JlCywWCxITEzvwjFybxr8hfIox7dC6uTL39yIiIiIiZyXqyBcApKamYtasWUhISMDIkSOxePFi6PV6pKSkAABmzpyJ8PBwpKWlAWhYe5WQkICoqCgYDAasX78eK1assE0rNJlMuO2225CVlYV169bBbDbb1nEFBgZCoVBgwIABmDBhAmbPno1ly5bBZDJh7ty5mD59eqs6HborjcoLAFAkxshXY5v5uAiu9yIiIiIi5yR6+Jo2bRrKysrw4osvori4GPHx8diwYYOtCUdubi6k0vMDdHq9HnPmzEF+fj68vLwQExODlStXYtq0aQCAgoICfP/99wAapiReaOvWrbapiatWrcLcuXMxduxYSKVSTJ06Fe+++27XP2EnZl3zZe+RL5PZgsNFDc02OPJFRERERM5K9H2+nJW77fMFNKz1uiItHTKpBH/+YyJkUoldrnuwQIsb3tsBf0859i0YD4nEPtclIiIiImoNp9jni5xLsK8CUglgtgg4W224/AM6yf7GKYdDegQweBERERGR02L4olaTy6To7tfQdMOe7ebPN9vgei8iIiIicl4MX9QmGhHaze+7YOSLiIiIiMhZMXxRm1j3+rJX041aoxl/llQBYKdDIiIiInJuDF/UJtaOh/aadni4SAuzRUB3P6Vt1I2IiIiIyBkxfFGbWMOXvfb62pfXuL9XDxWbbRARERGRU2P4ojbR2HnaobXZRmx4gF2uR0RERETUVRi+qE3s3XDD1mae672IiIiIyMkxfFGbqFXWka+u3+dLW2vCyXI9ACCOnQ6JiIiIyMkxfFGbWEe+qg31qDbUd+m1DhY0jHr16OaFQB9Fl16LiIiIiKirMXxRm/go5fBTygF0/dTDfY3rvTjqRURERESugOGL2uz81MOuDV8HbJsrc70XERERETk/hi9qM3s13bA12+DIFxERERG5AIYvajN7bLRcXm1AQWUtJBIgliNfREREROQCGL6ozewx8mXd3yuquy98G9eYERERERE5M4YvajO1HUa+9uVxvRcRERERuRaGL2oz68hX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57M23TDWWwCw2QYREREREcDwRV3AuteX1ZAebLZBRERERMTwRZ1Oozq/H1qgjwI9unmJWA0RERERkWNg+KJOd+HI15AeKkgkEhGrISIiIiJyDAxf1Ok0TcJXgHiFEBERERE5EIYv6nTWhhsAEMf1XkREREREABi+qAt4K+ToE+wDb4UMw3p2E7scIiIiIiKHIBe7AHJN//vblagxmdHNRyF2KUREREREDoHhi7pENx8FOOZFRERERHQepx0SERERERHZAcMXERERERGRHTB8ERERERER2QHDFxERERERkR0wfBEREREREdkBwxcREREREZEdMHwRERERERHZAcMXERERERGRHTB8ERERERER2QHDFxERERERkR0wfBEREREREdkBwxcREREREZEdMHwRERERERHZAcMXERERERGRHcjFLsBZCYIAANDpdCJXQkREREREYrJmAmtGaAnDVztVVVUBACIiIkSuhIiIiIiIHEFVVRVUKlWL35cIl4tn1CyLxYLCwkL4+flBIpGIXY5L0+l0iIiIQF5eHvz9/cUux+Xx9bY/vub2x9fcvvh62x9fc/vja25/jvSaC4KAqqoqhIWFQSpteWUXR77aSSqVokePHmKX4Vb8/f1F/4vlTvh62x9fc/vja25ffL3tj6+5/fE1tz9Hec0vNeJlxYYbREREREREdsDwRUREREREZAcMX+TwlEolFixYAKVSKXYpboGvt/3xNbc/vub2xdfb/via2x9fc/tzxtecDTeIiIiIiIjsgCNfREREREREdsDwRUREREREZAcMX0RERERERHbA8EVERERERGQHDF8kqrS0NIwYMQJ+fn4ICQnBLbfcgpycnEs+5tNPP4VEImly8/T0tFPFzu2ll1666LWLiYm55GO+/vprxMTEwNPTE7GxsVi/fr2dqnUNkZGRF73mEokEjzzySLPH8/3ddr/++ituvPFGhIWFQSKR4Ntvv23yfUEQ8OKLLyI0NBReXl5ISkrCsWPHLnveJUuWIDIyEp6enkhMTMTu3bu76Bk4n0u95iaTCc888wxiY2Ph4+ODsLAwzJw5E4WFhZc8Z3t+PrmLy73H77333oteuwkTJlz2vHyPt+xyr3lzP9clEgneeuutFs/J93jLWvN5sK6uDo888giCgoLg6+uLqVOnoqSk5JLnbe/P/67E8EWi+uWXX/DII4/g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s52D7/G2udzPFUEQBK1WK3h7ewtLly5t9hx8j7deaz4PPvzww0LPnj2FLVu2CH/88YcwatQoYdSoUU3O079/f2HNmjW2r1vz89/eGL5IVACavX3yySe2Y6677jph1qxZtq8ff/xxoWfPnoJCoRDUarUwadIkISsry/7FO6Fp06YJoaGhgkKhEMLDw4Vp06YJx48ft33/r6+1IAjCf//7X6Ffv36CQqEQBg0aJPz44492rtr5bdy4UQAg5OTkXPQ9vr87buvWrc3+HLG+rhaLRXjhhRcEtVotKJVKYezYsRf9v+jVq5ewYMGCJve99957tv8XI0eOFH7//Xc7PSPHd6nX/NSpUy3+bN+6davtHH99zS/388mdXer1rqmpEcaPHy90795d8PDwEHr16iXMnj37ohDF93jbXO7niiAIwr///W/By8tLqKysbPYcfI+3Xms+D9bW1gpz5swRunXrJnh7ewtTpkwRioqKLjrPhY9pzc9/e5MIgiB0zZgaERERERERWXHNFxERERERkR0wfBEREREREdkBwxcREREREZEdMHwRERERERHZAcMXERERERGRHTB8ERERERER2QHDFxERERERkR0wfBEREREREdkBwxcREVEbjR49Go8//rjYZRARkZNh+CIiIiIiIrIDhi8iIiIiIiI7YPgiIiLqoB9//BEqlQqrVq0SuxQiInJgcrELICIicmZffPEFHn74YXzxxRe44YYbxC6HiIgcGEe+iIiI2mnJkiWYM2cOfvjhBwYvIiK6LI58ERERtcM333yD0tJS/PbbbxgxYoTY5RARkRPgyBcREVE7DB06FN27d8fy5cshCILY5RARkRNg+CIiImqHqKgobN26Fd999x0effRRscshIiInwGmHRERE7dSvXz9s3boVo0ePhlwux+LFi8UuiYiIHBjDFxERUQf0798fW7ZswejRoyGTyfDPf/5T7JKIiMhBSQROVCciIiIiIupyXPNFRERERERkBwxfREREREREdsDwRUREREREZAcMX0RERERERHbA8EVERERERGQHDF9ERERERER2wPBFRERERERkBwxfREREREREdsDwRUREREREZAcMX0RERERERHbA8EVERERERGQH/w++WFmyEZCFwAAAAABJRU5ErkJggg==", + "text/plain": [ + "<Figure size 1000x500 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from utils.process_image import save_plot_as_image\n", + "\n", + "save_plot_as_image(k_values, accuracies, 'accuracy', 'k', 'images/knn_accuracy.png')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([[ 0.328055 , -0.09295718, -0.33842638],\n", + " [-0.11653052, 0.58325438, -0.13258186],\n", + " [ 0.18900546, 0.51515747, -0.76910745]]),\n", + " array([[-0.00083548, -0.00088441, 0.00035065]]),\n", + " array([[ 0.06636073, 0.91268095],\n", + " [ 0.24104642, 0.93511262],\n", + " [-0.10002242, -0.39107094]]),\n", + " array([[-0.00142651, -0.0036116 ]]),\n", + " 0.08808324100066224)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from utils.learn_once_mse import learn_once_mse\n", + "\n", + "N = 30 # number of input data\n", + "d_in = 3 # input dimension\n", + "d_h = 3 # number of neurons in the hidden layer\n", + "d_out = 2 # output dimension (number of neurons of the output layer)\n", + "\n", + "# Random initialization of the network weights and biaises\n", + "w1 = 2 * np.random.rand(d_in, d_h) - 1 # first layer weights\n", + "b1 = np.zeros((1, d_h)) # first layer biaises\n", + "w2 = 2 * np.random.rand(d_h, d_out) - 1 # second layer weights\n", + "b2 = np.zeros((1, d_out)) # second layer biaises\n", + "\n", + "data = np.random.rand(N, d_in) # create a random data\n", + "targets = np.random.rand(N, d_out) # create a random targets\n", + "\n", + "learn_once_mse(w1, b1, w2, b2, data, targets, 0.1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Binary Cross Entropy" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0., 1., 0.],\n", + " [0., 0., 1.],\n", + " [1., 0., 0.]])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from utils.one_hot import one_hot\n", + "\n", + "one_hot(np.array([1,2,0]), 3)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([[ 0.3256724 , -0.09540915, -0.33746996],\n", + " [-0.11805462, 0.58166566, -0.13193784],\n", + " [ 0.18724356, 0.51319216, -0.76834097]]),\n", + " array([[-0.00488305, -0.00512345, 0.00203958]]),\n", + " array([[ 0.06319307, 0.90284858],\n", + " [ 0.23713482, 0.92465898],\n", + " [-0.1015984 , -0.39743855]]),\n", + " array([[-0.00710872, -0.02124436]]),\n", + " 0.7295273614523309)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from utils.learn_once_cross_entropy import learn_once_cross_entropy\n", + "\n", + "learn_once_cross_entropy(w1, b1, w2, b2, data, targets, 0.1)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 48.65it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=0, loss=0.32536565848357263\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 48.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=1, loss=0.3121928702945571\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.83it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=2, loss=0.30543033970759537\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.68it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=3, loss=0.30164690368706953\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=4, loss=0.2988765995063212\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 49.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=5, loss=0.29671164791713306\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 48.40it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=6, loss=0.29488462530706594\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=7, loss=0.29324902660111213\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 48.29it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=8, loss=0.29213942600333603\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 48.94it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=9, loss=0.29089870566858717\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 48.40it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=10, loss=0.2895862699722007\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 48.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=11, loss=0.2884022627687656\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.28it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=12, loss=0.28733885125291764\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 48.49it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=13, loss=0.28634791216387434\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 48.18it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=14, loss=0.2854148514424351\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=15, loss=0.28452080362101867\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=16, loss=0.2836357456217646\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=17, loss=0.28274151613860843\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=18, loss=0.281839854415075\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 48.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=19, loss=0.28095542557069053\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=20, loss=0.2800934496802053\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.45it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=21, loss=0.27931142585321705\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.86it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=22, loss=0.27862350963341603\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.84it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=23, loss=0.2780074274940075\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.73it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=24, loss=0.27742971683164996\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=25, loss=0.2768283124909597\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=26, loss=0.2762288972410761\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.30it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=27, loss=0.27566807003953936\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=28, loss=0.27515791265861705\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.43it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=29, loss=0.2746960225210329\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.30it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=30, loss=0.2742732930281749\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.47it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=31, loss=0.2738820269527825\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.39it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=32, loss=0.2735185848652638\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=33, loss=0.27318125599929644\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=34, loss=0.27286824262978615\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=35, loss=0.2725772806445788\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.26it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=36, loss=0.27230585256038187\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.63it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=37, loss=0.27205124966222294\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.32it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=38, loss=0.2718105212711061\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=39, loss=0.2715805048412975\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.55it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=40, loss=0.2713579421724202\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.75it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=41, loss=0.2711396156588283\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.51it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=42, loss=0.2709225155028859\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.47it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=43, loss=0.2707040834217827\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.42it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=44, loss=0.27048249024427656\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.65it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=45, loss=0.2702568222700594\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.82it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=46, loss=0.27002708728127284\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.43it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=47, loss=0.2697940526835046\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.13it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=48, loss=0.2695589991244579\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.92it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=49, loss=0.26932347844910215\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.84it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=50, loss=0.2690891216931801\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=51, loss=0.26885749099705014\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=52, loss=0.26862995216471686\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.32it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=53, loss=0.2684075698601837\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.03it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=54, loss=0.26819105416268263\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.66it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=55, loss=0.26798077591671593\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.89it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=56, loss=0.26777683118236534\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.74it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=57, loss=0.26757911457047184\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.86it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=58, loss=0.2673873741424862\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 44.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=59, loss=0.26720124679735535\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.88it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=60, loss=0.2670202876161004\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.89it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=61, loss=0.26684400316153295\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.07it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=62, loss=0.2666718871083877\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.75it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=63, loss=0.2665034496901216\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=64, loss=0.26633823551333574\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=65, loss=0.2661758317738733\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.86it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=66, loss=0.2660158723596366\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=67, loss=0.2658580417813423\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 43.28it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=68, loss=0.2657020813316263\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.51it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=69, loss=0.2655477993399877\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.39it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=70, loss=0.265395083591377\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 43.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=71, loss=0.26524390709925844\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=72, loss=0.26509431618523055\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=73, loss=0.2649463967492245\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.89it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=74, loss=0.2648002256355748\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.63it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=75, loss=0.26465582150033307\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.41it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=76, loss=0.2645131100486962\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.51it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=77, loss=0.26437191201743476\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.09it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=78, loss=0.26423195246053405\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.63it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=79, loss=0.2640928834531869\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.22it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=80, loss=0.2639543124721884\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.24it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=81, loss=0.263815831592953\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.97it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=82, loss=0.26367704366914124\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.65it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=83, loss=0.2635375811525412\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.35it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=84, loss=0.26339711410007394\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.96it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=85, loss=0.263255347272479\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 45.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=86, loss=0.26311201049702554\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.61it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=87, loss=0.26296684935829534\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.74it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=88, loss=0.2628196232828335\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=89, loss=0.26267011491754183\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.72it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=90, loss=0.26251814954775665\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=91, loss=0.2623636186728697\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.63it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=92, loss=0.26220650033019977\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 43.80it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=93, loss=0.26204687100089963\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.25it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=94, loss=0.26188490805869413\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=95, loss=0.26172088492855883\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.23it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=96, loss=0.26155516191390676\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.11it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=97, loss=0.2613881745000343\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 47.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=98, loss=0.26122041931305423\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 106/106 [00:02<00:00, 46.72it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch=99, loss=0.26105243706027714\n" + ] + } + ], + "source": [ + "from utils.mlp_training import run_mlp_training\n", + "\n", + "split_factor = 0.9\n", + "d_h = 64\n", + "learning_rate = 0.1\n", + "num_epochs = 100\n", + "batch_size = 512\n", + "\n", + "data, labels = read_cifar('data/cifar-10-batches-py')\n", + "data_train, labels_train, data_test, labels_test = split_dataset(data, labels, split_factor)\n", + "losses, test_accuracy = run_mlp_training(data_train, labels_train, data_test, labels_test, d_h, learning_rate, num_epochs, batch_size)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test accuracy: 0.3631666666666667\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 1000x500 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from utils.process_image import save_plot_as_image\n", + "print('Test accuracy:', test_accuracy)\n", + "save_plot_as_image(np.arange(1, len(losses)+1), losses, 'Loss', 'Epoch', 'images/mlp_loss.png')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Bonus: comparaison / vérification avec le même modèle en utilisant la librairie Tensorflow" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/100\n", + "95/95 [==============================] - 3s 12ms/step - loss: 0.3572 - accuracy: 0.1308 - val_loss: 0.3235 - val_accuracy: 0.1633\n", + "Epoch 2/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.3224 - accuracy: 0.1646 - val_loss: 0.3208 - val_accuracy: 0.1948\n", + "Epoch 3/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.3197 - accuracy: 0.2022 - val_loss: 0.3179 - val_accuracy: 0.2209\n", + "Epoch 4/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.3167 - accuracy: 0.2277 - val_loss: 0.3149 - val_accuracy: 0.2459\n", + "Epoch 5/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.3138 - accuracy: 0.2442 - val_loss: 0.3121 - val_accuracy: 0.2604\n", + "Epoch 6/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.3111 - accuracy: 0.2553 - val_loss: 0.3096 - val_accuracy: 0.2687\n", + "Epoch 7/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.3088 - accuracy: 0.2634 - val_loss: 0.3073 - val_accuracy: 0.2761\n", + "Epoch 8/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.3066 - accuracy: 0.2700 - val_loss: 0.3053 - val_accuracy: 0.2830\n", + "Epoch 9/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.3047 - accuracy: 0.2767 - val_loss: 0.3034 - val_accuracy: 0.2874\n", + "Epoch 10/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.3028 - accuracy: 0.2827 - val_loss: 0.3015 - val_accuracy: 0.2946\n", + "Epoch 11/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.3011 - accuracy: 0.2890 - val_loss: 0.2998 - val_accuracy: 0.3002\n", + "Epoch 12/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2994 - accuracy: 0.2943 - val_loss: 0.2982 - val_accuracy: 0.3063\n", + "Epoch 13/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2979 - accuracy: 0.3009 - val_loss: 0.2967 - val_accuracy: 0.3107\n", + "Epoch 14/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2965 - accuracy: 0.3026 - val_loss: 0.2954 - val_accuracy: 0.3191\n", + "Epoch 15/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2953 - accuracy: 0.3087 - val_loss: 0.2941 - val_accuracy: 0.3176\n", + "Epoch 16/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2941 - accuracy: 0.3121 - val_loss: 0.2929 - val_accuracy: 0.3213\n", + "Epoch 17/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2931 - accuracy: 0.3150 - val_loss: 0.2919 - val_accuracy: 0.3263\n", + "Epoch 18/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2920 - accuracy: 0.3173 - val_loss: 0.2910 - val_accuracy: 0.3283\n", + "Epoch 19/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2911 - accuracy: 0.3198 - val_loss: 0.2900 - val_accuracy: 0.3278\n", + "Epoch 20/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2902 - accuracy: 0.3223 - val_loss: 0.2891 - val_accuracy: 0.3306\n", + "Epoch 21/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2894 - accuracy: 0.3255 - val_loss: 0.2882 - val_accuracy: 0.3367\n", + "Epoch 22/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2886 - accuracy: 0.3272 - val_loss: 0.2875 - val_accuracy: 0.3359\n", + "Epoch 23/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2879 - accuracy: 0.3292 - val_loss: 0.2866 - val_accuracy: 0.3404\n", + "Epoch 24/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2872 - accuracy: 0.3316 - val_loss: 0.2859 - val_accuracy: 0.3387\n", + "Epoch 25/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2865 - accuracy: 0.3333 - val_loss: 0.2853 - val_accuracy: 0.3426\n", + "Epoch 26/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2859 - accuracy: 0.3348 - val_loss: 0.2846 - val_accuracy: 0.3420\n", + "Epoch 27/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2853 - accuracy: 0.3363 - val_loss: 0.2840 - val_accuracy: 0.3478\n", + "Epoch 28/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2847 - accuracy: 0.3382 - val_loss: 0.2834 - val_accuracy: 0.3448\n", + "Epoch 29/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2842 - accuracy: 0.3391 - val_loss: 0.2829 - val_accuracy: 0.3491\n", + "Epoch 30/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2837 - accuracy: 0.3415 - val_loss: 0.2824 - val_accuracy: 0.3465\n", + "Epoch 31/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2832 - accuracy: 0.3424 - val_loss: 0.2818 - val_accuracy: 0.3494\n", + "Epoch 32/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2827 - accuracy: 0.3446 - val_loss: 0.2813 - val_accuracy: 0.3489\n", + "Epoch 33/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2822 - accuracy: 0.3452 - val_loss: 0.2808 - val_accuracy: 0.3535\n", + "Epoch 34/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2818 - accuracy: 0.3465 - val_loss: 0.2804 - val_accuracy: 0.3524\n", + "Epoch 35/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2813 - accuracy: 0.3472 - val_loss: 0.2799 - val_accuracy: 0.3519\n", + "Epoch 36/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2809 - accuracy: 0.3489 - val_loss: 0.2795 - val_accuracy: 0.3533\n", + "Epoch 37/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2805 - accuracy: 0.3501 - val_loss: 0.2791 - val_accuracy: 0.3530\n", + "Epoch 38/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2801 - accuracy: 0.3502 - val_loss: 0.2787 - val_accuracy: 0.3531\n", + "Epoch 39/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2797 - accuracy: 0.3513 - val_loss: 0.2784 - val_accuracy: 0.3569\n", + "Epoch 40/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2793 - accuracy: 0.3533 - val_loss: 0.2779 - val_accuracy: 0.3593\n", + "Epoch 41/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2790 - accuracy: 0.3531 - val_loss: 0.2776 - val_accuracy: 0.3578\n", + "Epoch 42/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2786 - accuracy: 0.3549 - val_loss: 0.2772 - val_accuracy: 0.3548\n", + "Epoch 43/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2783 - accuracy: 0.3555 - val_loss: 0.2768 - val_accuracy: 0.3580\n", + "Epoch 44/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2779 - accuracy: 0.3565 - val_loss: 0.2765 - val_accuracy: 0.3576\n", + "Epoch 45/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2776 - accuracy: 0.3575 - val_loss: 0.2762 - val_accuracy: 0.3593\n", + "Epoch 46/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2773 - accuracy: 0.3589 - val_loss: 0.2758 - val_accuracy: 0.3574\n", + "Epoch 47/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2770 - accuracy: 0.3592 - val_loss: 0.2756 - val_accuracy: 0.3598\n", + "Epoch 48/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2767 - accuracy: 0.3606 - val_loss: 0.2752 - val_accuracy: 0.3622\n", + "Epoch 49/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2764 - accuracy: 0.3623 - val_loss: 0.2750 - val_accuracy: 0.3578\n", + "Epoch 50/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2761 - accuracy: 0.3621 - val_loss: 0.2747 - val_accuracy: 0.3615\n", + "Epoch 51/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2758 - accuracy: 0.3628 - val_loss: 0.2744 - val_accuracy: 0.3620\n", + "Epoch 52/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2755 - accuracy: 0.3637 - val_loss: 0.2741 - val_accuracy: 0.3609\n", + "Epoch 53/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2752 - accuracy: 0.3647 - val_loss: 0.2739 - val_accuracy: 0.3619\n", + "Epoch 54/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2749 - accuracy: 0.3649 - val_loss: 0.2736 - val_accuracy: 0.3641\n", + "Epoch 55/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2747 - accuracy: 0.3650 - val_loss: 0.2733 - val_accuracy: 0.3652\n", + "Epoch 56/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2744 - accuracy: 0.3666 - val_loss: 0.2731 - val_accuracy: 0.3619\n", + "Epoch 57/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2742 - accuracy: 0.3658 - val_loss: 0.2728 - val_accuracy: 0.3670\n", + "Epoch 58/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2739 - accuracy: 0.3672 - val_loss: 0.2726 - val_accuracy: 0.3665\n", + "Epoch 59/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2736 - accuracy: 0.3671 - val_loss: 0.2724 - val_accuracy: 0.3656\n", + "Epoch 60/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2734 - accuracy: 0.3682 - val_loss: 0.2721 - val_accuracy: 0.3674\n", + "Epoch 61/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2732 - accuracy: 0.3694 - val_loss: 0.2719 - val_accuracy: 0.3665\n", + "Epoch 62/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2729 - accuracy: 0.3701 - val_loss: 0.2716 - val_accuracy: 0.3681\n", + "Epoch 63/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2727 - accuracy: 0.3694 - val_loss: 0.2715 - val_accuracy: 0.3656\n", + "Epoch 64/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2724 - accuracy: 0.3711 - val_loss: 0.2712 - val_accuracy: 0.3700\n", + "Epoch 65/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2722 - accuracy: 0.3710 - val_loss: 0.2710 - val_accuracy: 0.3717\n", + "Epoch 66/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2720 - accuracy: 0.3714 - val_loss: 0.2708 - val_accuracy: 0.3711\n", + "Epoch 67/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2718 - accuracy: 0.3712 - val_loss: 0.2706 - val_accuracy: 0.3706\n", + "Epoch 68/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2716 - accuracy: 0.3729 - val_loss: 0.2704 - val_accuracy: 0.3687\n", + "Epoch 69/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2714 - accuracy: 0.3725 - val_loss: 0.2703 - val_accuracy: 0.3715\n", + "Epoch 70/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2711 - accuracy: 0.3731 - val_loss: 0.2699 - val_accuracy: 0.3739\n", + "Epoch 71/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2709 - accuracy: 0.3743 - val_loss: 0.2699 - val_accuracy: 0.3719\n", + "Epoch 72/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2707 - accuracy: 0.3743 - val_loss: 0.2696 - val_accuracy: 0.3722\n", + "Epoch 73/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2705 - accuracy: 0.3745 - val_loss: 0.2694 - val_accuracy: 0.3733\n", + "Epoch 74/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2703 - accuracy: 0.3750 - val_loss: 0.2693 - val_accuracy: 0.3739\n", + "Epoch 75/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2701 - accuracy: 0.3766 - val_loss: 0.2690 - val_accuracy: 0.3739\n", + "Epoch 76/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2699 - accuracy: 0.3772 - val_loss: 0.2689 - val_accuracy: 0.3731\n", + "Epoch 77/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2697 - accuracy: 0.3774 - val_loss: 0.2688 - val_accuracy: 0.3743\n", + "Epoch 78/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2695 - accuracy: 0.3771 - val_loss: 0.2686 - val_accuracy: 0.3743\n", + "Epoch 79/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2693 - accuracy: 0.3772 - val_loss: 0.2684 - val_accuracy: 0.3761\n", + "Epoch 80/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2692 - accuracy: 0.3785 - val_loss: 0.2682 - val_accuracy: 0.3752\n", + "Epoch 81/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2690 - accuracy: 0.3792 - val_loss: 0.2681 - val_accuracy: 0.3748\n", + "Epoch 82/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2688 - accuracy: 0.3798 - val_loss: 0.2678 - val_accuracy: 0.3783\n", + "Epoch 83/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2686 - accuracy: 0.3804 - val_loss: 0.2677 - val_accuracy: 0.3774\n", + "Epoch 84/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2684 - accuracy: 0.3801 - val_loss: 0.2675 - val_accuracy: 0.3776\n", + "Epoch 85/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2683 - accuracy: 0.3810 - val_loss: 0.2674 - val_accuracy: 0.3783\n", + "Epoch 86/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2681 - accuracy: 0.3808 - val_loss: 0.2672 - val_accuracy: 0.3772\n", + "Epoch 87/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2679 - accuracy: 0.3821 - val_loss: 0.2671 - val_accuracy: 0.3774\n", + "Epoch 88/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2678 - accuracy: 0.3817 - val_loss: 0.2670 - val_accuracy: 0.3798\n", + "Epoch 89/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2676 - accuracy: 0.3830 - val_loss: 0.2668 - val_accuracy: 0.3789\n", + "Epoch 90/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2674 - accuracy: 0.3829 - val_loss: 0.2666 - val_accuracy: 0.3819\n", + "Epoch 91/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2673 - accuracy: 0.3840 - val_loss: 0.2665 - val_accuracy: 0.3822\n", + "Epoch 92/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2671 - accuracy: 0.3848 - val_loss: 0.2664 - val_accuracy: 0.3813\n", + "Epoch 93/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2669 - accuracy: 0.3848 - val_loss: 0.2662 - val_accuracy: 0.3789\n", + "Epoch 94/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2668 - accuracy: 0.3856 - val_loss: 0.2660 - val_accuracy: 0.3824\n", + "Epoch 95/100\n", + "95/95 [==============================] - 1s 8ms/step - loss: 0.2666 - accuracy: 0.3864 - val_loss: 0.2659 - val_accuracy: 0.3841\n", + "Epoch 96/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2665 - accuracy: 0.3864 - val_loss: 0.2658 - val_accuracy: 0.3839\n", + "Epoch 97/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2663 - accuracy: 0.3868 - val_loss: 0.2656 - val_accuracy: 0.3819\n", + "Epoch 98/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2662 - accuracy: 0.3868 - val_loss: 0.2655 - val_accuracy: 0.3819\n", + "Epoch 99/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2660 - accuracy: 0.3884 - val_loss: 0.2654 - val_accuracy: 0.3815\n", + "Epoch 100/100\n", + "95/95 [==============================] - 1s 9ms/step - loss: 0.2658 - accuracy: 0.3877 - val_loss: 0.2652 - val_accuracy: 0.3830\n", + "188/188 [==============================] - 1s 3ms/step - loss: 0.2656 - accuracy: 0.4020\n", + "test_accuracy=0.4020000100135803\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 1000x500 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import tensorflow as tf\n", + "from utils.read_cifar import read_cifar\n", + "from utils.split_dataset import split_dataset\n", + "\n", + "split_factor = 0.9\n", + "d_h = 64\n", + "learning_rate = 0.1\n", + "num_epochs = 100\n", + "batch_size = 512\n", + "\n", + "data, labels = read_cifar('data/cifar-10-batches-py')\n", + "data_train, labels_train, data_test, labels_test = split_dataset(data, labels, split_factor)\n", + "labels_train = tf.keras.utils.to_categorical(labels_train)\n", + "labels_test = tf.keras.utils.to_categorical(labels_test)\n", + "\n", + "model = tf.keras.models.Sequential([\n", + " tf.keras.layers.Dense(d_h, activation='sigmoid'),\n", + " tf.keras.layers.Dense(10, activation='sigmoid')\n", + "])\n", + "model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=learning_rate),\n", + " loss=tf.keras.losses.BinaryCrossentropy(),\n", + " metrics=['accuracy'])\n", + "history = model.fit(data_train, labels_train, epochs=num_epochs, batch_size=batch_size, validation_split=0.1)\n", + "test_loss, test_accuracy = model.evaluate(data_test, labels_test)\n", + "\n", + "print(f'test_accuracy={test_accuracy}')\n", + "loss = history.history['loss']\n", + "epochs = np.arange(1, len(loss)+1)\n", + "save_plot_as_image(epochs, loss, 'Loss', 'Epoch', 'images/mlp_loss_tf.png')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(6000, 10)\n", + "[7 9 4 ... 3 9 0]\n", + "188/188 [==============================] - 0s 2ms/step\n" + ] + }, + { + "data": { + "text/plain": [ + "<AxesSubplot: >" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "<Figure size 640x480 with 2 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import seaborn as sns\n", + "\n", + "print(labels_test.shape)\n", + "print(labels_test.argmax(axis=1))\n", + "cm = tf.math.confusion_matrix(labels_test.argmax(axis=1), model.predict(data_test).argmax(axis=1))\n", + "sns.heatmap(cm, annot=True, fmt='d')" + ] + } + ], + "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.10.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/images/knn_accuracy.png b/images/knn_accuracy.png new file mode 100644 index 0000000000000000000000000000000000000000..d0572c403d00ffafb7487486c3331ef705c5876e Binary files /dev/null and b/images/knn_accuracy.png differ diff --git a/images/mlp_loss.png b/images/mlp_loss.png new file mode 100644 index 0000000000000000000000000000000000000000..1a9f7dcd4d8b63c61c21e45d46d4d9cc82c4d835 Binary files /dev/null and b/images/mlp_loss.png differ diff --git a/images/mlp_loss_tf.png b/images/mlp_loss_tf.png new file mode 100644 index 0000000000000000000000000000000000000000..5a0165fd98fd248e70c795ffac2edfb979b19830 Binary files /dev/null and b/images/mlp_loss_tf.png differ diff --git a/utils/binary_cross_entropy.py b/utils/binary_cross_entropy.py new file mode 100644 index 0000000000000000000000000000000000000000..56223839f4edeafb71c858e51c5f2ff058675d31 --- /dev/null +++ b/utils/binary_cross_entropy.py @@ -0,0 +1,8 @@ +import numpy as np + +def binary_cross_entropy(predictions: np.ndarray, targets: np.ndarray): + # compute the binary cross-entropy loss (1e-7 is added to avoid log(0)) + predictions = np.clip(predictions, 1e-7, 1 - 1e-7) + term_0 = (1-targets) * np.log(1-predictions) + term_1 = targets * np.log(predictions) + return -np.mean(term_0+term_1) \ No newline at end of file diff --git a/utils/distance_matrix.py b/utils/distance_matrix.py new file mode 100644 index 0000000000000000000000000000000000000000..7895932a8f4aea2aa925b425ecfa13907bf86b47 --- /dev/null +++ b/utils/distance_matrix.py @@ -0,0 +1,8 @@ +import numpy as np + +def distance_matrix(X: np.ndarray, Y: np.ndarray): + # compute the distance matrix between two sets of samples + x2 = np.sum(X**2, axis=1, keepdims=True) + y2 = np.sum(Y**2, axis=1, keepdims=True) + xy = X.dot(Y.T) + return np.sqrt(x2 - 2 * xy + y2.T) \ No newline at end of file diff --git a/utils/evaluate_knn.py b/utils/evaluate_knn.py new file mode 100644 index 0000000000000000000000000000000000000000..20960453787d60ce7cf86cc2ffc47c559aa55d5d --- /dev/null +++ b/utils/evaluate_knn.py @@ -0,0 +1,10 @@ +from utils.knn_predict import knn_predict +from utils.distance_matrix import distance_matrix +import numpy as np + +def evaluate_knn(data_train, labels_train, data_test, labels_test, k): + # compute the accuracy of the kNN model + dists = distance_matrix(data_test, data_train) + y_pred = knn_predict(dists, labels_train, k) + accuracy = np.mean(y_pred == labels_test) + return accuracy \ No newline at end of file diff --git a/utils/forward_pass.py b/utils/forward_pass.py new file mode 100644 index 0000000000000000000000000000000000000000..b5dad28034570f4604adb00875e96f0789720eef --- /dev/null +++ b/utils/forward_pass.py @@ -0,0 +1,10 @@ +from utils.sigmoid import sigmoid +import numpy as np + +def forward_pass(w1, b1, w2, b2, data): + # compute the forward pass of the MLP with sigmoid activations + z1 = np.matmul(data, w1) + b1 + a1 = sigmoid(z1) + z2 = np.matmul(a1, w2) + b2 + a2 = sigmoid(z2) + return a1, a2 \ No newline at end of file diff --git a/utils/knn_predict.py b/utils/knn_predict.py new file mode 100644 index 0000000000000000000000000000000000000000..5e6ca7c90fd2717b0cb9a89bae4b12d621db6a5d --- /dev/null +++ b/utils/knn_predict.py @@ -0,0 +1,11 @@ +import numpy as np + +def knn_predict(dists: np.ndarray, labels_train, k): + # predict labels based on k nearest neighbors + n = dists.shape[0] + y_pred = np.zeros(n, dtype=np.int64) + for i in range(n): + closest_y = [] + closest_y = labels_train[np.argsort(dists[i])[:k]] + y_pred[i] = np.argmax(np.bincount(closest_y)) + return y_pred \ No newline at end of file diff --git a/utils/learn_once_cross_entropy.py b/utils/learn_once_cross_entropy.py new file mode 100644 index 0000000000000000000000000000000000000000..8ce9c48714737c094cbb8eaf8e0276d6bf4f14c1 --- /dev/null +++ b/utils/learn_once_cross_entropy.py @@ -0,0 +1,25 @@ +import numpy as np +from utils.forward_pass import forward_pass +from utils.binary_cross_entropy import binary_cross_entropy + +def adjust_weights_binary_cross_entropy(a1, a2, w1, b1, w2, b2, data, targets, learning_rate): + batch_size = data.shape[0] + dCdZ2 = a2 - targets + dCdW2 = np.matmul(a1.T, dCdZ2) / batch_size + dCdB2 = np.sum(dCdZ2, axis=0, keepdims=True) / batch_size + dCdA1 = np.matmul(dCdZ2, w2.T) + dCdZ1 = dCdA1 * a1 * (1 - a1) + dCdW1 = np.matmul(data.T, dCdZ1) / batch_size + dCdB1 = np.sum(dCdZ1, axis=0, keepdims=True) / batch_size + + w2 -= learning_rate * dCdW2 + w1 -= learning_rate * dCdW1 + b1 -= learning_rate * dCdB1 + b2 -= learning_rate * dCdB2 + return w1, b1, w2, b2 + +def learn_once_cross_entropy(w1,b1,w2,b2,data,targets,learning_rate): + a1, a2 = forward_pass(w1, b1, w2, b2, data) + loss = binary_cross_entropy(a2, targets) + w1, b1, w2, b2 = adjust_weights_binary_cross_entropy(a1, a2, w1, b1, w2, b2, data, targets, learning_rate) + return w1, b1, w2, b2, loss \ No newline at end of file diff --git a/utils/learn_once_mse.py b/utils/learn_once_mse.py new file mode 100644 index 0000000000000000000000000000000000000000..71d33dc0b2a1d48c1fc98fc23b88da8d741422dd --- /dev/null +++ b/utils/learn_once_mse.py @@ -0,0 +1,27 @@ +import numpy as np +from utils.forward_pass import forward_pass + +def adjust_weights_mse(a1, a2, w1, b1, w2, b2, data, targets, learning_rate): + batch_size = data.shape[0] + N_out = targets.shape[1] + dCdA2 = 2 * (a2 - targets) / N_out + dCdZ2 = dCdA2 * a2 * (1 - a2) + dCdW2 = np.matmul(a1.T, dCdZ2) / batch_size + dCdB2 = np.sum(dCdZ2, axis=0, keepdims=True) / batch_size + dCdA1 = np.matmul(dCdZ2, w2.T) + dCdZ1 = dCdA1 * a1 * (1 - a1) + dCdW1 = np.matmul(data.T, dCdZ1) / batch_size + dCdB1 = np.sum(dCdZ1, axis=0, keepdims=True) / batch_size + + w2 -= learning_rate * dCdW2 + w1 -= learning_rate * dCdW1 + b1 -= learning_rate * dCdB1 + b2 -= learning_rate * dCdB2 + return w1, b1, w2, b2 + + +def learn_once_mse(w1: np.ndarray, b1: np.ndarray, w2: np.ndarray, b2: np.ndarray, data: np.ndarray, targets: np.ndarray, learning_rate: float): + a1, a2 = forward_pass(w1, b1, w2, b2, data) + loss = np.mean(np.square(a2 - targets)) + w1, b1, w2, b2 = adjust_weights_mse(a1, a2, w1, b1, w2, b2, data, targets, learning_rate) + return w1, b1, w2, b2, loss \ No newline at end of file diff --git a/utils/mlp_training.py b/utils/mlp_training.py new file mode 100644 index 0000000000000000000000000000000000000000..8d3da4a6a6424ed9264b2a717143c107118263e8 --- /dev/null +++ b/utils/mlp_training.py @@ -0,0 +1,42 @@ +import tqdm +import numpy as np +from utils.forward_pass import forward_pass +from utils.one_hot import one_hot +from utils.learn_once_cross_entropy import learn_once_cross_entropy + + +def train_mlp(w1, b1, w2, b2, data_train, labels_train, learning_rate, num_epochs, batch_size, n_classes): + # train the MLP for num_epochs epochs, using batches of size batch_size + losses = [] + for epoch in range(num_epochs): + for i in tqdm.tqdm(range(0, data_train.shape[0], batch_size)): + data = data_train[i:i+batch_size] + targets = one_hot(labels_train[i:i+batch_size], n_classes) + w1, b1, w2, b2, loss = learn_once_cross_entropy(w1, b1, w2, b2, data, targets, learning_rate) + losses.append(loss) + print(f'epoch={epoch}, loss={loss}') + return losses, w1, b1, w2, b2 + +def test_mlp(w1, b1, w2, b2, data_test, labels_test): + # test the MLP on data_test, and return the accuracy + _, a2 = forward_pass(w1, b1, w2, b2, data_test) + predictions = np.argmax(a2, axis=1) + test_accuracy = np.mean(predictions == labels_test) + return test_accuracy + +def initialize_mlp(d_in, d_h, d_out): + # initialize the weights and biases of the MLP + w1 = 2 * np.random.rand(d_in, d_h) - 1 + b1 = np.zeros((1, d_h)) + w2 = 2 * np.random.rand(d_h, d_out) - 1 + b2 = np.zeros((1, d_out)) + return w1, b1, w2, b2 + +def run_mlp_training(data_train, labels_train, data_test, labels_test, d_h, learning_rate, num_epochs, batch_size, n_classes = 10): + # run the training and testing of the MLP on data_train and data_test + d_in = data_train.shape[1] + d_out = np.max(labels_train) + 1 + w1, b1, w2, b2 = initialize_mlp(d_in, d_h, d_out) + losses, w1, b1, w2, b2 = train_mlp(w1, b1, w2, b2, data_train, labels_train, learning_rate, num_epochs, batch_size, n_classes) + test_accuracy = test_mlp(w1, b1, w2, b2, data_test, labels_test) + return losses, test_accuracy \ No newline at end of file diff --git a/utils/one_hot.py b/utils/one_hot.py new file mode 100644 index 0000000000000000000000000000000000000000..112ef8539637f0ecee86fe2d3beff29aa101e745 --- /dev/null +++ b/utils/one_hot.py @@ -0,0 +1,8 @@ +import numpy as np + +def one_hot(labels: np.ndarray, n_classes: int): + # convert an array of labels to a one-hot representation + n = labels.shape[0] + one_hot_labels = np.zeros((n, n_classes)) + one_hot_labels[np.arange(n), labels] = 1 + return one_hot_labels \ No newline at end of file diff --git a/utils/process_image.py b/utils/process_image.py new file mode 100644 index 0000000000000000000000000000000000000000..c5537334222589f53aa51c9ae702be8c1751de3d --- /dev/null +++ b/utils/process_image.py @@ -0,0 +1,17 @@ +import matplotlib.pyplot as plt +def plot_image_with_label(img, label): + # plot image with label + plt.imshow(img) + plt.title(label) + plt.show() + +def save_plot_as_image(X, Y, y_label, x_label, save_path): + # plot and save image as png + plt.figure(figsize=(10,5)) + plt.plot(X, Y) + plt.ylabel(y_label) + plt.xlabel(x_label) + plt.savefig(save_path) + plt.show() + plt.close() + \ No newline at end of file diff --git a/utils/read_cifar.py b/utils/read_cifar.py new file mode 100644 index 0000000000000000000000000000000000000000..dff0e6c15b0b7cf38e0d992bd185f55ff32faecb --- /dev/null +++ b/utils/read_cifar.py @@ -0,0 +1,24 @@ +import glob +import numpy as np +import pickle + +def read_cifar_batch(batch_path): + # read a batch of cifar data + with open(batch_path, 'rb') as f: + batch = pickle.load(f, encoding='bytes') + data=np.array(batch[b'data'],dtype=np.float32)/255.0 + labels=np.array(batch[b'labels'],dtype=np.int64) + + return data, labels + +def read_cifar(directory): + # read all cifar data in a directory + files = glob.glob(f'{directory}/*_batch*') + data = np.empty((0, 3072), dtype=np.float32) + labels = np.empty((0), dtype=np.int64) + for file in files: + batch_data, batch_labels = read_cifar_batch(file) + data = np.vstack((data, batch_data)) + labels = np.hstack((labels, batch_labels)) + #print(data.shape, labels.shape) + return data, labels diff --git a/utils/sigmoid.py b/utils/sigmoid.py new file mode 100644 index 0000000000000000000000000000000000000000..0aae9d16c3b6a63dbd3415305e0bb37bf20c29cc --- /dev/null +++ b/utils/sigmoid.py @@ -0,0 +1,3 @@ +import numpy as np +def sigmoid(x): + return 1 / (1 + np.exp(-x)) \ No newline at end of file diff --git a/utils/split_dataset.py b/utils/split_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..497798de0632d43555625d3be6e9cac2d1f9589f --- /dev/null +++ b/utils/split_dataset.py @@ -0,0 +1,17 @@ +import numpy as np + +def split_dataset(data, labels, split: float)-> (np.ndarray, np.ndarray, np.ndarray, np.ndarray): + # split dataset into train and test + assert data.shape[0] == labels.shape[0] + # shuffle data + indices = np.arange(data.shape[0]) + np.random.shuffle(indices) + data = data[indices] + labels = labels[indices] + # split data + split_index = int(data.shape[0] * split) + train_data = data[:split_index] + train_labels = labels[:split_index] + test_data = data[split_index:] + test_labels = labels[split_index:] + return train_data, train_labels, test_data, test_labels \ No newline at end of file