{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# 400 - gradient et backward\n", "\n", "On peut avoir un r\u00e9seau de neurones comme un gros sandwitch avec de multiples couches de neurones dans lequel on a envie d'ins\u00e9rer sa propre couche mais pour cela il faut interf\u00e9rer avec le gradient. J'ai repris le tutoriel [pytorch: defining new autograd functions](https://pytorch.org/tutorials/beginner/examples_autograd/two_layer_net_custom_function.html). L'exemple suivant [Extending Torch](https://pytorch.org/docs/master/notes/extending.html). J'aimais bien l'API de la version 0.4 mais je ne la trouve plus sur internet. Elle laissait sans doute un peu trop de libert\u00e9."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["torch 1.5.0+cpu\n"]}], "source": ["import time\n", "import numpy as np\n", "import pandas as pd\n", "import torch\n", "import torch.nn as nn\n", "import torch.nn.functional as F\n", "import torch.optim as optim\n", "from torch.autograd import Variable\n", "print(\"torch\", torch.__version__)\n", "from torchvision import datasets, transforms\n", "from tqdm import tqdm"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": ["BATCH_SIZE = 64\n", "TEST_BATCH_SIZE = 64\n", "DATA_DIR = 'data/'\n", "USE_CUDA = False # switch to True if you have GPU\n", "N_EPOCHS = 2 # 5"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", ""], "text/plain": ["