{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import torch\n", "import torchvision\n", "import torchvision.transforms as transforms\n", "import matplotlib.pyplot as plt\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 133, "metadata": {}, "outputs": [], "source": [ "import torch.nn as nn\n", "import torch.nn.functional as F\n", "import torch.optim as optim\n", "from torch.autograd import Variable" ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [], "source": [ "plt.style.use('ggplot')\n", "plt.rcParams.update({'font.size': 14})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Download dataset using torchvision" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [], "source": [ "transform = transforms.Compose(\n", " [transforms.ToTensor()])\n", " #transforms.Normalize((0.5), (0.5))])\n", "\n", "trainset = torchvision.datasets.FashionMNIST(root='./df', train=True,\n", " transform = transform, download=True)\n", "trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,\n", " shuffle=True, num_workers=2)\n", "\n", "testset = torchvision.datasets.FashionMNIST(root='./df', train=False,\n", " transform = transform, download=True)\n", "\n", "testloader = torch.utils.data.DataLoader(testset, batch_size=4,\n", " shuffle=False, num_workers=2)\n", "\n", "classes = ('T-Shirt', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt',\n", " 'Sneaker', 'Bag', 'Ankle Boot')" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Dress Ankle Boot Dress Shirt\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def imshow(img):\n", " #img = img / 2 + 0.5 # unnormalize\n", " npimg = img.numpy()\n", " plt.figure(figsize=(10, 10))\n", " plt.imshow(np.transpose(npimg, (1, 2, 0)))\n", "\n", "\n", "# get some random training images\n", "dataiter = iter(trainloader)\n", "images, labels = dataiter.next()\n", "#print(images.size())\n", "# show images\n", "imshow(torchvision.utils.make_grid(images))\n", "# print labels\n", "print(' '.join('%17s' % classes[labels[j]] for j in range(4)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make batch size bigger" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "BATCH_SIZE = 100\n", "NUM_EPOCHS = 9" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "trainloader = torch.utils.data.DataLoader(trainset, batch_size=BATCH_SIZE,\n", " shuffle=True, num_workers=2)\n", "testloader = torch.utils.data.DataLoader(testset, batch_size=BATCH_SIZE,\n", " shuffle=False, num_workers=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define a Convolution Neural Network" ] }, { "cell_type": "code", "execution_count": 146, "metadata": {}, "outputs": [], "source": [ "class Net(nn.Module):\n", " def __init__(self):\n", " super(Net, self).__init__()\n", " self.layer1 = nn.Sequential(\n", " nn.Conv2d(1, 16, kernel_size=5, padding=2),\n", " nn.ReLU(),\n", " nn.MaxPool2d(2),\n", " nn.Dropout(p=0.5))\n", " \n", " self.layer2 = nn.Sequential(\n", " nn.Conv2d(16, 32, kernel_size=5, padding=2),\n", " nn.ReLU(),\n", " nn.MaxPool2d(2),\n", " nn.Dropout(p=0.5))\n", " self.fc = nn.Linear(7*7*32, 10)\n", "\n", " def forward(self, x):\n", " out = self.layer1(x)\n", " out = self.layer2(out)\n", " out = out.view(out.size(0), -1)\n", " out = self.fc(out)\n", " return out" ] }, { "cell_type": "code", "execution_count": 147, "metadata": {}, "outputs": [], "source": [ "net = Net()\n", "#net.load_state_dict(torch.load('fashion_model_rms_prop.pt'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define a Loss function and optimizer" ] }, { "cell_type": "code", "execution_count": 148, "metadata": {}, "outputs": [], "source": [ "learning_rate = 0.001\n", "\n", "criterion = nn.CrossEntropyLoss()\n", "\n", "optimizer = optim.Adam(net.parameters(), lr=learning_rate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train the network" ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch : 0; Iteration : 299; Accuracy : 0.809; loss : 190.984\n", "Epoch : 0; Iteration : 599; Accuracy : 0.843; loss : 159.028\n", "Epoch : 1; Iteration : 299; Accuracy : 0.857; loss : 145.160\n", "Epoch : 1; Iteration : 599; Accuracy : 0.862; loss : 137.156\n", "Epoch : 2; Iteration : 299; Accuracy : 0.867; loss : 130.471\n", "Epoch : 2; Iteration : 599; Accuracy : 0.869; loss : 126.315\n", "Epoch : 3; Iteration : 299; Accuracy : 0.870; loss : 120.502\n", "Epoch : 3; Iteration : 599; Accuracy : 0.875; loss : 120.120\n", "Epoch : 4; Iteration : 299; Accuracy : 0.878; loss : 114.817\n", "Epoch : 4; Iteration : 599; Accuracy : 0.881; loss : 113.273\n", "Epoch : 5; Iteration : 299; Accuracy : 0.883; loss : 109.816\n", "Epoch : 5; Iteration : 599; Accuracy : 0.887; loss : 109.622\n", "Epoch : 6; Iteration : 299; Accuracy : 0.887; loss : 108.623\n", "Epoch : 6; Iteration : 599; Accuracy : 0.887; loss : 107.100\n", "Epoch : 7; Iteration : 299; Accuracy : 0.891; loss : 104.088\n", "Epoch : 7; Iteration : 599; Accuracy : 0.893; loss : 104.766\n", "Epoch : 8; Iteration : 299; Accuracy : 0.895; loss : 100.816\n", "Epoch : 8; Iteration : 599; Accuracy : 0.895; loss : 103.704\n", "Finished Training\n" ] } ], "source": [ "loss_list = []\n", "running_loss = 0.0\n", "\n", "for epoch in range(NUM_EPOCHS): # loop over the dataset multiple times\n", "\n", " for i, data in enumerate(trainloader, 0):\n", " \n", " # get the inputs\n", " inputs, labels = data\n", "\n", " # zero the parameter gradients\n", " optimizer.zero_grad()\n", "\n", " # forward + backward + optimize\n", " outputs = net(inputs)\n", " loss = criterion(outputs, labels)\n", " loss.backward()\n", " optimizer.step()\n", "\n", " running_loss += loss.item()\n", "# print statistics\n", " if i % 300 == 299 :\n", " loss_list.append(running_loss)\n", " \n", " net.eval()\n", " correct = 0\n", " total = 0\n", " # Iterate through test dataset\n", " with torch.no_grad():\n", " for data in testloader:\n", " images, labels = data\n", " outputs = net(images)\n", " _, predicted = torch.max(outputs.data, 1)\n", " total += labels.size(0)\n", " correct += (predicted == labels).sum().item()\n", "\n", " print('Epoch : %d; Iteration : %d; Accuracy : %.3f; loss : %.3f' \n", " %(epoch, i, correct/total, running_loss))\n", " net.train()\n", " running_loss = 0\n", " \n", "print('Finished Training')" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [], "source": [ "torch.save(net.state_dict(), 'fashion_model_rms_prop.pt')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## График зависимости ошибки от номера эпохи" ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [], "source": [ "epoch_num = np.arange(0.5, 9.5, 0.5)" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [ { "data": { "image/png": "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7733SElJoU+fPpw7d46tW7fSvn174uPjf/B7eezYMV544QWcTieDBw+mW7duFBQUsHbtWhISErjhhhsAvO/TP//5T2w2GwMHDqRt27be/olIw6CROxGpd8uXL6eyspKXX37ZOwo2aNAg3nzzTVavXs2QIUMICwvzrl9cXMyrr77qXZaWlsacOXNYt24dDzzwAACLFy/GarUyd+5cb5Dr3bs3Tz/9NMuWLeNnP/sZAEuXLuXcuXPMnTuXG2+80fs7xowZg8fj8akzIiKCF154AZPJBIDH42HDhg3Y7XasVusVX2erVq2YPHmy93ZZWRlbt27loYce+sHvWY3WrVvz5JNPAjBgwACmTJnC0qVLGTt2LCNHjvS+7kmTJrFlyxbS0tJ8Hl+b93LhwoXExMQwb948b+AbMmQIc+fO5U9/+hN33nmn9z0BCAkJYdasWVgslqt+XSJSfzTnTkTqlcfj4W9/+xtdu3YFoKSkxHvp1KkTTqeTr7/+2ucx5qWMzQAABBZJREFUffr08Ql7aWlppKSksHfvXqB6M+uRI0fo27evN9gBtGzZkltvvZXPP/8ct9uN2+1m165ddOnSxSfY1bgwsADcddddPsvat2+P2+3mzJkztXqtAwYM8Lndrl07SktLsdvttXr85aSnp3uvm81mWrdujcfjoX///t7lYWFhJCYmcvr06Usef6X3sqysjP3793P77bdTXl7u05/OnTtz7tw5Tpw4cUlNCnYiDZdG7kSkXpWUlGCz2di6dStbt279znUudPF8sJplBw4cAPCGrcTExEvWS0pK4tNPP/U+p8PhICUlpVa1xsXF+dyuCUU2m+2qHh8eHu59fG1G/mrznFarFYvFQnR09CXLi4uLL3n8ld7LkydP4vF4yMrKIisr67I1FBcX+7zXCQkJP/h1iMj1o3AnIvWqZtNn7969ueuuuy67Tm3DV30zmy+/MePizbdX+/iLRwpruN3uH/Sc11rn5X73sGHD6NKly2XXubg/NZtuRaRhUrgTkXoVGRlJaGioz44FV3LxZsCaZc2bNwfw/szPz79kvfz8fIKDg71z+0JDQzl69OjVll+nvmsksLabfa/Gld7LmlE4i8VS6/6ISMOmOXciUq/MZjM9evTw7o16sYs3yQJs377dJwAdOHCAo0ePeuftxcTE8KMf/Yi//vWvlJWVedc7efIke/bsoUuXLpjNZsxmM7fddhufffbZJfP64OpGuq6F1WolIiKCL774wmf5xo0b6+13Xum9jIqK4pZbbmHz5s2cO3fuksdfrj8i0rBp5E5E6t2DDz7IwYMHeeGFF0hPTyclJYWysjLvoTWWLl3qs35UVBQzZ86kf//+3sOHxMTEcM8993jXefjhh3nppZd4/vnnSU9Pp7Kyko0bNxIYGOjdCxRg3Lhx7Nu3j1mzZjFw4ECSk5MpKipi165dPPPMM95Dh1wv6enprFmzhjfffJPWrVvzxRdfXHZ0ra7U5r2cOHEiM2fO5JlnniE9PZ2EhARKSkr4+uuvOXbsGK+99lq91ScidU/hTkTqXVRUFL/61a9YuXIlu3fv5i9/+Qvh4eEkJyfz8MMPX7L+8OHDyc/P5/333/c58O6Fe8ampaXxwgsvkJmZSWZmJhaLhXbt2vHggw/6TP6PiYnhV7/6FStWrGDnzp3YbDZiYmLo1KnTFQ9OXB9GjRpFSUkJf/vb3/jkk0/o3LkzM2bM4LHHHquX31eb9zIxMZFf//rXrFy5ku3bt1NSUkJkZCStWrVi7Nix9VKXiNQfk+d6b5cQEfkONWeomD59Or179/Z3OSIijZLm3ImIiIgYiMKdiIiIiIEo3ImIiIgYiObciYiIiBiIRu5EREREDEThTkRERMRAFO5EREREDEThTkRERMRAFO5EREREDOT/AZJXrR5DwBWbAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10,7))\n", "plt.plot(epoch_num, loss_list, 'b', label='mean accuracy')\n", "plt.title('Error analysis')\n", "plt.ylabel('Cross Entropy Loss')\n", "plt.xlabel('epoch number')\n", "plt.legend(loc='best')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Кривая обучения в зависимости от шума" ] }, { "cell_type": "code", "execution_count": 134, "metadata": {}, "outputs": [], "source": [ "def noisy_data(ins, stddev, is_training = True, mean = 0):\n", " if is_training:\n", " noise = Variable(ins.data.new(ins.size()).normal_(mean, stddev))\n", " return ins + noise\n", " return ins" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train the network with noisy data" ] }, { "cell_type": "code", "execution_count": 149, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch : 0; Iteration : 299; Accuracy : 0.759; loss : 270.705\n", "Epoch : 0; Iteration : 599; Accuracy : 0.796; loss : 190.654\n", "Epoch : 1; Iteration : 299; Accuracy : 0.816; loss : 172.115\n", "Epoch : 1; Iteration : 599; Accuracy : 0.818; loss : 166.400\n", "Epoch : 2; Iteration : 299; Accuracy : 0.833; loss : 160.694\n", "Epoch : 2; Iteration : 599; Accuracy : 0.845; loss : 154.533\n", "Epoch : 3; Iteration : 299; Accuracy : 0.846; loss : 153.999\n", "Epoch : 3; Iteration : 599; Accuracy : 0.849; loss : 152.757\n", "Epoch : 4; Iteration : 299; Accuracy : 0.854; loss : 150.647\n", "Epoch : 4; Iteration : 599; Accuracy : 0.853; loss : 148.876\n", "Epoch : 5; Iteration : 299; Accuracy : 0.852; loss : 147.963\n", "Epoch : 5; Iteration : 599; Accuracy : 0.859; loss : 144.970\n", "Epoch : 6; Iteration : 299; Accuracy : 0.852; loss : 143.940\n", "Epoch : 6; Iteration : 599; Accuracy : 0.859; loss : 145.752\n", "Epoch : 7; Iteration : 299; Accuracy : 0.863; loss : 143.221\n", "Epoch : 7; Iteration : 599; Accuracy : 0.851; loss : 143.872\n", "Epoch : 8; Iteration : 299; Accuracy : 0.857; loss : 142.897\n", "Epoch : 8; Iteration : 599; Accuracy : 0.859; loss : 141.965\n", "Finished Training\n" ] } ], "source": [ "loss_list_noisy = []\n", "running_loss = 0.0\n", "\n", "for epoch in range(NUM_EPOCHS): # loop over the dataset multiple times\n", "\n", " for i, data in enumerate(trainloader, 0):\n", " \n", " # get the inputs\n", " inputs, labels = data\n", " noisy_inputs = noisy_data(inputs, stddev=0.3)\n", " # zero the parameter gradients\n", " optimizer.zero_grad()\n", "\n", " # forward + backward + optimize\n", " outputs = net(noisy_inputs)\n", " loss = criterion(outputs, labels)\n", " loss.backward()\n", " optimizer.step()\n", "\n", " running_loss += loss.item()\n", "# print statistics\n", " if i % 300 == 299 :\n", " loss_list_noisy.append(running_loss)\n", " \n", " net.eval()\n", " correct = 0\n", " total = 0\n", " # Iterate through test dataset\n", " with torch.no_grad():\n", " for data in testloader:\n", " images, labels = data\n", " outputs = net(images)\n", " _, predicted = torch.max(outputs.data, 1)\n", " total += labels.size(0)\n", " correct += (predicted == labels).sum().item()\n", "\n", " print('Epoch : %d; Iteration : %d; Accuracy : %.3f; loss : %.3f' \n", " %(epoch, i, correct/total, running_loss))\n", " net.train()\n", " running_loss = 0\n", " \n", "print('Finished Training')" ] }, { "cell_type": "code", "execution_count": 151, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10,7))\n", "plt.plot(epoch_num, loss_list, 'b', label='with noise(std = 0.5)')\n", "plt.plot(epoch_num, loss_list_noisy, 'r', label='without noise')\n", "plt.title('Error analysis')\n", "plt.ylabel('Cross Entropy Loss')\n", "plt.xlabel('epoch number')\n", "plt.legend(loc='best')\n", "plt.show()" ] } ], "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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }