├── Denoising_AE_MNIST.ipynb ├── README.md └── img ├── autoencoder.png ├── demo.png ├── denoising ae.png ├── speckle noise.jpg ├── with noise.jpg └── without noise.jpg /Denoising_AE_MNIST.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Denoising AE - MNIST", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "authorship_tag": "ABX9TyMIDL0b9g2jDJVazInnb/nE", 10 | "include_colab_link": true 11 | }, 12 | "kernelspec": { 13 | "name": "python3", 14 | "display_name": "Python 3" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "markdown", 20 | "metadata": { 21 | "id": "view-in-github", 22 | "colab_type": "text" 23 | }, 24 | "source": [ 25 | "\"Open" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "metadata": { 31 | "id": "NMmo82PUNWE1", 32 | "colab_type": "code", 33 | "colab": {} 34 | }, 35 | "source": [ 36 | "# Importing packages that will be necessary for the project\n", 37 | "import numpy as np\n", 38 | "from keras.datasets import mnist\n", 39 | "import matplotlib.pyplot as plt\n", 40 | "from tqdm import tqdm\n", 41 | "from torchvision import transforms\n", 42 | "import torch.nn as nn\n", 43 | "from torch.utils.data import DataLoader,Dataset\n", 44 | "import torch\n", 45 | "import torch.optim as optim\n", 46 | "from torch.autograd import Variable" 47 | ], 48 | "execution_count": null, 49 | "outputs": [] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "metadata": { 54 | "id": "SjqvNdlBN7iN", 55 | "colab_type": "code", 56 | "colab": { 57 | "base_uri": "https://localhost:8080/", 58 | "height": 121 59 | }, 60 | "outputId": "2d373ae1-a4b9-4765-c365-724d09d2efc8" 61 | }, 62 | "source": [ 63 | "# Mounting the google drive to fetch data from it\n", 64 | "from google.colab import drive\n", 65 | "drive.mount('/content/gdrive')" 66 | ], 67 | "execution_count": null, 68 | "outputs": [ 69 | { 70 | "output_type": "stream", 71 | "text": [ 72 | "Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3aietf%3awg%3aoauth%3a2.0%3aoob&response_type=code&scope=email%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdocs.test%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive.photos.readonly%20https%3a%2f%2fwww.googleapis.com%2fauth%2fpeopleapi.readonly\n", 73 | "\n", 74 | "Enter your authorization code:\n", 75 | "··········\n", 76 | "Mounted at /content/gdrive\n" 77 | ], 78 | "name": "stdout" 79 | } 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "metadata": { 85 | "id": "ousoqc3OPe91", 86 | "colab_type": "code", 87 | "colab": { 88 | "base_uri": "https://localhost:8080/", 89 | "height": 84 90 | }, 91 | "outputId": "7ad21e9c-9916-41f0-bb7c-2f296d58086e" 92 | }, 93 | "source": [ 94 | "#loading the mnist data\n", 95 | "(x_train,y_train),(x_test,y_test)=mnist.load_data()\n", 96 | "print(\"No of train datapoints:{}\\nNo of test datapoints:{}\".format(len(x_train),len(x_test)))" 97 | ], 98 | "execution_count": null, 99 | "outputs": [ 100 | { 101 | "output_type": "stream", 102 | "text": [ 103 | "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n", 104 | "11493376/11490434 [==============================] - 0s 0us/step\n", 105 | "No of train datapoints:60000\n", 106 | "No of test datapoints:10000\n" 107 | ], 108 | "name": "stdout" 109 | } 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "metadata": { 115 | "id": "y2K5s30TjUNx", 116 | "colab_type": "code", 117 | "colab": { 118 | "base_uri": "https://localhost:8080/", 119 | "height": 34 120 | }, 121 | "outputId": "11a8242d-896c-4f00-f4fc-bbb143d94545" 122 | }, 123 | "source": [ 124 | "print(y_train[1]) # Checking labels" 125 | ], 126 | "execution_count": null, 127 | "outputs": [ 128 | { 129 | "output_type": "stream", 130 | "text": [ 131 | "0\n" 132 | ], 133 | "name": "stdout" 134 | } 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "metadata": { 140 | "id": "CzxQKgMXQFrZ", 141 | "colab_type": "code", 142 | "colab": {} 143 | }, 144 | "source": [ 145 | "#we add the noise \n", 146 | "\"\"\"\n", 147 | " 'gauss' Gaussian-distributed additive noise.\n", 148 | " 'speckle' out = image + n*image,where\n", 149 | " n is uniform noise with specified mean & variance. \n", 150 | "\"\"\"\n", 151 | "\n", 152 | "def add_noise(img,noise_type=\"gaussian\"):#input includes the type of the noise to be added and the input image\n", 153 | " \n", 154 | " row,col=28,28\n", 155 | " img=img.astype(np.float32)\n", 156 | " \n", 157 | " if noise_type==\"gaussian\":\n", 158 | " noise=np.random.normal(-5.9,5.9,img.shape) #input includes : mean, deviation, shape of the image and the function picks up a normal distribuition.\n", 159 | " noise=noise.reshape(row,col) # reshaping the noise \n", 160 | " img=img+noise #adding the noise\n", 161 | " return img\n", 162 | "\n", 163 | " if noise_type==\"speckle\":\n", 164 | " noise=np.random.randn(row,col)\n", 165 | " noise=noise.reshape(row,col)\n", 166 | " img=img+img*noise\n", 167 | " return img" 168 | ], 169 | "execution_count": null, 170 | "outputs": [] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "metadata": { 175 | "id": "qTgtuQc4WgW7", 176 | "colab_type": "code", 177 | "colab": { 178 | "base_uri": "https://localhost:8080/", 179 | "height": 185 180 | }, 181 | "outputId": "436f6828-72e3-4d37-a8b5-a1e2e85c8ff4" 182 | }, 183 | "source": [ 184 | "#Now dividing the dataset into two parts and adding gaussian to one and speckle to another.\n", 185 | "noises=[\"gaussian\",\"speckle\"]\n", 186 | "noise_ct=0\n", 187 | "noise_id=0 #id represnts which noise is being added, its 0 = gaussian and 1 = speckle\n", 188 | "traindata=np.zeros((60000,28,28)) #revised training data\n", 189 | "\n", 190 | "\n", 191 | "\n", 192 | "for idx in tqdm(range(len(x_train))): #for the first half we are using gaussian noise & for the second half speckle noise\n", 193 | " \n", 194 | " if noise_ct<(len(x_train)/2):\n", 195 | " noise_ct+=1\n", 196 | " traindata[idx]=add_noise(x_train[idx],noise_type=noises[noise_id])\n", 197 | " \n", 198 | " else:\n", 199 | " print(\"\\n{} noise addition completed to images\".format(noises[noise_id]))\n", 200 | " noise_id+=1\n", 201 | " noise_ct=0\n", 202 | "\n", 203 | "\n", 204 | "print(\"\\n{} noise addition completed to images\".format(noises[noise_id])) \n", 205 | "\n", 206 | "\n", 207 | "\n", 208 | "\n", 209 | "noise_ct=0\n", 210 | "noise_id=0\n", 211 | "testdata=np.zeros((10000,28,28))\n", 212 | "\n", 213 | "for idx in tqdm(range(len(x_test))): # Doing the same for the test set.\n", 214 | " \n", 215 | " if noise_ct<(len(x_test)/2):\n", 216 | " noise_ct+=1\n", 217 | " x=add_noise(x_test[idx],noise_type=noises[noise_id])\n", 218 | " testdata[idx]=x\n", 219 | " \n", 220 | " else:\n", 221 | " print(\"\\n{} noise addition completed to images\".format(noises[noise_id]))\n", 222 | " noise_id+=1\n", 223 | " noise_ct=0\n", 224 | "\n", 225 | "\n", 226 | "print(\"\\n{} noise addition completed to images\".format(noises[noise_id]))" 227 | ], 228 | "execution_count": null, 229 | "outputs": [ 230 | { 231 | "output_type": "stream", 232 | "text": [ 233 | " 53%|█████▎ | 32057/60000 [00:01<00:01, 19218.50it/s]" 234 | ], 235 | "name": "stderr" 236 | }, 237 | { 238 | "output_type": "stream", 239 | "text": [ 240 | "\n", 241 | "gaussian noise addition completed to images\n" 242 | ], 243 | "name": "stdout" 244 | }, 245 | { 246 | "output_type": "stream", 247 | "text": [ 248 | "100%|██████████| 60000/60000 [00:03<00:00, 19260.63it/s]\n", 249 | " 20%|██ | 2049/10000 [00:00<00:00, 20486.45it/s]" 250 | ], 251 | "name": "stderr" 252 | }, 253 | { 254 | "output_type": "stream", 255 | "text": [ 256 | "\n", 257 | "speckle noise addition completed to images\n" 258 | ], 259 | "name": "stdout" 260 | }, 261 | { 262 | "output_type": "stream", 263 | "text": [ 264 | " 78%|███████▊ | 7793/10000 [00:00<00:00, 19490.98it/s]" 265 | ], 266 | "name": "stderr" 267 | }, 268 | { 269 | "output_type": "stream", 270 | "text": [ 271 | "\n", 272 | "gaussian noise addition completed to images\n" 273 | ], 274 | "name": "stdout" 275 | }, 276 | { 277 | "output_type": "stream", 278 | "text": [ 279 | "100%|██████████| 10000/10000 [00:00<00:00, 18849.68it/s]" 280 | ], 281 | "name": "stderr" 282 | }, 283 | { 284 | "output_type": "stream", 285 | "text": [ 286 | "\n", 287 | "speckle noise addition completed to images\n" 288 | ], 289 | "name": "stdout" 290 | }, 291 | { 292 | "output_type": "stream", 293 | "text": [ 294 | "\n" 295 | ], 296 | "name": "stderr" 297 | } 298 | ] 299 | }, 300 | { 301 | "cell_type": "code", 302 | "metadata": { 303 | "id": "awvAR8L3S0m7", 304 | "colab_type": "code", 305 | "colab": { 306 | "base_uri": "https://localhost:8080/", 307 | "height": 298 308 | }, 309 | "outputId": "b2fd3090-0569-45e8-85ff-2fa9ac605cdd" 310 | }, 311 | "source": [ 312 | "f, axes=plt.subplots(2,2) #setting up 4 figures\n", 313 | "\n", 314 | "#showing images with gaussian noise\n", 315 | "axes[0,0].imshow(x_train[0],cmap=\"gray\")#the original data\n", 316 | "axes[0,0].set_title(\"Original Image\")\n", 317 | "axes[1,0].imshow(traindata[0],cmap='gray')#noised data\n", 318 | "axes[1,0].set_title(\"Noised Image\")\n", 319 | "\n", 320 | "#showing images with speckle noise\n", 321 | "axes[0,1].imshow(x_train[25000],cmap='gray')#original data\n", 322 | "axes[0,1].set_title(\"Original Image\")\n", 323 | "axes[1,1].imshow(traindata[25000],cmap=\"gray\")#noised data\n", 324 | "axes[1,1].set_title(\"Noised Image\")" 325 | ], 326 | "execution_count": null, 327 | "outputs": [ 328 | { 329 | "output_type": "execute_result", 330 | "data": { 331 | "text/plain": [ 332 | "Text(0.5, 1.0, 'Noised Image')" 333 | ] 334 | }, 335 | "metadata": { 336 | "tags": [] 337 | }, 338 | "execution_count": 6 339 | }, 340 | { 341 | "output_type": "display_data", 342 | "data": { 343 | "image/png": "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7J133mnXelUD9uwIIbmAjR0hJBewsSOE5IJON1PxAQcckKUfe+yxQNaaEJJy0NjYGOTPOuusLL1u3bqCx9XX1wf5VatWZenXXnutTLXjTMXlotIzFQ8aNCjIn3DCliVt33777UB22223Zeltt9224DmffvrpIH/dddcF+bvvvjtLe72uMThTMSEk37CxI4Tkgk4XevLee+9l6RUrVgSycpixzz33XJBvaGgI8kcffXSW/vTTTwPZrbfe2ubyCdm4cWOQtyFWNrwKAOrqinvFbehVc/n9998/S991112B7IUXXiiqjGrDnh0hJBewsSOE5AI2doSQXNDpQk8so0ePDvLf+MY3svTf//73QOaHb1msT+Koo44KZB999FGQ32effbL0+eefH8gmTJjQQo0rCkNPykQtL5Jtw1T8+zBt2rQs3bdv30DmZ/6xbNiwIciPHTs2S//xj38MZN5vXQEYekIIyTctNnYicrOILBORl822viLyiIi8kf7v077VJKT8ULfzRYtmrIgcBWAdgFtUdd902wwAK1X1chGZCqCPql7UYmFV7u737NkzS/uZRW644YYsPX78+ED23e9+N0vffvvt7VS7ipN7M7Zcul1tvS4H5513XpDv0aNHkLejL/zsKRbrKgKA+++/vwy1axWlm7Gq+iSAlW7zCQCa5oeZA2A0COlgULfzRalBxf1UtWkA5xIA/QrtKCITANSUZ56QCEXpNvW649HmERSqqrFuvKrOAjAL6BzdfZIfYrpNve54lNrYLRWR/qpaLyL9ASwrZ6XaizVr1hSUrV69uqDsnHPOydJ33nlnIKvxGSBI6+mQut1WfvnLX0bldvEo68MGgN13371d6lRuSg09mQtgXJoeB+De8lSHkKpD3e6kFBN6cjuAZwEMEZHFIjIewOUAjhGRNwCMTPOEdCio2/miRTNWVccUEI0oc12qyqWXXpqlDzrooEA2fPjwLD1y5MhA9vDDD7drvUj7kRfdLgd2NJA3W+26xn7i2VqCIygIIbmAjR0hJBewsSOE5IJOPetJqQwePDjIL1iwIEv7mYkff/zxID9//vwsff311weySt7rIsj9cLFy0VH02rPTTjtl6cMPPzyQXXLJJUH+wAMPzNLr168vKHvzzTfLWcVS4KwnhJB8w8aOEJILaMYWwYknnpilf/3rXwey2FqcdnJEALjllluy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\n", 344 | "text/plain": [ 345 | "
" 346 | ] 347 | }, 348 | "metadata": { 349 | "tags": [], 350 | "needs_background": "light" 351 | } 352 | } 353 | ] 354 | }, 355 | { 356 | "cell_type": "code", 357 | "metadata": { 358 | "id": "UozRbHbAVGEc", 359 | "colab_type": "code", 360 | "colab": {} 361 | }, 362 | "source": [ 363 | "#creating a dataset builder i.e dataloaders\n", 364 | "class noisedDataset(Dataset):\n", 365 | " \n", 366 | " def __init__(self,datasetnoised,datasetclean,labels,transform):\n", 367 | " self.noise=datasetnoised\n", 368 | " self.clean=datasetclean\n", 369 | " self.labels=labels\n", 370 | " self.transform=transform\n", 371 | " \n", 372 | " def __len__(self):\n", 373 | " return len(self.noise)\n", 374 | " \n", 375 | " def __getitem__(self,idx):\n", 376 | " xNoise=self.noise[idx]\n", 377 | " xClean=self.clean[idx]\n", 378 | " y=self.labels[idx]\n", 379 | " \n", 380 | " if self.transform != None:#just for using the totensor transform\n", 381 | " xNoise=self.transform(xNoise)\n", 382 | " xClean=self.transform(xClean)\n", 383 | " \n", 384 | " \n", 385 | " return (xNoise,xClean,y)" 386 | ], 387 | "execution_count": null, 388 | "outputs": [] 389 | }, 390 | { 391 | "cell_type": "code", 392 | "metadata": { 393 | "id": "vmNriciwWD3t", 394 | "colab_type": "code", 395 | "colab": {} 396 | }, 397 | "source": [ 398 | "#defining the totensor transforms\n", 399 | "tsfms=transforms.Compose([\n", 400 | " transforms.ToTensor()\n", 401 | "])\n", 402 | "\n", 403 | "trainset=noisedDataset(traindata,x_train,y_train,tsfms)# the labels should not be corrupted because the model has to learn uniques features and denoise it.\n", 404 | "testset=noisedDataset(testdata,x_test,y_test,tsfms)" 405 | ], 406 | "execution_count": null, 407 | "outputs": [] 408 | }, 409 | { 410 | "cell_type": "code", 411 | "metadata": { 412 | "id": "xoNaIxknWyme", 413 | "colab_type": "code", 414 | "colab": {} 415 | }, 416 | "source": [ 417 | "batch_size=32\n", 418 | "\n", 419 | "\n", 420 | "#creating the dataloader\n", 421 | "trainloader=DataLoader(trainset,batch_size=32,shuffle=True)\n", 422 | "testloader=DataLoader(testset,batch_size=1,shuffle=True)" 423 | ], 424 | "execution_count": null, 425 | "outputs": [] 426 | }, 427 | { 428 | "cell_type": "code", 429 | "metadata": { 430 | "id": "4Dr-0ta2XuVn", 431 | "colab_type": "code", 432 | "colab": {} 433 | }, 434 | "source": [ 435 | "#building our ae model:\n", 436 | "class denoising_model(nn.Module):\n", 437 | " def __init__(self):\n", 438 | " super(denoising_model,self).__init__()\n", 439 | " self.encoder=nn.Sequential(\n", 440 | " nn.Linear(28*28,256),#decreasing the features in the encoder\n", 441 | " nn.ReLU(True),\n", 442 | " nn.Linear(256,128),\n", 443 | " nn.ReLU(True),\n", 444 | " nn.Linear(128,64),\n", 445 | " nn.ReLU(True)\n", 446 | " \n", 447 | " )\n", 448 | " \n", 449 | " self.decoder=nn.Sequential(\n", 450 | " nn.Linear(64,128),#increasing the number of features\n", 451 | " nn.ReLU(True),\n", 452 | " nn.Linear(128,256),\n", 453 | " nn.ReLU(True),\n", 454 | " nn.Linear(256,28*28),\n", 455 | " nn.Sigmoid(),\n", 456 | " )\n", 457 | " \n", 458 | " \n", 459 | " def forward(self,x):\n", 460 | " x=self.encoder(x)#first the encoder\n", 461 | " x=self.decoder(x)#then the decoder to reconstruct the original input.\n", 462 | " \n", 463 | " return x" 464 | ], 465 | "execution_count": null, 466 | "outputs": [] 467 | }, 468 | { 469 | "cell_type": "code", 470 | "metadata": { 471 | "id": "9ayuj7oxcxBk", 472 | "colab_type": "code", 473 | "colab": { 474 | "base_uri": "https://localhost:8080/", 475 | "height": 1000 476 | }, 477 | "outputId": "a482a481-61ac-4794-878e-3135355b02c7" 478 | }, 479 | "source": [ 480 | "if torch.cuda.is_available()==True:\n", 481 | " device=\"cuda:0\"\n", 482 | "else:\n", 483 | " device =\"cpu\"\n", 484 | "\n", 485 | " \n", 486 | "model=denoising_model().to(device)\n", 487 | "criterion=nn.MSELoss()\n", 488 | "optimizer=optim.SGD(model.parameters(),lr=0.01,weight_decay=1e-5)\n", 489 | "\n", 490 | "\n", 491 | "epochs=120\n", 492 | "l=len(trainloader)\n", 493 | "losslist=list()\n", 494 | "epochloss=0\n", 495 | "running_loss=0\n", 496 | "for epoch in range(epochs):\n", 497 | " \n", 498 | " print(\"Entering Epoch: \",epoch)\n", 499 | " for dirty,clean,label in tqdm((trainloader)):\n", 500 | " \n", 501 | " \n", 502 | " dirty=dirty.view(dirty.size(0),-1).type(torch.FloatTensor)\n", 503 | " clean=clean.view(clean.size(0),-1).type(torch.FloatTensor)\n", 504 | " dirty,clean=dirty.to(device),clean.to(device)\n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " #-----------------Forward Pass----------------------\n", 509 | " output=model(dirty)\n", 510 | " loss=criterion(output,clean)\n", 511 | " #-----------------Backward Pass---------------------\n", 512 | " optimizer.zero_grad()\n", 513 | " loss.backward()\n", 514 | " optimizer.step()\n", 515 | " \n", 516 | " running_loss+=loss.item()\n", 517 | " epochloss+=loss.item()\n", 518 | " #-----------------Log-------------------------------\n", 519 | " losslist.append(running_loss/l)\n", 520 | " running_loss=0\n", 521 | " print(\"======> epoch: {}/{}, Loss:{}\".format(epoch,epochs,loss.item()))" 522 | ], 523 | "execution_count": 11, 524 | "outputs": [ 525 | { 526 | "output_type": "stream", 527 | "text": [ 528 | "\r 0%| | 0/1875 [00:00 epoch: 0/120, Loss:0.07655805349349976\n", 551 | "Entering Epoch: 1\n" 552 | ], 553 | "name": "stdout" 554 | }, 555 | { 556 | "output_type": "stream", 557 | "text": [ 558 | "100%|██████████| 1875/1875 [00:11<00:00, 169.94it/s]\n", 559 | " 1%| | 16/1875 [00:00<00:12, 151.96it/s]" 560 | ], 561 | "name": "stderr" 562 | }, 563 | { 564 | "output_type": "stream", 565 | "text": [ 566 | "======> epoch: 1/120, Loss:0.06866743415594101\n", 567 | "Entering Epoch: 2\n" 568 | ], 569 | "name": "stdout" 570 | }, 571 | { 572 | "output_type": "stream", 573 | "text": [ 574 | "100%|██████████| 1875/1875 [00:11<00:00, 163.23it/s]\n", 575 | " 1%| | 16/1875 [00:00<00:12, 154.73it/s]" 576 | ], 577 | "name": "stderr" 578 | }, 579 | { 580 | "output_type": "stream", 581 | "text": [ 582 | "======> epoch: 2/120, Loss:0.0734129250049591\n", 583 | "Entering Epoch: 3\n" 584 | ], 585 | "name": "stdout" 586 | }, 587 | { 588 | "output_type": "stream", 589 | "text": [ 590 | "100%|██████████| 1875/1875 [00:11<00:00, 166.60it/s]\n", 591 | " 1%| | 16/1875 [00:00<00:11, 158.49it/s]" 592 | ], 593 | "name": "stderr" 594 | }, 595 | { 596 | "output_type": "stream", 597 | "text": [ 598 | "======> epoch: 3/120, Loss:0.06309104710817337\n", 599 | "Entering Epoch: 4\n" 600 | ], 601 | "name": "stdout" 602 | }, 603 | { 604 | "output_type": "stream", 605 | "text": [ 606 | "100%|██████████| 1875/1875 [00:11<00:00, 165.53it/s]\n", 607 | " 1%| | 14/1875 [00:00<00:14, 131.77it/s]" 608 | ], 609 | "name": "stderr" 610 | }, 611 | { 612 | "output_type": "stream", 613 | "text": [ 614 | "======> epoch: 4/120, Loss:0.07221430540084839\n", 615 | "Entering Epoch: 5\n" 616 | ], 617 | "name": "stdout" 618 | }, 619 | { 620 | "output_type": "stream", 621 | "text": [ 622 | "100%|██████████| 1875/1875 [00:11<00:00, 163.61it/s]\n", 623 | " 1%| | 17/1875 [00:00<00:11, 165.56it/s]" 624 | ], 625 | "name": "stderr" 626 | }, 627 | { 628 | "output_type": "stream", 629 | "text": [ 630 | "======> epoch: 5/120, Loss:0.060313016176223755\n", 631 | "Entering Epoch: 6\n" 632 | ], 633 | "name": "stdout" 634 | }, 635 | { 636 | "output_type": "stream", 637 | "text": [ 638 | "100%|██████████| 1875/1875 [00:11<00:00, 157.35it/s]\n", 639 | " 1%| | 15/1875 [00:00<00:12, 143.50it/s]" 640 | ], 641 | "name": "stderr" 642 | }, 643 | { 644 | "output_type": "stream", 645 | "text": [ 646 | "======> epoch: 6/120, Loss:0.0545106865465641\n", 647 | "Entering Epoch: 7\n" 648 | ], 649 | "name": "stdout" 650 | }, 651 | { 652 | "output_type": "stream", 653 | "text": [ 654 | "100%|██████████| 1875/1875 [00:11<00:00, 163.06it/s]\n", 655 | " 1%| | 15/1875 [00:00<00:12, 145.40it/s]" 656 | ], 657 | "name": "stderr" 658 | }, 659 | { 660 | "output_type": "stream", 661 | "text": [ 662 | "======> epoch: 7/120, Loss:0.05784629285335541\n", 663 | "Entering Epoch: 8\n" 664 | ], 665 | "name": "stdout" 666 | }, 667 | { 668 | "output_type": "stream", 669 | "text": [ 670 | "100%|██████████| 1875/1875 [00:11<00:00, 157.29it/s]\n", 671 | " 1%| | 16/1875 [00:00<00:11, 157.58it/s]" 672 | ], 673 | "name": "stderr" 674 | }, 675 | { 676 | "output_type": "stream", 677 | "text": [ 678 | "======> epoch: 8/120, Loss:0.05313542112708092\n", 679 | "Entering Epoch: 9\n" 680 | ], 681 | "name": "stdout" 682 | }, 683 | { 684 | "output_type": "stream", 685 | "text": [ 686 | "100%|██████████| 1875/1875 [00:11<00:00, 160.99it/s]\n", 687 | " 1%| | 15/1875 [00:00<00:12, 147.76it/s]" 688 | ], 689 | "name": "stderr" 690 | }, 691 | { 692 | "output_type": "stream", 693 | "text": [ 694 | "======> epoch: 9/120, Loss:0.0563567578792572\n", 695 | "Entering Epoch: 10\n" 696 | ], 697 | "name": "stdout" 698 | }, 699 | { 700 | "output_type": "stream", 701 | "text": [ 702 | "100%|██████████| 1875/1875 [00:11<00:00, 158.25it/s]\n", 703 | " 1%| | 17/1875 [00:00<00:11, 166.63it/s]" 704 | ], 705 | "name": "stderr" 706 | }, 707 | { 708 | "output_type": "stream", 709 | "text": [ 710 | "======> epoch: 10/120, Loss:0.05097239464521408\n", 711 | "Entering Epoch: 11\n" 712 | ], 713 | "name": "stdout" 714 | }, 715 | { 716 | "output_type": "stream", 717 | "text": [ 718 | "100%|██████████| 1875/1875 [00:12<00:00, 153.01it/s]\n", 719 | " 1%| | 14/1875 [00:00<00:13, 139.44it/s]" 720 | ], 721 | "name": "stderr" 722 | }, 723 | { 724 | "output_type": "stream", 725 | "text": [ 726 | "======> epoch: 11/120, Loss:0.04794689267873764\n", 727 | "Entering Epoch: 12\n" 728 | ], 729 | "name": "stdout" 730 | }, 731 | { 732 | "output_type": "stream", 733 | "text": [ 734 | "100%|██████████| 1875/1875 [00:12<00:00, 149.28it/s]\n", 735 | " 1%| | 17/1875 [00:00<00:11, 161.49it/s]" 736 | ], 737 | "name": "stderr" 738 | }, 739 | { 740 | "output_type": "stream", 741 | "text": [ 742 | "======> epoch: 12/120, Loss:0.048914652317762375\n", 743 | "Entering Epoch: 13\n" 744 | ], 745 | "name": "stdout" 746 | }, 747 | { 748 | "output_type": "stream", 749 | "text": [ 750 | "100%|██████████| 1875/1875 [00:12<00:00, 148.94it/s]\n", 751 | " 1%| | 15/1875 [00:00<00:12, 144.82it/s]" 752 | ], 753 | "name": "stderr" 754 | }, 755 | { 756 | "output_type": "stream", 757 | "text": [ 758 | "======> epoch: 13/120, Loss:0.042824044823646545\n", 759 | "Entering Epoch: 14\n" 760 | ], 761 | "name": "stdout" 762 | }, 763 | { 764 | "output_type": "stream", 765 | "text": [ 766 | "100%|██████████| 1875/1875 [00:12<00:00, 150.85it/s]\n", 767 | " 1%| | 15/1875 [00:00<00:13, 142.62it/s]" 768 | ], 769 | "name": "stderr" 770 | }, 771 | { 772 | "output_type": "stream", 773 | "text": [ 774 | "======> epoch: 14/120, Loss:0.04233626276254654\n", 775 | "Entering Epoch: 15\n" 776 | ], 777 | "name": "stdout" 778 | }, 779 | { 780 | "output_type": "stream", 781 | "text": [ 782 | "100%|██████████| 1875/1875 [00:12<00:00, 146.37it/s]\n", 783 | " 1%| | 16/1875 [00:00<00:12, 151.46it/s]" 784 | ], 785 | "name": "stderr" 786 | }, 787 | { 788 | "output_type": "stream", 789 | "text": [ 790 | "======> epoch: 15/120, Loss:0.04042591527104378\n", 791 | "Entering Epoch: 16\n" 792 | ], 793 | "name": "stdout" 794 | }, 795 | { 796 | "output_type": "stream", 797 | "text": [ 798 | "100%|██████████| 1875/1875 [00:13<00:00, 143.98it/s]\n", 799 | " 1%| | 12/1875 [00:00<00:16, 116.25it/s]" 800 | ], 801 | "name": "stderr" 802 | }, 803 | { 804 | "output_type": "stream", 805 | "text": [ 806 | "======> epoch: 16/120, Loss:0.046115558594465256\n", 807 | "Entering Epoch: 17\n" 808 | ], 809 | "name": "stdout" 810 | }, 811 | { 812 | "output_type": "stream", 813 | "text": [ 814 | "100%|██████████| 1875/1875 [00:13<00:00, 140.29it/s]\n", 815 | " 1%| | 14/1875 [00:00<00:13, 137.81it/s]" 816 | ], 817 | "name": "stderr" 818 | }, 819 | { 820 | "output_type": "stream", 821 | "text": [ 822 | "======> epoch: 17/120, Loss:0.03918847441673279\n", 823 | "Entering Epoch: 18\n" 824 | ], 825 | "name": "stdout" 826 | }, 827 | { 828 | "output_type": "stream", 829 | "text": [ 830 | "100%|██████████| 1875/1875 [00:13<00:00, 135.77it/s]\n", 831 | " 1%| | 14/1875 [00:00<00:13, 138.86it/s]" 832 | ], 833 | "name": "stderr" 834 | }, 835 | { 836 | "output_type": "stream", 837 | "text": [ 838 | "======> epoch: 18/120, Loss:0.03933500871062279\n", 839 | "Entering Epoch: 19\n" 840 | ], 841 | "name": "stdout" 842 | }, 843 | { 844 | "output_type": "stream", 845 | "text": [ 846 | "100%|██████████| 1875/1875 [00:13<00:00, 143.42it/s]\n", 847 | " 1%| | 14/1875 [00:00<00:14, 132.26it/s]" 848 | ], 849 | "name": "stderr" 850 | }, 851 | { 852 | "output_type": "stream", 853 | "text": [ 854 | "======> epoch: 19/120, Loss:0.04311181232333183\n", 855 | "Entering Epoch: 20\n" 856 | ], 857 | "name": "stdout" 858 | }, 859 | { 860 | "output_type": "stream", 861 | "text": [ 862 | "100%|██████████| 1875/1875 [00:13<00:00, 140.23it/s]\n", 863 | " 1%| | 14/1875 [00:00<00:13, 134.09it/s]" 864 | ], 865 | "name": "stderr" 866 | }, 867 | { 868 | "output_type": "stream", 869 | "text": [ 870 | "======> epoch: 20/120, Loss:0.038082387298345566\n", 871 | "Entering Epoch: 21\n" 872 | ], 873 | "name": "stdout" 874 | }, 875 | { 876 | "output_type": "stream", 877 | "text": [ 878 | "100%|██████████| 1875/1875 [00:13<00:00, 139.80it/s]\n", 879 | " 1%| | 14/1875 [00:00<00:13, 136.07it/s]" 880 | ], 881 | "name": "stderr" 882 | }, 883 | { 884 | "output_type": "stream", 885 | "text": [ 886 | "======> epoch: 21/120, Loss:0.03792873024940491\n", 887 | "Entering Epoch: 22\n" 888 | ], 889 | "name": "stdout" 890 | }, 891 | { 892 | "output_type": "stream", 893 | "text": [ 894 | "100%|██████████| 1875/1875 [00:13<00:00, 134.39it/s]\n", 895 | " 1%| | 12/1875 [00:00<00:16, 115.72it/s]" 896 | ], 897 | "name": "stderr" 898 | }, 899 | { 900 | "output_type": "stream", 901 | "text": [ 902 | "======> epoch: 22/120, Loss:0.03787040337920189\n", 903 | "Entering Epoch: 23\n" 904 | ], 905 | "name": "stdout" 906 | }, 907 | { 908 | "output_type": "stream", 909 | "text": [ 910 | "100%|██████████| 1875/1875 [00:12<00:00, 145.97it/s]\n", 911 | " 1%| | 14/1875 [00:00<00:13, 134.82it/s]" 912 | ], 913 | "name": "stderr" 914 | }, 915 | { 916 | "output_type": "stream", 917 | "text": [ 918 | "======> epoch: 23/120, Loss:0.04096442833542824\n", 919 | "Entering Epoch: 24\n" 920 | ], 921 | "name": "stdout" 922 | }, 923 | { 924 | "output_type": "stream", 925 | "text": [ 926 | "100%|██████████| 1875/1875 [00:12<00:00, 146.34it/s]\n", 927 | " 1%| | 13/1875 [00:00<00:14, 127.91it/s]" 928 | ], 929 | "name": "stderr" 930 | }, 931 | { 932 | "output_type": "stream", 933 | "text": [ 934 | "======> epoch: 24/120, Loss:0.03876926749944687\n", 935 | "Entering Epoch: 25\n" 936 | ], 937 | "name": "stdout" 938 | }, 939 | { 940 | "output_type": "stream", 941 | "text": [ 942 | "100%|██████████| 1875/1875 [00:14<00:00, 131.81it/s]\n", 943 | " 1%| | 15/1875 [00:00<00:12, 143.95it/s]" 944 | ], 945 | "name": "stderr" 946 | }, 947 | { 948 | "output_type": "stream", 949 | "text": [ 950 | "======> epoch: 25/120, Loss:0.035967059433460236\n", 951 | "Entering Epoch: 26\n" 952 | ], 953 | "name": "stdout" 954 | }, 955 | { 956 | "output_type": "stream", 957 | "text": [ 958 | "100%|██████████| 1875/1875 [00:13<00:00, 140.33it/s]\n", 959 | " 1%| | 14/1875 [00:00<00:14, 131.64it/s]" 960 | ], 961 | "name": "stderr" 962 | }, 963 | { 964 | "output_type": "stream", 965 | "text": [ 966 | "======> epoch: 26/120, Loss:0.03835727646946907\n", 967 | "Entering Epoch: 27\n" 968 | ], 969 | "name": "stdout" 970 | }, 971 | { 972 | "output_type": "stream", 973 | "text": [ 974 | "100%|██████████| 1875/1875 [00:13<00:00, 135.69it/s]\n", 975 | " 1%| | 14/1875 [00:00<00:13, 139.72it/s]" 976 | ], 977 | "name": "stderr" 978 | }, 979 | { 980 | "output_type": "stream", 981 | "text": [ 982 | "======> epoch: 27/120, Loss:0.03594820201396942\n", 983 | "Entering Epoch: 28\n" 984 | ], 985 | "name": "stdout" 986 | }, 987 | { 988 | "output_type": "stream", 989 | "text": [ 990 | "100%|██████████| 1875/1875 [00:14<00:00, 128.96it/s]\n", 991 | " 1%| | 13/1875 [00:00<00:14, 127.89it/s]" 992 | ], 993 | "name": "stderr" 994 | }, 995 | { 996 | "output_type": "stream", 997 | "text": [ 998 | "======> epoch: 28/120, Loss:0.036595940589904785\n", 999 | "Entering Epoch: 29\n" 1000 | ], 1001 | "name": "stdout" 1002 | }, 1003 | { 1004 | "output_type": "stream", 1005 | "text": [ 1006 | "100%|██████████| 1875/1875 [00:14<00:00, 131.52it/s]\n", 1007 | " 1%| | 13/1875 [00:00<00:14, 125.81it/s]" 1008 | ], 1009 | "name": "stderr" 1010 | }, 1011 | { 1012 | "output_type": "stream", 1013 | "text": [ 1014 | "======> epoch: 29/120, Loss:0.039768513292074203\n", 1015 | "Entering Epoch: 30\n" 1016 | ], 1017 | "name": "stdout" 1018 | }, 1019 | { 1020 | "output_type": "stream", 1021 | "text": [ 1022 | "100%|██████████| 1875/1875 [00:14<00:00, 130.56it/s]\n", 1023 | " 1%| | 13/1875 [00:00<00:14, 126.92it/s]" 1024 | ], 1025 | "name": "stderr" 1026 | }, 1027 | { 1028 | "output_type": "stream", 1029 | "text": [ 1030 | "======> epoch: 30/120, Loss:0.030412830412387848\n", 1031 | "Entering Epoch: 31\n" 1032 | ], 1033 | "name": "stdout" 1034 | }, 1035 | { 1036 | "output_type": "stream", 1037 | "text": [ 1038 | "100%|██████████| 1875/1875 [00:14<00:00, 129.73it/s]\n", 1039 | " 1%| | 13/1875 [00:00<00:14, 126.66it/s]" 1040 | ], 1041 | "name": "stderr" 1042 | }, 1043 | { 1044 | "output_type": "stream", 1045 | "text": [ 1046 | "======> epoch: 31/120, Loss:0.033342208713293076\n", 1047 | "Entering Epoch: 32\n" 1048 | ], 1049 | "name": "stdout" 1050 | }, 1051 | { 1052 | "output_type": "stream", 1053 | "text": [ 1054 | "100%|██████████| 1875/1875 [00:14<00:00, 130.13it/s]\n", 1055 | " 1%| | 10/1875 [00:00<00:19, 95.45it/s]" 1056 | ], 1057 | "name": "stderr" 1058 | }, 1059 | { 1060 | "output_type": "stream", 1061 | "text": [ 1062 | "======> epoch: 32/120, Loss:0.03679276630282402\n", 1063 | "Entering Epoch: 33\n" 1064 | ], 1065 | "name": "stdout" 1066 | }, 1067 | { 1068 | "output_type": "stream", 1069 | "text": [ 1070 | "100%|██████████| 1875/1875 [00:14<00:00, 125.40it/s]\n", 1071 | " 1%| | 14/1875 [00:00<00:13, 133.21it/s]" 1072 | ], 1073 | "name": "stderr" 1074 | }, 1075 | { 1076 | "output_type": "stream", 1077 | "text": [ 1078 | "======> epoch: 33/120, Loss:0.031338147819042206\n", 1079 | "Entering Epoch: 34\n" 1080 | ], 1081 | "name": "stdout" 1082 | }, 1083 | { 1084 | "output_type": "stream", 1085 | "text": [ 1086 | "100%|██████████| 1875/1875 [00:14<00:00, 130.87it/s]\n", 1087 | " 1%| | 13/1875 [00:00<00:14, 126.77it/s]" 1088 | ], 1089 | "name": "stderr" 1090 | }, 1091 | { 1092 | "output_type": "stream", 1093 | "text": [ 1094 | "======> epoch: 34/120, Loss:0.03350548446178436\n", 1095 | "Entering Epoch: 35\n" 1096 | ], 1097 | "name": "stdout" 1098 | }, 1099 | { 1100 | "output_type": "stream", 1101 | "text": [ 1102 | "100%|██████████| 1875/1875 [00:14<00:00, 130.22it/s]\n", 1103 | " 1%| | 13/1875 [00:00<00:14, 124.87it/s]" 1104 | ], 1105 | "name": "stderr" 1106 | }, 1107 | { 1108 | "output_type": "stream", 1109 | "text": [ 1110 | "======> epoch: 35/120, Loss:0.027809547260403633\n", 1111 | "Entering Epoch: 36\n" 1112 | ], 1113 | "name": "stdout" 1114 | }, 1115 | { 1116 | "output_type": "stream", 1117 | "text": [ 1118 | "100%|██████████| 1875/1875 [00:14<00:00, 130.63it/s]\n", 1119 | " 1%| | 12/1875 [00:00<00:15, 118.24it/s]" 1120 | ], 1121 | "name": "stderr" 1122 | }, 1123 | { 1124 | "output_type": "stream", 1125 | "text": [ 1126 | "======> epoch: 36/120, Loss:0.035081349313259125\n", 1127 | "Entering Epoch: 37\n" 1128 | ], 1129 | "name": "stdout" 1130 | }, 1131 | { 1132 | "output_type": "stream", 1133 | "text": [ 1134 | "100%|██████████| 1875/1875 [00:14<00:00, 128.80it/s]\n", 1135 | " 1%| | 14/1875 [00:00<00:13, 138.19it/s]" 1136 | ], 1137 | "name": "stderr" 1138 | }, 1139 | { 1140 | "output_type": "stream", 1141 | "text": [ 1142 | "======> epoch: 37/120, Loss:0.03334449976682663\n", 1143 | "Entering Epoch: 38\n" 1144 | ], 1145 | "name": "stdout" 1146 | }, 1147 | { 1148 | "output_type": "stream", 1149 | "text": [ 1150 | "100%|██████████| 1875/1875 [00:13<00:00, 136.60it/s]\n", 1151 | " 1%| | 14/1875 [00:00<00:13, 134.15it/s]" 1152 | ], 1153 | "name": "stderr" 1154 | }, 1155 | { 1156 | "output_type": "stream", 1157 | "text": [ 1158 | "======> epoch: 38/120, Loss:0.032198466360569\n", 1159 | "Entering Epoch: 39\n" 1160 | ], 1161 | "name": "stdout" 1162 | }, 1163 | { 1164 | "output_type": "stream", 1165 | "text": [ 1166 | "100%|██████████| 1875/1875 [00:13<00:00, 136.60it/s]\n", 1167 | " 1%| | 14/1875 [00:00<00:13, 133.39it/s]" 1168 | ], 1169 | "name": "stderr" 1170 | }, 1171 | { 1172 | "output_type": "stream", 1173 | "text": [ 1174 | "======> epoch: 39/120, Loss:0.03148077800869942\n", 1175 | "Entering Epoch: 40\n" 1176 | ], 1177 | "name": "stdout" 1178 | }, 1179 | { 1180 | "output_type": "stream", 1181 | "text": [ 1182 | "100%|██████████| 1875/1875 [00:14<00:00, 125.26it/s]\n", 1183 | " 1%| | 12/1875 [00:00<00:15, 119.90it/s]" 1184 | ], 1185 | "name": "stderr" 1186 | }, 1187 | { 1188 | "output_type": "stream", 1189 | "text": [ 1190 | "======> epoch: 40/120, Loss:0.03296917676925659\n", 1191 | "Entering Epoch: 41\n" 1192 | ], 1193 | "name": "stdout" 1194 | }, 1195 | { 1196 | "output_type": "stream", 1197 | "text": [ 1198 | "100%|██████████| 1875/1875 [00:14<00:00, 126.44it/s]\n", 1199 | " 1%| | 13/1875 [00:00<00:14, 125.30it/s]" 1200 | ], 1201 | "name": "stderr" 1202 | }, 1203 | { 1204 | "output_type": "stream", 1205 | "text": [ 1206 | "======> epoch: 41/120, Loss:0.033074751496315\n", 1207 | "Entering Epoch: 42\n" 1208 | ], 1209 | "name": "stdout" 1210 | }, 1211 | { 1212 | "output_type": "stream", 1213 | "text": [ 1214 | "100%|██████████| 1875/1875 [00:14<00:00, 133.63it/s]\n", 1215 | " 1%| | 12/1875 [00:00<00:15, 118.42it/s]" 1216 | ], 1217 | "name": "stderr" 1218 | }, 1219 | { 1220 | "output_type": "stream", 1221 | "text": [ 1222 | "======> epoch: 42/120, Loss:0.026806367561221123\n", 1223 | "Entering Epoch: 43\n" 1224 | ], 1225 | "name": "stdout" 1226 | }, 1227 | { 1228 | "output_type": "stream", 1229 | "text": [ 1230 | "100%|██████████| 1875/1875 [00:13<00:00, 134.78it/s]\n", 1231 | " 1%| | 13/1875 [00:00<00:14, 129.79it/s]" 1232 | ], 1233 | "name": "stderr" 1234 | }, 1235 | { 1236 | "output_type": "stream", 1237 | "text": [ 1238 | "======> epoch: 43/120, Loss:0.030488045886158943\n", 1239 | "Entering Epoch: 44\n" 1240 | ], 1241 | "name": "stdout" 1242 | }, 1243 | { 1244 | "output_type": "stream", 1245 | "text": [ 1246 | "100%|██████████| 1875/1875 [00:13<00:00, 135.53it/s]\n", 1247 | " 1%| | 15/1875 [00:00<00:12, 143.97it/s]" 1248 | ], 1249 | "name": "stderr" 1250 | }, 1251 | { 1252 | "output_type": "stream", 1253 | "text": [ 1254 | "======> epoch: 44/120, Loss:0.03101782128214836\n", 1255 | "Entering Epoch: 45\n" 1256 | ], 1257 | "name": "stdout" 1258 | }, 1259 | { 1260 | "output_type": "stream", 1261 | "text": [ 1262 | "100%|██████████| 1875/1875 [00:13<00:00, 136.40it/s]\n", 1263 | " 1%| | 14/1875 [00:00<00:14, 132.17it/s]" 1264 | ], 1265 | "name": "stderr" 1266 | }, 1267 | { 1268 | "output_type": "stream", 1269 | "text": [ 1270 | "======> epoch: 45/120, Loss:0.03301885351538658\n", 1271 | "Entering Epoch: 46\n" 1272 | ], 1273 | "name": "stdout" 1274 | }, 1275 | { 1276 | "output_type": "stream", 1277 | "text": [ 1278 | "100%|██████████| 1875/1875 [00:13<00:00, 135.86it/s]\n", 1279 | " 1%| | 13/1875 [00:00<00:14, 124.51it/s]" 1280 | ], 1281 | "name": "stderr" 1282 | }, 1283 | { 1284 | "output_type": "stream", 1285 | "text": [ 1286 | "======> epoch: 46/120, Loss:0.02984663099050522\n", 1287 | "Entering Epoch: 47\n" 1288 | ], 1289 | "name": "stdout" 1290 | }, 1291 | { 1292 | "output_type": "stream", 1293 | "text": [ 1294 | "100%|██████████| 1875/1875 [00:14<00:00, 131.90it/s]\n", 1295 | " 1%| | 13/1875 [00:00<00:15, 120.40it/s]" 1296 | ], 1297 | "name": "stderr" 1298 | }, 1299 | { 1300 | "output_type": "stream", 1301 | "text": [ 1302 | "======> epoch: 47/120, Loss:0.03226644545793533\n", 1303 | "Entering Epoch: 48\n" 1304 | ], 1305 | "name": "stdout" 1306 | }, 1307 | { 1308 | "output_type": "stream", 1309 | "text": [ 1310 | "100%|██████████| 1875/1875 [00:13<00:00, 135.18it/s]\n", 1311 | " 1%| | 15/1875 [00:00<00:12, 146.41it/s]" 1312 | ], 1313 | "name": "stderr" 1314 | }, 1315 | { 1316 | "output_type": "stream", 1317 | "text": [ 1318 | "======> epoch: 48/120, Loss:0.026942763477563858\n", 1319 | "Entering Epoch: 49\n" 1320 | ], 1321 | "name": "stdout" 1322 | }, 1323 | { 1324 | "output_type": "stream", 1325 | "text": [ 1326 | "100%|██████████| 1875/1875 [00:14<00:00, 133.54it/s]\n", 1327 | " 1%| | 13/1875 [00:00<00:14, 129.45it/s]" 1328 | ], 1329 | "name": "stderr" 1330 | }, 1331 | { 1332 | "output_type": "stream", 1333 | "text": [ 1334 | "======> epoch: 49/120, Loss:0.028122566640377045\n", 1335 | "Entering Epoch: 50\n" 1336 | ], 1337 | "name": "stdout" 1338 | }, 1339 | { 1340 | "output_type": "stream", 1341 | "text": [ 1342 | "100%|██████████| 1875/1875 [00:15<00:00, 120.64it/s]\n", 1343 | " 1%| | 14/1875 [00:00<00:13, 133.12it/s]" 1344 | ], 1345 | "name": "stderr" 1346 | }, 1347 | { 1348 | "output_type": "stream", 1349 | "text": [ 1350 | "======> epoch: 50/120, Loss:0.032489486038684845\n", 1351 | "Entering Epoch: 51\n" 1352 | ], 1353 | "name": "stdout" 1354 | }, 1355 | { 1356 | "output_type": "stream", 1357 | "text": [ 1358 | "100%|██████████| 1875/1875 [00:15<00:00, 124.42it/s]\n", 1359 | " 1%| | 12/1875 [00:00<00:15, 118.52it/s]" 1360 | ], 1361 | "name": "stderr" 1362 | }, 1363 | { 1364 | "output_type": "stream", 1365 | "text": [ 1366 | "======> epoch: 51/120, Loss:0.027188517153263092\n", 1367 | "Entering Epoch: 52\n" 1368 | ], 1369 | "name": "stdout" 1370 | }, 1371 | { 1372 | "output_type": "stream", 1373 | "text": [ 1374 | "100%|██████████| 1875/1875 [00:14<00:00, 129.88it/s]\n", 1375 | " 1%| | 13/1875 [00:00<00:14, 126.93it/s]" 1376 | ], 1377 | "name": "stderr" 1378 | }, 1379 | { 1380 | "output_type": "stream", 1381 | "text": [ 1382 | "======> epoch: 52/120, Loss:0.026840534061193466\n", 1383 | "Entering Epoch: 53\n" 1384 | ], 1385 | "name": "stdout" 1386 | }, 1387 | { 1388 | "output_type": "stream", 1389 | "text": [ 1390 | "100%|██████████| 1875/1875 [00:14<00:00, 125.71it/s]\n", 1391 | " 1%| | 14/1875 [00:00<00:13, 133.50it/s]" 1392 | ], 1393 | "name": "stderr" 1394 | }, 1395 | { 1396 | "output_type": "stream", 1397 | "text": [ 1398 | "======> epoch: 53/120, Loss:0.02796582132577896\n", 1399 | "Entering Epoch: 54\n" 1400 | ], 1401 | "name": "stdout" 1402 | }, 1403 | { 1404 | "output_type": "stream", 1405 | "text": [ 1406 | "100%|██████████| 1875/1875 [00:15<00:00, 123.98it/s]\n", 1407 | " 1%| | 12/1875 [00:00<00:15, 119.88it/s]" 1408 | ], 1409 | "name": "stderr" 1410 | }, 1411 | { 1412 | "output_type": "stream", 1413 | "text": [ 1414 | "======> epoch: 54/120, Loss:0.026841385290026665\n", 1415 | "Entering Epoch: 55\n" 1416 | ], 1417 | "name": "stdout" 1418 | }, 1419 | { 1420 | "output_type": "stream", 1421 | "text": [ 1422 | "100%|██████████| 1875/1875 [00:14<00:00, 128.21it/s]\n", 1423 | " 1%| | 14/1875 [00:00<00:13, 135.42it/s]" 1424 | ], 1425 | "name": "stderr" 1426 | }, 1427 | { 1428 | "output_type": "stream", 1429 | "text": [ 1430 | "======> epoch: 55/120, Loss:0.030861621722579002\n", 1431 | "Entering Epoch: 56\n" 1432 | ], 1433 | "name": "stdout" 1434 | }, 1435 | { 1436 | "output_type": "stream", 1437 | "text": [ 1438 | "100%|██████████| 1875/1875 [00:14<00:00, 131.49it/s]\n", 1439 | " 1%| | 13/1875 [00:00<00:14, 127.03it/s]" 1440 | ], 1441 | "name": "stderr" 1442 | }, 1443 | { 1444 | "output_type": "stream", 1445 | "text": [ 1446 | "======> epoch: 56/120, Loss:0.03170158341526985\n", 1447 | "Entering Epoch: 57\n" 1448 | ], 1449 | "name": "stdout" 1450 | }, 1451 | { 1452 | "output_type": "stream", 1453 | "text": [ 1454 | "100%|██████████| 1875/1875 [00:14<00:00, 128.18it/s]\n", 1455 | " 1%| | 14/1875 [00:00<00:14, 132.41it/s]" 1456 | ], 1457 | "name": "stderr" 1458 | }, 1459 | { 1460 | "output_type": "stream", 1461 | "text": [ 1462 | "======> epoch: 57/120, Loss:0.027990087866783142\n", 1463 | "Entering Epoch: 58\n" 1464 | ], 1465 | "name": "stdout" 1466 | }, 1467 | { 1468 | "output_type": "stream", 1469 | "text": [ 1470 | "100%|██████████| 1875/1875 [00:14<00:00, 128.43it/s]\n", 1471 | " 1%| | 12/1875 [00:00<00:16, 114.78it/s]" 1472 | ], 1473 | "name": "stderr" 1474 | }, 1475 | { 1476 | "output_type": "stream", 1477 | "text": [ 1478 | "======> epoch: 58/120, Loss:0.02624969184398651\n", 1479 | "Entering Epoch: 59\n" 1480 | ], 1481 | "name": "stdout" 1482 | }, 1483 | { 1484 | "output_type": "stream", 1485 | "text": [ 1486 | "100%|██████████| 1875/1875 [00:14<00:00, 125.24it/s]\n", 1487 | " 1%| | 13/1875 [00:00<00:15, 122.14it/s]" 1488 | ], 1489 | "name": "stderr" 1490 | }, 1491 | { 1492 | "output_type": "stream", 1493 | "text": [ 1494 | "======> epoch: 59/120, Loss:0.03171001374721527\n", 1495 | "Entering Epoch: 60\n" 1496 | ], 1497 | "name": "stdout" 1498 | }, 1499 | { 1500 | "output_type": "stream", 1501 | "text": [ 1502 | "100%|██████████| 1875/1875 [00:14<00:00, 133.74it/s]\n", 1503 | " 1%| | 13/1875 [00:00<00:14, 126.78it/s]" 1504 | ], 1505 | "name": "stderr" 1506 | }, 1507 | { 1508 | "output_type": "stream", 1509 | "text": [ 1510 | "======> epoch: 60/120, Loss:0.029582856222987175\n", 1511 | "Entering Epoch: 61\n" 1512 | ], 1513 | "name": "stdout" 1514 | }, 1515 | { 1516 | "output_type": "stream", 1517 | "text": [ 1518 | "100%|██████████| 1875/1875 [00:14<00:00, 133.66it/s]\n", 1519 | " 1%| | 13/1875 [00:00<00:14, 128.13it/s]" 1520 | ], 1521 | "name": "stderr" 1522 | }, 1523 | { 1524 | "output_type": "stream", 1525 | "text": [ 1526 | "======> epoch: 61/120, Loss:0.030450789257884026\n", 1527 | "Entering Epoch: 62\n" 1528 | ], 1529 | "name": "stdout" 1530 | }, 1531 | { 1532 | "output_type": "stream", 1533 | "text": [ 1534 | "100%|██████████| 1875/1875 [00:14<00:00, 130.62it/s]\n", 1535 | " 1%| | 13/1875 [00:00<00:14, 124.90it/s]" 1536 | ], 1537 | "name": "stderr" 1538 | }, 1539 | { 1540 | "output_type": "stream", 1541 | "text": [ 1542 | "======> epoch: 62/120, Loss:0.029638638719916344\n", 1543 | "Entering Epoch: 63\n" 1544 | ], 1545 | "name": "stdout" 1546 | }, 1547 | { 1548 | "output_type": "stream", 1549 | "text": [ 1550 | "100%|██████████| 1875/1875 [00:14<00:00, 125.25it/s]\n", 1551 | " 1%| | 13/1875 [00:00<00:15, 122.19it/s]" 1552 | ], 1553 | "name": "stderr" 1554 | }, 1555 | { 1556 | "output_type": "stream", 1557 | "text": [ 1558 | "======> epoch: 63/120, Loss:0.02794043906033039\n", 1559 | "Entering Epoch: 64\n" 1560 | ], 1561 | "name": "stdout" 1562 | }, 1563 | { 1564 | "output_type": "stream", 1565 | "text": [ 1566 | "100%|██████████| 1875/1875 [00:13<00:00, 134.59it/s]\n", 1567 | " 1%| | 14/1875 [00:00<00:13, 133.44it/s]" 1568 | ], 1569 | "name": "stderr" 1570 | }, 1571 | { 1572 | "output_type": "stream", 1573 | "text": [ 1574 | "======> epoch: 64/120, Loss:0.026989245787262917\n", 1575 | "Entering Epoch: 65\n" 1576 | ], 1577 | "name": "stdout" 1578 | }, 1579 | { 1580 | "output_type": "stream", 1581 | "text": [ 1582 | "100%|██████████| 1875/1875 [00:14<00:00, 131.54it/s]\n", 1583 | " 1%| | 13/1875 [00:00<00:14, 129.96it/s]" 1584 | ], 1585 | "name": "stderr" 1586 | }, 1587 | { 1588 | "output_type": "stream", 1589 | "text": [ 1590 | "======> epoch: 65/120, Loss:0.027833761647343636\n", 1591 | "Entering Epoch: 66\n" 1592 | ], 1593 | "name": "stdout" 1594 | }, 1595 | { 1596 | "output_type": "stream", 1597 | "text": [ 1598 | "100%|██████████| 1875/1875 [00:13<00:00, 134.65it/s]\n", 1599 | " 1%| | 14/1875 [00:00<00:13, 135.79it/s]" 1600 | ], 1601 | "name": "stderr" 1602 | }, 1603 | { 1604 | "output_type": "stream", 1605 | "text": [ 1606 | "======> epoch: 66/120, Loss:0.030930863693356514\n", 1607 | "Entering Epoch: 67\n" 1608 | ], 1609 | "name": "stdout" 1610 | }, 1611 | { 1612 | "output_type": "stream", 1613 | "text": [ 1614 | "100%|██████████| 1875/1875 [00:15<00:00, 119.37it/s]\n", 1615 | " 1%| | 14/1875 [00:00<00:13, 134.96it/s]" 1616 | ], 1617 | "name": "stderr" 1618 | }, 1619 | { 1620 | "output_type": "stream", 1621 | "text": [ 1622 | "======> epoch: 67/120, Loss:0.02531440369784832\n", 1623 | "Entering Epoch: 68\n" 1624 | ], 1625 | "name": "stdout" 1626 | }, 1627 | { 1628 | "output_type": "stream", 1629 | "text": [ 1630 | "100%|██████████| 1875/1875 [00:14<00:00, 131.65it/s]\n", 1631 | " 1%| | 13/1875 [00:00<00:14, 127.41it/s]" 1632 | ], 1633 | "name": "stderr" 1634 | }, 1635 | { 1636 | "output_type": "stream", 1637 | "text": [ 1638 | "======> epoch: 68/120, Loss:0.02740127220749855\n", 1639 | "Entering Epoch: 69\n" 1640 | ], 1641 | "name": "stdout" 1642 | }, 1643 | { 1644 | "output_type": "stream", 1645 | "text": [ 1646 | "100%|██████████| 1875/1875 [00:15<00:00, 123.80it/s]\n", 1647 | " 1%| | 13/1875 [00:00<00:15, 122.35it/s]" 1648 | ], 1649 | "name": "stderr" 1650 | }, 1651 | { 1652 | "output_type": "stream", 1653 | "text": [ 1654 | "======> epoch: 69/120, Loss:0.027579134330153465\n", 1655 | "Entering Epoch: 70\n" 1656 | ], 1657 | "name": "stdout" 1658 | }, 1659 | { 1660 | "output_type": "stream", 1661 | "text": [ 1662 | "100%|██████████| 1875/1875 [00:14<00:00, 131.53it/s]\n", 1663 | " 1%| | 11/1875 [00:00<00:18, 103.19it/s]" 1664 | ], 1665 | "name": "stderr" 1666 | }, 1667 | { 1668 | "output_type": "stream", 1669 | "text": [ 1670 | "======> epoch: 70/120, Loss:0.027055896818637848\n", 1671 | "Entering Epoch: 71\n" 1672 | ], 1673 | "name": "stdout" 1674 | }, 1675 | { 1676 | "output_type": "stream", 1677 | "text": [ 1678 | "100%|██████████| 1875/1875 [00:14<00:00, 131.18it/s]\n", 1679 | " 1%| | 13/1875 [00:00<00:14, 124.43it/s]" 1680 | ], 1681 | "name": "stderr" 1682 | }, 1683 | { 1684 | "output_type": "stream", 1685 | "text": [ 1686 | "======> epoch: 71/120, Loss:0.02910572662949562\n", 1687 | "Entering Epoch: 72\n" 1688 | ], 1689 | "name": "stdout" 1690 | }, 1691 | { 1692 | "output_type": "stream", 1693 | "text": [ 1694 | "100%|██████████| 1875/1875 [00:14<00:00, 131.56it/s]\n", 1695 | " 1%| | 13/1875 [00:00<00:14, 125.79it/s]" 1696 | ], 1697 | "name": "stderr" 1698 | }, 1699 | { 1700 | "output_type": "stream", 1701 | "text": [ 1702 | "======> epoch: 72/120, Loss:0.029532991349697113\n", 1703 | "Entering Epoch: 73\n" 1704 | ], 1705 | "name": "stdout" 1706 | }, 1707 | { 1708 | "output_type": "stream", 1709 | "text": [ 1710 | "100%|██████████| 1875/1875 [00:14<00:00, 129.26it/s]\n", 1711 | " 1%| | 13/1875 [00:00<00:14, 125.52it/s]" 1712 | ], 1713 | "name": "stderr" 1714 | }, 1715 | { 1716 | "output_type": "stream", 1717 | "text": [ 1718 | "======> epoch: 73/120, Loss:0.029182277619838715\n", 1719 | "Entering Epoch: 74\n" 1720 | ], 1721 | "name": "stdout" 1722 | }, 1723 | { 1724 | "output_type": "stream", 1725 | "text": [ 1726 | "100%|██████████| 1875/1875 [00:14<00:00, 131.24it/s]\n", 1727 | " 1%| | 13/1875 [00:00<00:14, 128.01it/s]" 1728 | ], 1729 | "name": "stderr" 1730 | }, 1731 | { 1732 | "output_type": "stream", 1733 | "text": [ 1734 | "======> epoch: 74/120, Loss:0.026421111077070236\n", 1735 | "Entering Epoch: 75\n" 1736 | ], 1737 | "name": "stdout" 1738 | }, 1739 | { 1740 | "output_type": "stream", 1741 | "text": [ 1742 | "100%|██████████| 1875/1875 [00:14<00:00, 130.98it/s]\n", 1743 | " 1%| | 13/1875 [00:00<00:14, 126.09it/s]" 1744 | ], 1745 | "name": "stderr" 1746 | }, 1747 | { 1748 | "output_type": "stream", 1749 | "text": [ 1750 | "======> epoch: 75/120, Loss:0.02665863186120987\n", 1751 | "Entering Epoch: 76\n" 1752 | ], 1753 | "name": "stdout" 1754 | }, 1755 | { 1756 | "output_type": "stream", 1757 | "text": [ 1758 | "100%|██████████| 1875/1875 [00:14<00:00, 131.24it/s]\n", 1759 | " 1%| | 13/1875 [00:00<00:14, 125.76it/s]" 1760 | ], 1761 | "name": "stderr" 1762 | }, 1763 | { 1764 | "output_type": "stream", 1765 | "text": [ 1766 | "======> epoch: 76/120, Loss:0.02383933961391449\n", 1767 | "Entering Epoch: 77\n" 1768 | ], 1769 | "name": "stdout" 1770 | }, 1771 | { 1772 | "output_type": "stream", 1773 | "text": [ 1774 | "100%|██████████| 1875/1875 [00:14<00:00, 131.76it/s]\n", 1775 | " 1%| | 12/1875 [00:00<00:16, 111.16it/s]" 1776 | ], 1777 | "name": "stderr" 1778 | }, 1779 | { 1780 | "output_type": "stream", 1781 | "text": [ 1782 | "======> epoch: 77/120, Loss:0.025645989924669266\n", 1783 | "Entering Epoch: 78\n" 1784 | ], 1785 | "name": "stdout" 1786 | }, 1787 | { 1788 | "output_type": "stream", 1789 | "text": [ 1790 | "100%|██████████| 1875/1875 [00:14<00:00, 133.79it/s]\n", 1791 | " 1%| | 14/1875 [00:00<00:13, 134.93it/s]" 1792 | ], 1793 | "name": "stderr" 1794 | }, 1795 | { 1796 | "output_type": "stream", 1797 | "text": [ 1798 | "======> epoch: 78/120, Loss:0.026404602453112602\n", 1799 | "Entering Epoch: 79\n" 1800 | ], 1801 | "name": "stdout" 1802 | }, 1803 | { 1804 | "output_type": "stream", 1805 | "text": [ 1806 | "100%|██████████| 1875/1875 [00:13<00:00, 135.92it/s]\n", 1807 | " 1%| | 14/1875 [00:00<00:13, 136.80it/s]" 1808 | ], 1809 | "name": "stderr" 1810 | }, 1811 | { 1812 | "output_type": "stream", 1813 | "text": [ 1814 | "======> epoch: 79/120, Loss:0.026165591552853584\n", 1815 | "Entering Epoch: 80\n" 1816 | ], 1817 | "name": "stdout" 1818 | }, 1819 | { 1820 | "output_type": "stream", 1821 | "text": [ 1822 | "100%|██████████| 1875/1875 [00:13<00:00, 136.73it/s]\n", 1823 | " 1%| | 13/1875 [00:00<00:15, 122.31it/s]" 1824 | ], 1825 | "name": "stderr" 1826 | }, 1827 | { 1828 | "output_type": "stream", 1829 | "text": [ 1830 | "======> epoch: 80/120, Loss:0.028156444430351257\n", 1831 | "Entering Epoch: 81\n" 1832 | ], 1833 | "name": "stdout" 1834 | }, 1835 | { 1836 | "output_type": "stream", 1837 | "text": [ 1838 | "100%|██████████| 1875/1875 [00:13<00:00, 138.49it/s]\n", 1839 | " 1%| | 14/1875 [00:00<00:14, 132.58it/s]" 1840 | ], 1841 | "name": "stderr" 1842 | }, 1843 | { 1844 | "output_type": "stream", 1845 | "text": [ 1846 | "======> epoch: 81/120, Loss:0.02646087110042572\n", 1847 | "Entering Epoch: 82\n" 1848 | ], 1849 | "name": "stdout" 1850 | }, 1851 | { 1852 | "output_type": "stream", 1853 | "text": [ 1854 | "100%|██████████| 1875/1875 [00:13<00:00, 136.32it/s]\n", 1855 | " 1%| | 14/1875 [00:00<00:13, 139.55it/s]" 1856 | ], 1857 | "name": "stderr" 1858 | }, 1859 | { 1860 | "output_type": "stream", 1861 | "text": [ 1862 | "======> epoch: 82/120, Loss:0.024330152198672295\n", 1863 | "Entering Epoch: 83\n" 1864 | ], 1865 | "name": "stdout" 1866 | }, 1867 | { 1868 | "output_type": "stream", 1869 | "text": [ 1870 | "100%|██████████| 1875/1875 [00:13<00:00, 138.03it/s]\n", 1871 | " 1%| | 14/1875 [00:00<00:13, 135.96it/s]" 1872 | ], 1873 | "name": "stderr" 1874 | }, 1875 | { 1876 | "output_type": "stream", 1877 | "text": [ 1878 | "======> epoch: 83/120, Loss:0.025489648804068565\n", 1879 | "Entering Epoch: 84\n" 1880 | ], 1881 | "name": "stdout" 1882 | }, 1883 | { 1884 | "output_type": "stream", 1885 | "text": [ 1886 | "100%|██████████| 1875/1875 [00:13<00:00, 138.71it/s]\n", 1887 | " 1%| | 13/1875 [00:00<00:14, 129.89it/s]" 1888 | ], 1889 | "name": "stderr" 1890 | }, 1891 | { 1892 | "output_type": "stream", 1893 | "text": [ 1894 | "======> epoch: 84/120, Loss:0.02928599715232849\n", 1895 | "Entering Epoch: 85\n" 1896 | ], 1897 | "name": "stdout" 1898 | }, 1899 | { 1900 | "output_type": "stream", 1901 | "text": [ 1902 | "100%|██████████| 1875/1875 [00:13<00:00, 135.81it/s]\n", 1903 | " 1%| | 13/1875 [00:00<00:15, 122.54it/s]" 1904 | ], 1905 | "name": "stderr" 1906 | }, 1907 | { 1908 | "output_type": "stream", 1909 | "text": [ 1910 | "======> epoch: 85/120, Loss:0.024828536435961723\n", 1911 | "Entering Epoch: 86\n" 1912 | ], 1913 | "name": "stdout" 1914 | }, 1915 | { 1916 | "output_type": "stream", 1917 | "text": [ 1918 | "100%|██████████| 1875/1875 [00:13<00:00, 138.37it/s]\n", 1919 | " 1%| | 15/1875 [00:00<00:13, 142.14it/s]" 1920 | ], 1921 | "name": "stderr" 1922 | }, 1923 | { 1924 | "output_type": "stream", 1925 | "text": [ 1926 | "======> epoch: 86/120, Loss:0.02515496127307415\n", 1927 | "Entering Epoch: 87\n" 1928 | ], 1929 | "name": "stdout" 1930 | }, 1931 | { 1932 | "output_type": "stream", 1933 | "text": [ 1934 | "100%|██████████| 1875/1875 [00:13<00:00, 137.77it/s]\n", 1935 | " 1%| | 14/1875 [00:00<00:14, 130.82it/s]" 1936 | ], 1937 | "name": "stderr" 1938 | }, 1939 | { 1940 | "output_type": "stream", 1941 | "text": [ 1942 | "======> epoch: 87/120, Loss:0.029436606913805008\n", 1943 | "Entering Epoch: 88\n" 1944 | ], 1945 | "name": "stdout" 1946 | }, 1947 | { 1948 | "output_type": "stream", 1949 | "text": [ 1950 | "100%|██████████| 1875/1875 [00:13<00:00, 135.91it/s]\n", 1951 | " 1%| | 16/1875 [00:00<00:12, 151.10it/s]" 1952 | ], 1953 | "name": "stderr" 1954 | }, 1955 | { 1956 | "output_type": "stream", 1957 | "text": [ 1958 | "======> epoch: 88/120, Loss:0.025549031794071198\n", 1959 | "Entering Epoch: 89\n" 1960 | ], 1961 | "name": "stdout" 1962 | }, 1963 | { 1964 | "output_type": "stream", 1965 | "text": [ 1966 | "100%|██████████| 1875/1875 [00:13<00:00, 139.44it/s]\n", 1967 | " 1%| | 14/1875 [00:00<00:13, 136.03it/s]" 1968 | ], 1969 | "name": "stderr" 1970 | }, 1971 | { 1972 | "output_type": "stream", 1973 | "text": [ 1974 | "======> epoch: 89/120, Loss:0.025611326098442078\n", 1975 | "Entering Epoch: 90\n" 1976 | ], 1977 | "name": "stdout" 1978 | }, 1979 | { 1980 | "output_type": "stream", 1981 | "text": [ 1982 | "100%|██████████| 1875/1875 [00:13<00:00, 135.33it/s]\n", 1983 | " 1%| | 14/1875 [00:00<00:13, 137.77it/s]" 1984 | ], 1985 | "name": "stderr" 1986 | }, 1987 | { 1988 | "output_type": "stream", 1989 | "text": [ 1990 | "======> epoch: 90/120, Loss:0.021191325038671494\n", 1991 | "Entering Epoch: 91\n" 1992 | ], 1993 | "name": "stdout" 1994 | }, 1995 | { 1996 | "output_type": "stream", 1997 | "text": [ 1998 | "100%|██████████| 1875/1875 [00:13<00:00, 137.74it/s]\n", 1999 | " 1%| | 15/1875 [00:00<00:13, 142.47it/s]" 2000 | ], 2001 | "name": "stderr" 2002 | }, 2003 | { 2004 | "output_type": "stream", 2005 | "text": [ 2006 | "======> epoch: 91/120, Loss:0.027545863762497902\n", 2007 | "Entering Epoch: 92\n" 2008 | ], 2009 | "name": "stdout" 2010 | }, 2011 | { 2012 | "output_type": "stream", 2013 | "text": [ 2014 | "100%|██████████| 1875/1875 [00:13<00:00, 141.15it/s]\n", 2015 | " 1%| | 14/1875 [00:00<00:13, 139.11it/s]" 2016 | ], 2017 | "name": "stderr" 2018 | }, 2019 | { 2020 | "output_type": "stream", 2021 | "text": [ 2022 | "======> epoch: 92/120, Loss:0.026861516758799553\n", 2023 | "Entering Epoch: 93\n" 2024 | ], 2025 | "name": "stdout" 2026 | }, 2027 | { 2028 | "output_type": "stream", 2029 | "text": [ 2030 | "100%|██████████| 1875/1875 [00:13<00:00, 142.65it/s]\n", 2031 | " 1%| | 15/1875 [00:00<00:12, 143.28it/s]" 2032 | ], 2033 | "name": "stderr" 2034 | }, 2035 | { 2036 | "output_type": "stream", 2037 | "text": [ 2038 | "======> epoch: 93/120, Loss:0.02385450340807438\n", 2039 | "Entering Epoch: 94\n" 2040 | ], 2041 | "name": "stdout" 2042 | }, 2043 | { 2044 | "output_type": "stream", 2045 | "text": [ 2046 | "100%|██████████| 1875/1875 [00:13<00:00, 142.42it/s]\n", 2047 | " 1%| | 13/1875 [00:00<00:15, 122.30it/s]" 2048 | ], 2049 | "name": "stderr" 2050 | }, 2051 | { 2052 | "output_type": "stream", 2053 | "text": [ 2054 | "======> epoch: 94/120, Loss:0.022495916113257408\n", 2055 | "Entering Epoch: 95\n" 2056 | ], 2057 | "name": "stdout" 2058 | }, 2059 | { 2060 | "output_type": "stream", 2061 | "text": [ 2062 | "100%|██████████| 1875/1875 [00:12<00:00, 144.76it/s]\n", 2063 | " 1%| | 14/1875 [00:00<00:13, 139.96it/s]" 2064 | ], 2065 | "name": "stderr" 2066 | }, 2067 | { 2068 | "output_type": "stream", 2069 | "text": [ 2070 | "======> epoch: 95/120, Loss:0.02676970884203911\n", 2071 | "Entering Epoch: 96\n" 2072 | ], 2073 | "name": "stdout" 2074 | }, 2075 | { 2076 | "output_type": "stream", 2077 | "text": [ 2078 | "100%|██████████| 1875/1875 [00:12<00:00, 144.74it/s]\n", 2079 | " 1%| | 13/1875 [00:00<00:14, 129.75it/s]" 2080 | ], 2081 | "name": "stderr" 2082 | }, 2083 | { 2084 | "output_type": "stream", 2085 | "text": [ 2086 | "======> epoch: 96/120, Loss:0.025168895721435547\n", 2087 | "Entering Epoch: 97\n" 2088 | ], 2089 | "name": "stdout" 2090 | }, 2091 | { 2092 | "output_type": "stream", 2093 | "text": [ 2094 | "100%|██████████| 1875/1875 [00:12<00:00, 145.64it/s]\n", 2095 | " 1%| | 14/1875 [00:00<00:13, 139.87it/s]" 2096 | ], 2097 | "name": "stderr" 2098 | }, 2099 | { 2100 | "output_type": "stream", 2101 | "text": [ 2102 | "======> epoch: 97/120, Loss:0.021699000149965286\n", 2103 | "Entering Epoch: 98\n" 2104 | ], 2105 | "name": "stdout" 2106 | }, 2107 | { 2108 | "output_type": "stream", 2109 | "text": [ 2110 | "100%|██████████| 1875/1875 [00:13<00:00, 141.04it/s]\n", 2111 | " 1%| | 12/1875 [00:00<00:16, 115.37it/s]" 2112 | ], 2113 | "name": "stderr" 2114 | }, 2115 | { 2116 | "output_type": "stream", 2117 | "text": [ 2118 | "======> epoch: 98/120, Loss:0.02692207507789135\n", 2119 | "Entering Epoch: 99\n" 2120 | ], 2121 | "name": "stdout" 2122 | }, 2123 | { 2124 | "output_type": "stream", 2125 | "text": [ 2126 | "100%|██████████| 1875/1875 [00:13<00:00, 141.61it/s]\n", 2127 | " 1%| | 14/1875 [00:00<00:13, 132.97it/s]" 2128 | ], 2129 | "name": "stderr" 2130 | }, 2131 | { 2132 | "output_type": "stream", 2133 | "text": [ 2134 | "======> epoch: 99/120, Loss:0.025918878614902496\n", 2135 | "Entering Epoch: 100\n" 2136 | ], 2137 | "name": "stdout" 2138 | }, 2139 | { 2140 | "output_type": "stream", 2141 | "text": [ 2142 | "100%|██████████| 1875/1875 [00:13<00:00, 141.66it/s]\n", 2143 | " 1%| | 15/1875 [00:00<00:13, 142.47it/s]" 2144 | ], 2145 | "name": "stderr" 2146 | }, 2147 | { 2148 | "output_type": "stream", 2149 | "text": [ 2150 | "======> epoch: 100/120, Loss:0.02890481799840927\n", 2151 | "Entering Epoch: 101\n" 2152 | ], 2153 | "name": "stdout" 2154 | }, 2155 | { 2156 | "output_type": "stream", 2157 | "text": [ 2158 | "100%|██████████| 1875/1875 [00:13<00:00, 142.77it/s]\n", 2159 | " 1%| | 13/1875 [00:00<00:14, 127.57it/s]" 2160 | ], 2161 | "name": "stderr" 2162 | }, 2163 | { 2164 | "output_type": "stream", 2165 | "text": [ 2166 | "======> epoch: 101/120, Loss:0.027479737997055054\n", 2167 | "Entering Epoch: 102\n" 2168 | ], 2169 | "name": "stdout" 2170 | }, 2171 | { 2172 | "output_type": "stream", 2173 | "text": [ 2174 | "100%|██████████| 1875/1875 [00:13<00:00, 142.68it/s]\n", 2175 | " 1%| | 15/1875 [00:00<00:12, 143.94it/s]" 2176 | ], 2177 | "name": "stderr" 2178 | }, 2179 | { 2180 | "output_type": "stream", 2181 | "text": [ 2182 | "======> epoch: 102/120, Loss:0.0239412859082222\n", 2183 | "Entering Epoch: 103\n" 2184 | ], 2185 | "name": "stdout" 2186 | }, 2187 | { 2188 | "output_type": "stream", 2189 | "text": [ 2190 | "100%|██████████| 1875/1875 [00:13<00:00, 140.72it/s]\n", 2191 | " 1%| | 15/1875 [00:00<00:12, 147.15it/s]" 2192 | ], 2193 | "name": "stderr" 2194 | }, 2195 | { 2196 | "output_type": "stream", 2197 | "text": [ 2198 | "======> epoch: 103/120, Loss:0.02598128281533718\n", 2199 | "Entering Epoch: 104\n" 2200 | ], 2201 | "name": "stdout" 2202 | }, 2203 | { 2204 | "output_type": "stream", 2205 | "text": [ 2206 | "100%|██████████| 1875/1875 [00:13<00:00, 142.46it/s]\n", 2207 | " 1%| | 15/1875 [00:00<00:13, 141.86it/s]" 2208 | ], 2209 | "name": "stderr" 2210 | }, 2211 | { 2212 | "output_type": "stream", 2213 | "text": [ 2214 | "======> epoch: 104/120, Loss:0.025640787556767464\n", 2215 | "Entering Epoch: 105\n" 2216 | ], 2217 | "name": "stdout" 2218 | }, 2219 | { 2220 | "output_type": "stream", 2221 | "text": [ 2222 | "100%|██████████| 1875/1875 [00:13<00:00, 142.43it/s]\n", 2223 | " 1%| | 14/1875 [00:00<00:13, 133.60it/s]" 2224 | ], 2225 | "name": "stderr" 2226 | }, 2227 | { 2228 | "output_type": "stream", 2229 | "text": [ 2230 | "======> epoch: 105/120, Loss:0.023611973971128464\n", 2231 | "Entering Epoch: 106\n" 2232 | ], 2233 | "name": "stdout" 2234 | }, 2235 | { 2236 | "output_type": "stream", 2237 | "text": [ 2238 | "100%|██████████| 1875/1875 [00:13<00:00, 140.00it/s]\n", 2239 | " 1%| | 14/1875 [00:00<00:14, 129.80it/s]" 2240 | ], 2241 | "name": "stderr" 2242 | }, 2243 | { 2244 | "output_type": "stream", 2245 | "text": [ 2246 | "======> epoch: 106/120, Loss:0.026524612680077553\n", 2247 | "Entering Epoch: 107\n" 2248 | ], 2249 | "name": "stdout" 2250 | }, 2251 | { 2252 | "output_type": "stream", 2253 | "text": [ 2254 | "100%|██████████| 1875/1875 [00:13<00:00, 138.97it/s]\n", 2255 | " 1%| | 14/1875 [00:00<00:13, 137.59it/s]" 2256 | ], 2257 | "name": "stderr" 2258 | }, 2259 | { 2260 | "output_type": "stream", 2261 | "text": [ 2262 | "======> epoch: 107/120, Loss:0.024700744077563286\n", 2263 | "Entering Epoch: 108\n" 2264 | ], 2265 | "name": "stdout" 2266 | }, 2267 | { 2268 | "output_type": "stream", 2269 | "text": [ 2270 | "100%|██████████| 1875/1875 [00:13<00:00, 139.44it/s]\n", 2271 | " 1%| | 14/1875 [00:00<00:13, 133.04it/s]" 2272 | ], 2273 | "name": "stderr" 2274 | }, 2275 | { 2276 | "output_type": "stream", 2277 | "text": [ 2278 | "======> epoch: 108/120, Loss:0.02533978782594204\n", 2279 | "Entering Epoch: 109\n" 2280 | ], 2281 | "name": "stdout" 2282 | }, 2283 | { 2284 | "output_type": "stream", 2285 | "text": [ 2286 | "100%|██████████| 1875/1875 [00:13<00:00, 137.55it/s]\n", 2287 | " 1%| | 14/1875 [00:00<00:14, 132.57it/s]" 2288 | ], 2289 | "name": "stderr" 2290 | }, 2291 | { 2292 | "output_type": "stream", 2293 | "text": [ 2294 | "======> epoch: 109/120, Loss:0.024778911843895912\n", 2295 | "Entering Epoch: 110\n" 2296 | ], 2297 | "name": "stdout" 2298 | }, 2299 | { 2300 | "output_type": "stream", 2301 | "text": [ 2302 | "100%|██████████| 1875/1875 [00:13<00:00, 142.79it/s]\n", 2303 | " 1%| | 13/1875 [00:00<00:14, 129.55it/s]" 2304 | ], 2305 | "name": "stderr" 2306 | }, 2307 | { 2308 | "output_type": "stream", 2309 | "text": [ 2310 | "======> epoch: 110/120, Loss:0.02427179552614689\n", 2311 | "Entering Epoch: 111\n" 2312 | ], 2313 | "name": "stdout" 2314 | }, 2315 | { 2316 | "output_type": "stream", 2317 | "text": [ 2318 | "100%|██████████| 1875/1875 [00:12<00:00, 145.06it/s]\n", 2319 | " 1%| | 15/1875 [00:00<00:13, 142.98it/s]" 2320 | ], 2321 | "name": "stderr" 2322 | }, 2323 | { 2324 | "output_type": "stream", 2325 | "text": [ 2326 | "======> epoch: 111/120, Loss:0.02724272385239601\n", 2327 | "Entering Epoch: 112\n" 2328 | ], 2329 | "name": "stdout" 2330 | }, 2331 | { 2332 | "output_type": "stream", 2333 | "text": [ 2334 | "100%|██████████| 1875/1875 [00:12<00:00, 145.94it/s]\n", 2335 | " 1%| | 15/1875 [00:00<00:12, 146.89it/s]" 2336 | ], 2337 | "name": "stderr" 2338 | }, 2339 | { 2340 | "output_type": "stream", 2341 | "text": [ 2342 | "======> epoch: 112/120, Loss:0.025939742103219032\n", 2343 | "Entering Epoch: 113\n" 2344 | ], 2345 | "name": "stdout" 2346 | }, 2347 | { 2348 | "output_type": "stream", 2349 | "text": [ 2350 | "100%|██████████| 1875/1875 [00:12<00:00, 152.17it/s]\n", 2351 | " 1%| | 14/1875 [00:00<00:13, 138.99it/s]" 2352 | ], 2353 | "name": "stderr" 2354 | }, 2355 | { 2356 | "output_type": "stream", 2357 | "text": [ 2358 | "======> epoch: 113/120, Loss:0.025211431086063385\n", 2359 | "Entering Epoch: 114\n" 2360 | ], 2361 | "name": "stdout" 2362 | }, 2363 | { 2364 | "output_type": "stream", 2365 | "text": [ 2366 | "100%|██████████| 1875/1875 [00:12<00:00, 154.45it/s]\n", 2367 | " 1%| | 16/1875 [00:00<00:12, 154.32it/s]" 2368 | ], 2369 | "name": "stderr" 2370 | }, 2371 | { 2372 | "output_type": "stream", 2373 | "text": [ 2374 | "======> epoch: 114/120, Loss:0.023597819730639458\n", 2375 | "Entering Epoch: 115\n" 2376 | ], 2377 | "name": "stdout" 2378 | }, 2379 | { 2380 | "output_type": "stream", 2381 | "text": [ 2382 | "100%|██████████| 1875/1875 [00:12<00:00, 154.16it/s]\n", 2383 | " 1%| | 14/1875 [00:00<00:13, 139.95it/s]" 2384 | ], 2385 | "name": "stderr" 2386 | }, 2387 | { 2388 | "output_type": "stream", 2389 | "text": [ 2390 | "======> epoch: 115/120, Loss:0.022066619247198105\n", 2391 | "Entering Epoch: 116\n" 2392 | ], 2393 | "name": "stdout" 2394 | }, 2395 | { 2396 | "output_type": "stream", 2397 | "text": [ 2398 | "100%|██████████| 1875/1875 [00:12<00:00, 153.51it/s]\n", 2399 | " 1%| | 16/1875 [00:00<00:11, 156.35it/s]" 2400 | ], 2401 | "name": "stderr" 2402 | }, 2403 | { 2404 | "output_type": "stream", 2405 | "text": [ 2406 | "======> epoch: 116/120, Loss:0.02377207949757576\n", 2407 | "Entering Epoch: 117\n" 2408 | ], 2409 | "name": "stdout" 2410 | }, 2411 | { 2412 | "output_type": "stream", 2413 | "text": [ 2414 | "100%|██████████| 1875/1875 [00:12<00:00, 153.45it/s]\n", 2415 | " 1%| | 14/1875 [00:00<00:13, 137.90it/s]" 2416 | ], 2417 | "name": "stderr" 2418 | }, 2419 | { 2420 | "output_type": "stream", 2421 | "text": [ 2422 | "======> epoch: 117/120, Loss:0.024058736860752106\n", 2423 | "Entering Epoch: 118\n" 2424 | ], 2425 | "name": "stdout" 2426 | }, 2427 | { 2428 | "output_type": "stream", 2429 | "text": [ 2430 | "100%|██████████| 1875/1875 [00:12<00:00, 153.33it/s]\n", 2431 | " 1%| | 13/1875 [00:00<00:14, 126.31it/s]" 2432 | ], 2433 | "name": "stderr" 2434 | }, 2435 | { 2436 | "output_type": "stream", 2437 | "text": [ 2438 | "======> epoch: 118/120, Loss:0.027325334027409554\n", 2439 | "Entering Epoch: 119\n" 2440 | ], 2441 | "name": "stdout" 2442 | }, 2443 | { 2444 | "output_type": "stream", 2445 | "text": [ 2446 | "100%|██████████| 1875/1875 [00:12<00:00, 152.38it/s]" 2447 | ], 2448 | "name": "stderr" 2449 | }, 2450 | { 2451 | "output_type": "stream", 2452 | "text": [ 2453 | "======> epoch: 119/120, Loss:0.025885485112667084\n" 2454 | ], 2455 | "name": "stdout" 2456 | }, 2457 | { 2458 | "output_type": "stream", 2459 | "text": [ 2460 | "\n" 2461 | ], 2462 | "name": "stderr" 2463 | } 2464 | ] 2465 | }, 2466 | { 2467 | "cell_type": "code", 2468 | "metadata": { 2469 | "id": "w7Aa0DqlCou-", 2470 | "colab_type": "code", 2471 | "colab": { 2472 | "base_uri": "https://localhost:8080/", 2473 | "height": 282 2474 | }, 2475 | "outputId": "c46d2bf8-f2ff-4e75-bfc2-050b6cacecc1" 2476 | }, 2477 | "source": [ 2478 | "plt.plot(range(len(losslist)),losslist)" 2479 | ], 2480 | "execution_count": 12, 2481 | "outputs": [ 2482 | { 2483 | "output_type": "execute_result", 2484 | "data": { 2485 | "text/plain": [ 2486 | "[]" 2487 | ] 2488 | }, 2489 | "metadata": { 2490 | "tags": [] 2491 | }, 2492 | "execution_count": 12 2493 | }, 2494 | { 2495 | "output_type": "display_data", 2496 | "data": { 2497 | "image/png": "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\n", 2498 | "text/plain": [ 2499 | "
" 2500 | ] 2501 | }, 2502 | "metadata": { 2503 | "tags": [], 2504 | "needs_background": "light" 2505 | } 2506 | } 2507 | ] 2508 | }, 2509 | { 2510 | "cell_type": "code", 2511 | "metadata": { 2512 | "id": "AX86xTzFC3tK", 2513 | "colab_type": "code", 2514 | "colab": { 2515 | "base_uri": "https://localhost:8080/", 2516 | "height": 1000 2517 | }, 2518 | "outputId": "6393a834-77bc-4130-860d-f865184901da" 2519 | }, 2520 | "source": [ 2521 | "\"\"\"Here, we try to visualize some of the results.\n", 2522 | " We randomly generate 6 numbers in between 1 and 10k , run them through the model,\n", 2523 | " and show the results with comparisons\n", 2524 | " \n", 2525 | " \"\"\"\n", 2526 | "\n", 2527 | "\n", 2528 | "\n", 2529 | "\n", 2530 | "f,axes= plt.subplots(6,3,figsize=(20,20))\n", 2531 | "axes[0,0].set_title(\"Original Image\")\n", 2532 | "axes[0,1].set_title(\"Dirty Image\")\n", 2533 | "axes[0,2].set_title(\"Cleaned Image\")\n", 2534 | "\n", 2535 | "test_imgs=np.random.randint(0,10000,size=6)\n", 2536 | "for idx in range((6)):\n", 2537 | " dirty=testset[test_imgs[idx]][0]\n", 2538 | " clean=testset[test_imgs[idx]][1]\n", 2539 | " label=testset[test_imgs[idx]][2]\n", 2540 | " dirty=dirty.view(dirty.size(0),-1).type(torch.FloatTensor)\n", 2541 | " dirty=dirty.to(device)\n", 2542 | " output=model(dirty)\n", 2543 | " \n", 2544 | " output=output.view(1,28,28)\n", 2545 | " output=output.permute(1,2,0).squeeze(2)\n", 2546 | " output=output.detach().cpu().numpy()\n", 2547 | " \n", 2548 | " dirty=dirty.view(1,28,28)\n", 2549 | " dirty=dirty.permute(1,2,0).squeeze(2)\n", 2550 | " dirty=dirty.detach().cpu().numpy()\n", 2551 | " \n", 2552 | " clean=clean.permute(1,2,0).squeeze(2)\n", 2553 | " clean=clean.detach().cpu().numpy()\n", 2554 | " \n", 2555 | " axes[idx,0].imshow(clean,cmap=\"gray\")\n", 2556 | " axes[idx,1].imshow(dirty,cmap=\"gray\")\n", 2557 | " axes[idx,2].imshow(output,cmap=\"gray\")" 2558 | ], 2559 | "execution_count": 13, 2560 | "outputs": [ 2561 | { 2562 | "output_type": "display_data", 2563 | "data": { 2564 | "image/png": "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5t71LV261K299957o6ypqcmtLbqUn5u7UNKfSlplZitK2W06/Jf9YTP7S0kbJF1bmSMCAGocfQIA0Bb6BAql3SE6hPDfkvxvfUt/UN7jAADyhj4BAGgLfQJFk7xYDAAAAACAno4hGgAAAACARAzRAAAAAAAkMm8jW8XuzKx6d5Yha9N11mbsvPG2cEvS1KlTq3uQGhBCyHrtDYAaVV9fH7K2YFfLwIED3XzOnDluvmDBgih766233Np9+/ZF2auvvurWnnDCCVE2efJkt3b+/PluftFFF0XZO++849Zu2LDBzYvqzTffVFNTE30CyJlanidmzJjh5hdeeGGU9e/f361tbm6OsoMHD7q1vXrFz4f27u2vvDp06JCbr127NspuueUWt/all16KMu+8RZI1T/BMNAAAAAAAiRiiAQAAAABIxBANAAAAAEAihmgAAAAAABL5rzwvsKzFW2b+bpFqLl7rKO9aZs2aVf2DAECBeMu/JOm6665z85NPPjnKsnqKt8DlpJNOcmtvvfXWKMtaGPPyyy+7+euvvx5le/bscWsBAGnWr1/v5llLJb2FmQ0NDW5t3759kzLJ7zWtra1ubVNTk5t///vfj7Jly5a5tS0tLW7eE/FMNAAAAAAAiRiiAQAAAABIxBANAAAAAEAihmgAAAAAABIxRAMAAAAAkMiquX3azGp31XUHzJw5080vueSSKJsyZUry7WZtDp86dWrybeD/CyH463EB1Kz6+vrgbTHNm8GDB7v5DTfcEGXz5s1za70t4Vm3y8btjnvzzTfV1NREnwBypijzRJb33nsvyoYMGeLWehu3lyxZ4tb+5Cc/cfOFCxdGWXNzc1tH7FGy5gmeiQYAAAAAIBFDNAAAAAAAiRiiAQAAAABIxBANAAAAAECidheLmdkYST+T1CApSJodQvg3M5sp6a8l7SiV3hZCeKad2yr0IgDUFhaLAdVRzj5RlMViqH0sFgOqh3mievr16+fmBw4cqPJJiiFrnuid8GebJd0aQlhuZkdLetnMni997YchhB+U65AAgFyiTwAA2kKfQKG0O0SHELZI2lL6eK+ZrZY0utIHAwDkA30CANAW+gSKpkOviTazsZImSvptKfqGma00szlmNjTjz0w3s2VmtqxLJwUA1Lyu9gnemxIAio15AkXQ7mui/1+h2VGSlkj6XgjhMTNrkLRTh1/X8E+SRoUQ/qKd2+A1DKgaXhMNVFc5+gSviUa18JpooPqYJyqP10SXV9Y8kfRMtJn1kfSopF+EEB4r3eC2EEJLCKFV0n2SPleuwwIA8oU+AQBoC30CRdLua6LNzCTdL2l1COHuI/JRpdc3SNLVkl6rzBEBALWMPgEAaAt9onp4xrk6UrZzXyjpTyWtMrMVpew2Sdeb2Tk6/OMX6yX9TUVOCACodfQJAEBb6BMolOTXRJflzngNA6qI10QD+cNrolEtvCYayCfmCVRTl14TDQAAAAAAGKIBAAAAAEjGEA0AAAAAQCKGaAAAAAAAEjFEAwAAAACQiCEaAAAAAIBEDNEAAAAAACRiiAYAAAAAIJGFUL33KzezHZI2lD4dLmln1e68uop8bVI+ru/EEMKI7j4EgI6hTxRGHq6PPgHk0BF9Ig+PM11R5OvLy7Vl9omqDtGfuGOzZSGESd1y5xVW5GuTin99AGpDkR9rinxtUvGvD0D3K/rjTJGvrwjXxo9zAwAAAACQiCEaAAAAAIBE3TlEz+7G+660Il+bVPzrA1AbivxYU+Rrk4p/fQC6X9EfZ4p8fbm/tm57TTQAAAAAAHnDj3MDAAAAAJCo6kO0mU0zs7fMbI2Zzaj2/Zebmc0xs+1m9toR2TAze97M3in9PrQ7z9hZZjbGzBaZ2Rtm9rqZfbOUF+L6ANQm+kR+0CcAdAf6RH4UtU9UdYg2szpJP5L0h5ImSLrezCZU8wwVMFfStE9lMyQtDCGcImlh6fM8apZ0awhhgqTJkr5e+v9VlOsDUGPoE7lDnwBQVfSJ3Clkn6j2M9Gfk7QmhLAuhHBQ0oOSrqryGcoqhPCipF2fiq+SNK/08TxJX67qocokhLAlhLC89PFeSasljVZBrg9ATaJP5Ah9AkA3oE/kSFH7RLWH6NGSNh3x+eZSVjQNIYQtpY+3SmrozsOUg5mNlTRR0m9VwOsDUDPoEzlFnwBQJfSJnCpSn2CxWIWFw+vPc70C3cyOkvSopG+FED488mtFuD4A6E5FeBylTwBA5RThcbRofaLaQ/R7ksYc8fnxpaxotpnZKEkq/b69m8/TaWbWR4f/wv8ihPBYKS7M9QGoOfSJnKFPAKgy+kTOFLFPVHuIXirpFDMbZ2Z9JV0naX6Vz1AN8yXdWPr4RklPduNZOs3MTNL9klaHEO4+4kuFuD4ANYk+kSP0CQDdgD6RI0XtE3b42fMq3qHZ5ZL+VVKdpDkhhO9V9QBlZmYPSJoiabikbZJul/SEpIclnSBpg6RrQwifXhZQ88zsIkkvSVolqbUU36bDr2PI/fUBqE30ifygTwDoDvSJ/Chqn6j6EA0AAAAAQF6xWAwAAAAAgEQM0QAAAAAAJGKIBgAAAAAgEUM0AAAAAACJGKIBAAAAAEjEEA0AAAAAQCKGaAAAAAAAEjFEAwAAAACQ6P8CyB8PbVt8L14AAAAASUVORK5CYII=\n", 2565 | "text/plain": [ 2566 | "
" 2567 | ] 2568 | }, 2569 | "metadata": { 2570 | "tags": [], 2571 | "needs_background": "light" 2572 | } 2573 | } 2574 | ] 2575 | } 2576 | ] 2577 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Denoising Autoencoder 2 | 3 | ## Description 4 | ### Autoencoder 5 | * An autoencoder is a type of artificial neural network used to learn efficient data codings in an unsupervised manner. 6 | * The aim of an autoencoder is to learn a representation (encoding) for a set of data, typically for dimensionality reduction, by training the network to ignore signal “noise”. 7 | * It has one encoding and a decoding function. 8 | * 9 | 10 | * 11 | * Where g is the encoding function and f is the decoding function. 12 | * The encoding and decoding is done in order to take the most important things that represents the input. 13 | * The below given image represents an autoencoder. 14 | ![alt text](https://github.com/sakethbachu/denoising_autoencoder/blob/master/img/autoencoder.png) 15 | 16 | ### Denoising Autoencoder 17 | * There is always a risk that the autoencoders learn the identity function. 18 | * Denoising autoencoder solves this problem by corrupting the input images by adding noise in them. 19 | * And also other ways of corrupting is by randomly turning some of the input values to zero. 20 | * When calculating the Loss function, it is important to compare the output values with the original input, not with the corrupted input. 21 | * That way, the risk of learning the identity function instead of extracting features is eliminated. 22 | * The below given images represents the gaussian noise that is added, the left one is a random image without noise and the right one is with noise. 23 | 24 | ![alt text](https://github.com/sakethbachu/denoising_autoencoder/blob/master/img/without%20noise.jpg)   ![alt text](https://github.com/sakethbachu/denoising_autoencoder/blob/master/img/with%20noise.jpg) 25 | 26 | * The below given image describes another type of noise called the speckle noise. 27 | ![alt text](https://github.com/sakethbachu/denoising_autoencoder/blob/master/img/speckle%20noise.jpg) 28 | 29 | ## Methods 30 | In this repository, we have used a linear autoencoder. 31 | 32 | ## Features 33 | 34 | ## Demo 35 | * The below image shows the original, noisy and cleaned image. 36 | ![alt text](https://github.com/sakethbachu/denoising_autoencoder/blob/master/img/demo.png) 37 | 38 | 39 | ## Usage 40 | 41 | ## Requirements 42 | * Pytorch 43 | * MNIST dataset 44 | * OpenCV 45 | -------------------------------------------------------------------------------- /img/autoencoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sakethbachu/denoising_autoencoder/c2e899bcf115388ccfa7229d6ab7355a050c57e2/img/autoencoder.png -------------------------------------------------------------------------------- /img/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sakethbachu/denoising_autoencoder/c2e899bcf115388ccfa7229d6ab7355a050c57e2/img/demo.png -------------------------------------------------------------------------------- /img/denoising ae.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sakethbachu/denoising_autoencoder/c2e899bcf115388ccfa7229d6ab7355a050c57e2/img/denoising ae.png -------------------------------------------------------------------------------- /img/speckle noise.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sakethbachu/denoising_autoencoder/c2e899bcf115388ccfa7229d6ab7355a050c57e2/img/speckle noise.jpg -------------------------------------------------------------------------------- /img/with noise.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sakethbachu/denoising_autoencoder/c2e899bcf115388ccfa7229d6ab7355a050c57e2/img/with noise.jpg -------------------------------------------------------------------------------- /img/without noise.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sakethbachu/denoising_autoencoder/c2e899bcf115388ccfa7229d6ab7355a050c57e2/img/without noise.jpg --------------------------------------------------------------------------------