├── DenoisingAutoencoder.ipynb ├── Loss Curve.png ├── README.md └── download (1).png /DenoisingAutoencoder.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "DenoisingAutoencoder.ipynb", 7 | "version": "0.3.2", 8 | "provenance": [], 9 | "collapsed_sections": [] 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | }, 15 | "accelerator": "GPU" 16 | }, 17 | "cells": [ 18 | { 19 | "metadata": { 20 | "id": "QbygB5YNKEMJ", 21 | "colab_type": "code", 22 | "outputId": "cfca99ba-bbe3-48ed-9ed1-a5c189ad9469", 23 | "colab": { 24 | "base_uri": "https://localhost:8080/", 25 | "height": 35 26 | } 27 | }, 28 | "cell_type": "code", 29 | "source": [ 30 | "import numpy as np\n", 31 | "from keras.datasets import mnist\n", 32 | "import matplotlib.pyplot as plt\n", 33 | "from tqdm import tqdm\n", 34 | "from torchvision import transforms\n", 35 | "import torch.nn as nn\n", 36 | "from torch.utils.data import DataLoader,Dataset\n", 37 | "import torch\n", 38 | "import torch.optim as optim\n", 39 | "from torch.autograd import Variable" 40 | ], 41 | "execution_count": 1, 42 | "outputs": [ 43 | { 44 | "output_type": "stream", 45 | "text": [ 46 | "Using TensorFlow backend.\n" 47 | ], 48 | "name": "stderr" 49 | } 50 | ] 51 | }, 52 | { 53 | "metadata": { 54 | "id": "fbKtjNSyKclx", 55 | "colab_type": "code", 56 | "colab": {} 57 | }, 58 | "cell_type": "code", 59 | "source": [ 60 | "\"\"\"\n", 61 | "Here we load the dataset, add gaussian,poisson,speckle\n", 62 | "\n", 63 | " 'gauss' Gaussian-distributed additive noise.\n", 64 | " 'speckle' Multiplicative noise using out = image + n*image,where\n", 65 | " n is uniform noise with specified mean & variance.\n", 66 | " \n", 67 | "We define a function that adds each noise when called from main function\n", 68 | "Input & Output: np array\n", 69 | " \n", 70 | "\"\"\"\n", 71 | "\n", 72 | "\n", 73 | "def add_noise(img,noise_type=\"gaussian\"):\n", 74 | " \n", 75 | " row,col=28,28\n", 76 | " img=img.astype(np.float32)\n", 77 | " \n", 78 | " if noise_type==\"gaussian\":\n", 79 | " mean=0\n", 80 | " var=10\n", 81 | " sigma=var**.5\n", 82 | " noise=np.random.normal(-5.9,5.9,img.shape)\n", 83 | " noise=noise.reshape(row,col)\n", 84 | " img=img+noise\n", 85 | " return img\n", 86 | "\n", 87 | " if noise_type==\"speckle\":\n", 88 | " noise=np.random.randn(row,col)\n", 89 | " noise=noise.reshape(row,col)\n", 90 | " img=img+img*noise\n", 91 | " return img" 92 | ], 93 | "execution_count": 0, 94 | "outputs": [] 95 | }, 96 | { 97 | "metadata": { 98 | "id": "crPgb8VXOceY", 99 | "colab_type": "code", 100 | "outputId": "ada9c8c1-4bbc-4880-ca46-cfa504885fe9", 101 | "colab": { 102 | "base_uri": "https://localhost:8080/", 103 | "height": 87 104 | } 105 | }, 106 | "cell_type": "code", 107 | "source": [ 108 | "#Here we load the dataset from keras\n", 109 | "(xtrain,ytrain),(xtest,ytest)=mnist.load_data()\n", 110 | "print(\"No of training datapoints:{}\\nNo of Test datapoints:{}\".format(len(xtrain),len(xtest)))" 111 | ], 112 | "execution_count": 3, 113 | "outputs": [ 114 | { 115 | "output_type": "stream", 116 | "text": [ 117 | "Downloading data from https://s3.amazonaws.com/img-datasets/mnist.npz\n", 118 | "11493376/11490434 [==============================] - 4s 0us/step\n", 119 | "No of training datapoints:60000\n", 120 | "No of Test datapoints:10000\n" 121 | ], 122 | "name": "stdout" 123 | } 124 | ] 125 | }, 126 | { 127 | "metadata": { 128 | "id": "7kq9PiLARTic", 129 | "colab_type": "code", 130 | "outputId": "480e62e7-4ed2-4278-c47c-f7770accaad2", 131 | "colab": { 132 | "base_uri": "https://localhost:8080/", 133 | "height": 191 134 | } 135 | }, 136 | "cell_type": "code", 137 | "source": [ 138 | "\"\"\"\n", 139 | "From here onwards,we split the 60k training datapoints into 3 sets each given one type of each noise.\n", 140 | "We shuffle them for better generalization.\n", 141 | "\"\"\"\n", 142 | "noises=[\"gaussian\",\"speckle\"]\n", 143 | "noise_ct=0\n", 144 | "noise_id=0\n", 145 | "traindata=np.zeros((60000,28,28))\n", 146 | "\n", 147 | "\n", 148 | "\n", 149 | "for idx in tqdm(range(len(xtrain))):\n", 150 | " \n", 151 | " if noise_ct<(len(xtrain)/2):\n", 152 | " noise_ct+=1\n", 153 | " traindata[idx]=add_noise(xtrain[idx],noise_type=noises[noise_id])\n", 154 | " \n", 155 | " else:\n", 156 | " print(\"\\n{} noise addition completed to images\".format(noises[noise_id]))\n", 157 | " noise_id+=1\n", 158 | " noise_ct=0\n", 159 | "\n", 160 | "\n", 161 | "print(\"\\n{} noise addition completed to images\".format(noises[noise_id])) \n", 162 | "\n", 163 | "\n", 164 | "\n", 165 | "\n", 166 | "noise_ct=0\n", 167 | "noise_id=0\n", 168 | "testdata=np.zeros((10000,28,28))\n", 169 | "\n", 170 | "for idx in tqdm(range(len(xtest))):\n", 171 | " \n", 172 | " if noise_ct<(len(xtest)/2):\n", 173 | " noise_ct+=1\n", 174 | " x=add_noise(xtest[idx],noise_type=noises[noise_id])\n", 175 | " testdata[idx]=x\n", 176 | " \n", 177 | " else:\n", 178 | " print(\"\\n{} noise addition completed to images\".format(noises[noise_id]))\n", 179 | " noise_id+=1\n", 180 | " noise_ct=0\n", 181 | "\n", 182 | "\n", 183 | "print(\"\\n{} noise addition completed to images\".format(noises[noise_id])) \n", 184 | " " 185 | ], 186 | "execution_count": 10, 187 | "outputs": [ 188 | { 189 | "output_type": "stream", 190 | "text": [ 191 | " 56%|█████▌ | 33686/60000 [00:01<00:01, 23015.07it/s]" 192 | ], 193 | "name": "stderr" 194 | }, 195 | { 196 | "output_type": "stream", 197 | "text": [ 198 | "\n", 199 | "gaussian noise addition completed to images\n" 200 | ], 201 | "name": "stdout" 202 | }, 203 | { 204 | "output_type": "stream", 205 | "text": [ 206 | "100%|██████████| 60000/60000 [00:02<00:00, 22765.24it/s]\n", 207 | " 22%|██▏ | 2182/10000 [00:00<00:00, 21816.48it/s]" 208 | ], 209 | "name": "stderr" 210 | }, 211 | { 212 | "output_type": "stream", 213 | "text": [ 214 | "\n", 215 | "speckle noise addition completed to images\n" 216 | ], 217 | "name": "stdout" 218 | }, 219 | { 220 | "output_type": "stream", 221 | "text": [ 222 | " 87%|████████▋ | 8747/10000 [00:00<00:00, 22026.82it/s]" 223 | ], 224 | "name": "stderr" 225 | }, 226 | { 227 | "output_type": "stream", 228 | "text": [ 229 | "\n", 230 | "gaussian noise addition completed to images\n" 231 | ], 232 | "name": "stdout" 233 | }, 234 | { 235 | "output_type": "stream", 236 | "text": [ 237 | "\r100%|██████████| 10000/10000 [00:00<00:00, 21813.70it/s]" 238 | ], 239 | "name": "stderr" 240 | }, 241 | { 242 | "output_type": "stream", 243 | "text": [ 244 | "\n", 245 | "speckle noise addition completed to images\n" 246 | ], 247 | "name": "stdout" 248 | }, 249 | { 250 | "output_type": "stream", 251 | "text": [ 252 | "\n" 253 | ], 254 | "name": "stderr" 255 | } 256 | ] 257 | }, 258 | { 259 | "metadata": { 260 | "id": "D5WxFXykKB0z", 261 | "colab_type": "code", 262 | "colab": {} 263 | }, 264 | "cell_type": "code", 265 | "source": [ 266 | "" 267 | ], 268 | "execution_count": 0, 269 | "outputs": [] 270 | }, 271 | { 272 | "metadata": { 273 | "id": "r1PruBRYUmYZ", 274 | "colab_type": "code", 275 | "outputId": "78712c1a-755a-433a-cc34-4b501a2fad5a", 276 | "colab": { 277 | "base_uri": "https://localhost:8080/", 278 | "height": 299 279 | } 280 | }, 281 | "cell_type": "code", 282 | "source": [ 283 | "\"\"\"\n", 284 | "Here we Try to visualize, each type of noise that was introduced in the images\n", 285 | "Along with their original versions\n", 286 | "\n", 287 | "\"\"\"\n", 288 | "\n", 289 | "f, axes=plt.subplots(2,2)\n", 290 | "\n", 291 | "#showing images with gaussian noise\n", 292 | "axes[0,0].imshow(xtrain[0],cmap=\"gray\")\n", 293 | "axes[0,0].set_title(\"Original Image\")\n", 294 | "axes[1,0].imshow(traindata[0],cmap='gray')\n", 295 | "axes[1,0].set_title(\"Noised Image\")\n", 296 | "\n", 297 | "#showing images with speckle noise\n", 298 | "axes[0,1].imshow(xtrain[25000],cmap='gray')\n", 299 | "axes[0,1].set_title(\"Original Image\")\n", 300 | "axes[1,1].imshow(traindata[25000],cmap=\"gray\")\n", 301 | "axes[1,1].set_title(\"Noised Image\")\n", 302 | "\n" 303 | ], 304 | "execution_count": 11, 305 | "outputs": [ 306 | { 307 | "output_type": "execute_result", 308 | "data": { 309 | "text/plain": [ 310 | "Text(0.5, 1.0, 'Noised Image')" 311 | ] 312 | }, 313 | "metadata": { 314 | "tags": [] 315 | }, 316 | "execution_count": 11 317 | }, 318 | { 319 | "output_type": "display_data", 320 | "data": { 321 | "image/png": "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\n", 322 | "text/plain": [ 323 | "
" 324 | ] 325 | }, 326 | "metadata": { 327 | "tags": [] 328 | } 329 | } 330 | ] 331 | }, 332 | { 333 | "metadata": { 334 | "id": "Vfchnr-E_kka", 335 | "colab_type": "code", 336 | "colab": {} 337 | }, 338 | "cell_type": "code", 339 | "source": [ 340 | "class noisedDataset(Dataset):\n", 341 | " \n", 342 | " def __init__(self,datasetnoised,datasetclean,labels,transform):\n", 343 | " self.noise=datasetnoised\n", 344 | " self.clean=datasetclean\n", 345 | " self.labels=labels\n", 346 | " self.transform=transform\n", 347 | " \n", 348 | " def __len__(self):\n", 349 | " return len(self.noise)\n", 350 | " \n", 351 | " def __getitem__(self,idx):\n", 352 | " xNoise=self.noise[idx]\n", 353 | " xClean=self.clean[idx]\n", 354 | " y=self.labels[idx]\n", 355 | " \n", 356 | " if self.transform != None:\n", 357 | " xNoise=self.transform(xNoise)\n", 358 | " xClean=self.transform(xClean)\n", 359 | " \n", 360 | " \n", 361 | " return (xNoise,xClean,y)\n", 362 | " \n", 363 | " \n", 364 | " " 365 | ], 366 | "execution_count": 0, 367 | "outputs": [] 368 | }, 369 | { 370 | "metadata": { 371 | "id": "HyzkdVVUC6ps", 372 | "colab_type": "code", 373 | "colab": {} 374 | }, 375 | "cell_type": "code", 376 | "source": [ 377 | "tsfms=transforms.Compose([\n", 378 | " transforms.ToTensor()\n", 379 | "])\n", 380 | "\n", 381 | "trainset=noisedDataset(traindata,xtrain,ytrain,tsfms)\n", 382 | "testset=noisedDataset(testdata,xtest,ytest,tsfms)" 383 | ], 384 | "execution_count": 0, 385 | "outputs": [] 386 | }, 387 | { 388 | "metadata": { 389 | "id": "vTQ_iF1fXxC8", 390 | "colab_type": "code", 391 | "colab": {} 392 | }, 393 | "cell_type": "code", 394 | "source": [ 395 | "\"\"\"\n", 396 | "Here , we create the trainloaders and testloaders.\n", 397 | "Also, we transform the images using standard lib functions\n", 398 | "\"\"\"\n", 399 | "\n", 400 | "\n", 401 | "batch_size=32\n", 402 | "\n", 403 | "\n", 404 | "\n", 405 | "trainloader=DataLoader(trainset,batch_size=32,shuffle=True)\n", 406 | "testloader=DataLoader(testset,batch_size=1,shuffle=True)\n", 407 | "\n" 408 | ], 409 | "execution_count": 0, 410 | "outputs": [] 411 | }, 412 | { 413 | "metadata": { 414 | "id": "1P60Cuv7pQO6", 415 | "colab_type": "code", 416 | "colab": {} 417 | }, 418 | "cell_type": "code", 419 | "source": [ 420 | "\"\"\"\n", 421 | "Here, we define the autoencoder model.\n", 422 | "\"\"\"\n", 423 | "\n", 424 | "class denoising_model(nn.Module):\n", 425 | " def __init__(self):\n", 426 | " super(denoising_model,self).__init__()\n", 427 | " self.encoder=nn.Sequential(\n", 428 | " nn.Linear(28*28,256),\n", 429 | " nn.ReLU(True),\n", 430 | " nn.Linear(256,128),\n", 431 | " nn.ReLU(True),\n", 432 | " nn.Linear(128,64),\n", 433 | " nn.ReLU(True)\n", 434 | " \n", 435 | " )\n", 436 | " \n", 437 | " self.decoder=nn.Sequential(\n", 438 | " nn.Linear(64,128),\n", 439 | " nn.ReLU(True),\n", 440 | " nn.Linear(128,256),\n", 441 | " nn.ReLU(True),\n", 442 | " nn.Linear(256,28*28),\n", 443 | " nn.Sigmoid(),\n", 444 | " )\n", 445 | " \n", 446 | " \n", 447 | " def forward(self,x):\n", 448 | " x=self.encoder(x)\n", 449 | " x=self.decoder(x)\n", 450 | " \n", 451 | " return x\n", 452 | " " 453 | ], 454 | "execution_count": 0, 455 | "outputs": [] 456 | }, 457 | { 458 | "metadata": { 459 | "id": "S_AYl41OsNtt", 460 | "colab_type": "code", 461 | "outputId": "e000921e-4fc4-4597-b5c5-023405347075", 462 | "colab": { 463 | "base_uri": "https://localhost:8080/", 464 | "height": 6257 465 | } 466 | }, 467 | "cell_type": "code", 468 | "source": [ 469 | "#We check whether cuda is available and choose device accordingly\n", 470 | "if torch.cuda.is_available()==True:\n", 471 | " device=\"cuda:0\"\n", 472 | "else:\n", 473 | " device =\"cpu\"\n", 474 | "\n", 475 | " \n", 476 | "model=denoising_model().to(device)\n", 477 | "criterion=nn.MSELoss()\n", 478 | "optimizer=optim.SGD(model.parameters(),lr=0.01,weight_decay=1e-5)\n", 479 | "\n", 480 | "\n", 481 | "epochs=120\n", 482 | "l=len(trainloader)\n", 483 | "losslist=list()\n", 484 | "epochloss=0\n", 485 | "running_loss=0\n", 486 | "for epoch in range(epochs):\n", 487 | " \n", 488 | " print(\"Entering Epoch: \",epoch)\n", 489 | " for dirty,clean,label in tqdm((trainloader)):\n", 490 | " \n", 491 | " \n", 492 | " dirty=dirty.view(dirty.size(0),-1).type(torch.FloatTensor)\n", 493 | " clean=clean.view(clean.size(0),-1).type(torch.FloatTensor)\n", 494 | " dirty,clean=dirty.to(device),clean.to(device)\n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " #-----------------Forward Pass----------------------\n", 499 | " output=model(dirty)\n", 500 | " loss=criterion(output,clean)\n", 501 | " #-----------------Backward Pass---------------------\n", 502 | " optimizer.zero_grad()\n", 503 | " loss.backward()\n", 504 | " optimizer.step()\n", 505 | " \n", 506 | " running_loss+=loss.item()\n", 507 | " epochloss+=loss.item()\n", 508 | " #-----------------Log-------------------------------\n", 509 | " losslist.append(running_loss/l)\n", 510 | " running_loss=0\n", 511 | " print(\"======> epoch: {}/{}, Loss:{}\".format(epoch,epochs,loss.item()))\n", 512 | " \n", 513 | " \n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | "\n", 518 | " " 519 | ], 520 | "execution_count": 17, 521 | "outputs": [ 522 | { 523 | "output_type": "stream", 524 | "text": [ 525 | " 1%| | 13/1875 [00:00<00:14, 129.10it/s]" 526 | ], 527 | "name": "stderr" 528 | }, 529 | { 530 | "output_type": "stream", 531 | "text": [ 532 | "Entering Epoch: 0\n" 533 | ], 534 | "name": "stdout" 535 | }, 536 | { 537 | "output_type": "stream", 538 | "text": [ 539 | "100%|██████████| 1875/1875 [00:05<00:00, 350.93it/s]\n", 540 | " 2%|▏ | 32/1875 [00:00<00:05, 318.70it/s]" 541 | ], 542 | "name": "stderr" 543 | }, 544 | { 545 | "output_type": "stream", 546 | "text": [ 547 | "======> epoch: 0/120, Loss:0.07477772980928421\n", 548 | "Entering Epoch: 1\n" 549 | ], 550 | "name": "stdout" 551 | }, 552 | { 553 | "output_type": "stream", 554 | "text": [ 555 | "100%|██████████| 1875/1875 [00:05<00:00, 353.86it/s]\n", 556 | " 2%|▏ | 35/1875 [00:00<00:05, 347.27it/s]" 557 | ], 558 | "name": "stderr" 559 | }, 560 | { 561 | "output_type": "stream", 562 | "text": [ 563 | "======> epoch: 1/120, Loss:0.07071107625961304\n", 564 | "Entering Epoch: 2\n" 565 | ], 566 | "name": "stdout" 567 | }, 568 | { 569 | "output_type": "stream", 570 | "text": [ 571 | "100%|██████████| 1875/1875 [00:05<00:00, 355.04it/s]\n", 572 | " 2%|▏ | 35/1875 [00:00<00:05, 346.80it/s]" 573 | ], 574 | "name": "stderr" 575 | }, 576 | { 577 | "output_type": "stream", 578 | "text": [ 579 | "======> epoch: 2/120, Loss:0.0689566433429718\n", 580 | "Entering Epoch: 3\n" 581 | ], 582 | "name": "stdout" 583 | }, 584 | { 585 | "output_type": "stream", 586 | "text": [ 587 | "100%|██████████| 1875/1875 [00:05<00:00, 327.84it/s]\n", 588 | " 2%|▏ | 30/1875 [00:00<00:06, 293.31it/s]" 589 | ], 590 | "name": "stderr" 591 | }, 592 | { 593 | "output_type": "stream", 594 | "text": [ 595 | "======> epoch: 3/120, Loss:0.058644551783800125\n", 596 | "Entering Epoch: 4\n" 597 | ], 598 | "name": "stdout" 599 | }, 600 | { 601 | "output_type": "stream", 602 | "text": [ 603 | "100%|██████████| 1875/1875 [00:06<00:00, 306.61it/s]\n", 604 | " 2%|▏ | 30/1875 [00:00<00:06, 298.86it/s]" 605 | ], 606 | "name": "stderr" 607 | }, 608 | { 609 | "output_type": "stream", 610 | "text": [ 611 | "======> epoch: 4/120, Loss:0.055324405431747437\n", 612 | "Entering Epoch: 5\n" 613 | ], 614 | "name": "stdout" 615 | }, 616 | { 617 | "output_type": "stream", 618 | "text": [ 619 | "100%|██████████| 1875/1875 [00:05<00:00, 355.81it/s]\n", 620 | " 2%|▏ | 35/1875 [00:00<00:05, 343.49it/s]" 621 | ], 622 | "name": "stderr" 623 | }, 624 | { 625 | "output_type": "stream", 626 | "text": [ 627 | "======> epoch: 5/120, Loss:0.06583036482334137\n", 628 | "Entering Epoch: 6\n" 629 | ], 630 | "name": "stdout" 631 | }, 632 | { 633 | "output_type": "stream", 634 | "text": [ 635 | "100%|██████████| 1875/1875 [00:05<00:00, 356.87it/s]\n", 636 | " 2%|▏ | 36/1875 [00:00<00:05, 352.24it/s]" 637 | ], 638 | "name": "stderr" 639 | }, 640 | { 641 | "output_type": "stream", 642 | "text": [ 643 | "======> epoch: 6/120, Loss:0.05749344825744629\n", 644 | "Entering Epoch: 7\n" 645 | ], 646 | "name": "stdout" 647 | }, 648 | { 649 | "output_type": "stream", 650 | "text": [ 651 | "100%|██████████| 1875/1875 [00:05<00:00, 354.83it/s]\n", 652 | " 2%|▏ | 36/1875 [00:00<00:05, 351.48it/s]" 653 | ], 654 | "name": "stderr" 655 | }, 656 | { 657 | "output_type": "stream", 658 | "text": [ 659 | "======> epoch: 7/120, Loss:0.05596856027841568\n", 660 | "Entering Epoch: 8\n" 661 | ], 662 | "name": "stdout" 663 | }, 664 | { 665 | "output_type": "stream", 666 | "text": [ 667 | "100%|██████████| 1875/1875 [00:05<00:00, 355.00it/s]\n", 668 | " 2%|▏ | 36/1875 [00:00<00:05, 352.39it/s]" 669 | ], 670 | "name": "stderr" 671 | }, 672 | { 673 | "output_type": "stream", 674 | "text": [ 675 | "======> epoch: 8/120, Loss:0.05280887708067894\n", 676 | "Entering Epoch: 9\n" 677 | ], 678 | "name": "stdout" 679 | }, 680 | { 681 | "output_type": "stream", 682 | "text": [ 683 | "100%|██████████| 1875/1875 [00:05<00:00, 354.03it/s]\n", 684 | " 2%|▏ | 36/1875 [00:00<00:05, 351.55it/s]" 685 | ], 686 | "name": "stderr" 687 | }, 688 | { 689 | "output_type": "stream", 690 | "text": [ 691 | "======> epoch: 9/120, Loss:0.05076480284333229\n", 692 | "Entering Epoch: 10\n" 693 | ], 694 | "name": "stdout" 695 | }, 696 | { 697 | "output_type": "stream", 698 | "text": [ 699 | "100%|██████████| 1875/1875 [00:05<00:00, 355.38it/s]\n", 700 | " 2%|▏ | 32/1875 [00:00<00:05, 318.82it/s]" 701 | ], 702 | "name": "stderr" 703 | }, 704 | { 705 | "output_type": "stream", 706 | "text": [ 707 | "======> epoch: 10/120, Loss:0.05066143721342087\n", 708 | "Entering Epoch: 11\n" 709 | ], 710 | "name": "stdout" 711 | }, 712 | { 713 | "output_type": "stream", 714 | "text": [ 715 | "100%|██████████| 1875/1875 [00:05<00:00, 354.91it/s]\n", 716 | " 2%|▏ | 35/1875 [00:00<00:05, 344.51it/s]" 717 | ], 718 | "name": "stderr" 719 | }, 720 | { 721 | "output_type": "stream", 722 | "text": [ 723 | "======> epoch: 11/120, Loss:0.04446016624569893\n", 724 | "Entering Epoch: 12\n" 725 | ], 726 | "name": "stdout" 727 | }, 728 | { 729 | "output_type": "stream", 730 | "text": [ 731 | "100%|██████████| 1875/1875 [00:05<00:00, 355.07it/s]\n", 732 | " 2%|▏ | 35/1875 [00:00<00:05, 345.20it/s]" 733 | ], 734 | "name": "stderr" 735 | }, 736 | { 737 | "output_type": "stream", 738 | "text": [ 739 | "======> epoch: 12/120, Loss:0.046096790581941605\n", 740 | "Entering Epoch: 13\n" 741 | ], 742 | "name": "stdout" 743 | }, 744 | { 745 | "output_type": "stream", 746 | "text": [ 747 | "100%|██████████| 1875/1875 [00:05<00:00, 355.45it/s]\n", 748 | " 2%|▏ | 36/1875 [00:00<00:05, 351.29it/s]" 749 | ], 750 | "name": "stderr" 751 | }, 752 | { 753 | "output_type": "stream", 754 | "text": [ 755 | "======> epoch: 13/120, Loss:0.047888483852148056\n", 756 | "Entering Epoch: 14\n" 757 | ], 758 | "name": "stdout" 759 | }, 760 | { 761 | "output_type": "stream", 762 | "text": [ 763 | "100%|██████████| 1875/1875 [00:05<00:00, 353.15it/s]\n", 764 | " 2%|▏ | 35/1875 [00:00<00:05, 348.37it/s]" 765 | ], 766 | "name": "stderr" 767 | }, 768 | { 769 | "output_type": "stream", 770 | "text": [ 771 | "======> epoch: 14/120, Loss:0.04347974434494972\n", 772 | "Entering Epoch: 15\n" 773 | ], 774 | "name": "stdout" 775 | }, 776 | { 777 | "output_type": "stream", 778 | "text": [ 779 | "100%|██████████| 1875/1875 [00:05<00:00, 351.83it/s]\n", 780 | " 2%|▏ | 35/1875 [00:00<00:05, 343.83it/s]" 781 | ], 782 | "name": "stderr" 783 | }, 784 | { 785 | "output_type": "stream", 786 | "text": [ 787 | "======> epoch: 15/120, Loss:0.04276827350258827\n", 788 | "Entering Epoch: 16\n" 789 | ], 790 | "name": "stdout" 791 | }, 792 | { 793 | "output_type": "stream", 794 | "text": [ 795 | "100%|██████████| 1875/1875 [00:05<00:00, 352.17it/s]\n", 796 | " 2%|▏ | 34/1875 [00:00<00:05, 338.63it/s]" 797 | ], 798 | "name": "stderr" 799 | }, 800 | { 801 | "output_type": "stream", 802 | "text": [ 803 | "======> epoch: 16/120, Loss:0.04144679382443428\n", 804 | "Entering Epoch: 17\n" 805 | ], 806 | "name": "stdout" 807 | }, 808 | { 809 | "output_type": "stream", 810 | "text": [ 811 | "100%|██████████| 1875/1875 [00:05<00:00, 356.33it/s]\n", 812 | " 2%|▏ | 33/1875 [00:00<00:05, 326.17it/s]" 813 | ], 814 | "name": "stderr" 815 | }, 816 | { 817 | "output_type": "stream", 818 | "text": [ 819 | "======> epoch: 17/120, Loss:0.03927885368466377\n", 820 | "Entering Epoch: 18\n" 821 | ], 822 | "name": "stdout" 823 | }, 824 | { 825 | "output_type": "stream", 826 | "text": [ 827 | "100%|██████████| 1875/1875 [00:06<00:00, 305.32it/s]\n", 828 | " 2%|▏ | 31/1875 [00:00<00:06, 300.98it/s]" 829 | ], 830 | "name": "stderr" 831 | }, 832 | { 833 | "output_type": "stream", 834 | "text": [ 835 | "======> epoch: 18/120, Loss:0.04120118170976639\n", 836 | "Entering Epoch: 19\n" 837 | ], 838 | "name": "stdout" 839 | }, 840 | { 841 | "output_type": "stream", 842 | "text": [ 843 | "100%|██████████| 1875/1875 [00:06<00:00, 305.89it/s]\n", 844 | " 2%|▏ | 31/1875 [00:00<00:06, 302.35it/s]" 845 | ], 846 | "name": "stderr" 847 | }, 848 | { 849 | "output_type": "stream", 850 | "text": [ 851 | "======> epoch: 19/120, Loss:0.03607381507754326\n", 852 | "Entering Epoch: 20\n" 853 | ], 854 | "name": "stdout" 855 | }, 856 | { 857 | "output_type": "stream", 858 | "text": [ 859 | "100%|██████████| 1875/1875 [00:05<00:00, 352.60it/s]\n", 860 | " 2%|▏ | 36/1875 [00:00<00:05, 352.05it/s]" 861 | ], 862 | "name": "stderr" 863 | }, 864 | { 865 | "output_type": "stream", 866 | "text": [ 867 | "======> epoch: 20/120, Loss:0.04273674264550209\n", 868 | "Entering Epoch: 21\n" 869 | ], 870 | "name": "stdout" 871 | }, 872 | { 873 | "output_type": "stream", 874 | "text": [ 875 | "100%|██████████| 1875/1875 [00:05<00:00, 354.93it/s]\n", 876 | " 2%|▏ | 36/1875 [00:00<00:05, 350.92it/s]" 877 | ], 878 | "name": "stderr" 879 | }, 880 | { 881 | "output_type": "stream", 882 | "text": [ 883 | "======> epoch: 21/120, Loss:0.03951810300350189\n", 884 | "Entering Epoch: 22\n" 885 | ], 886 | "name": "stdout" 887 | }, 888 | { 889 | "output_type": "stream", 890 | "text": [ 891 | "100%|██████████| 1875/1875 [00:05<00:00, 355.54it/s]\n", 892 | " 2%|▏ | 36/1875 [00:00<00:05, 351.67it/s]" 893 | ], 894 | "name": "stderr" 895 | }, 896 | { 897 | "output_type": "stream", 898 | "text": [ 899 | "======> epoch: 22/120, Loss:0.03777847811579704\n", 900 | "Entering Epoch: 23\n" 901 | ], 902 | "name": "stdout" 903 | }, 904 | { 905 | "output_type": "stream", 906 | "text": [ 907 | "100%|██████████| 1875/1875 [00:05<00:00, 354.93it/s]\n", 908 | " 2%|▏ | 36/1875 [00:00<00:05, 352.07it/s]" 909 | ], 910 | "name": "stderr" 911 | }, 912 | { 913 | "output_type": "stream", 914 | "text": [ 915 | "======> epoch: 23/120, Loss:0.03964350000023842\n", 916 | "Entering Epoch: 24\n" 917 | ], 918 | "name": "stdout" 919 | }, 920 | { 921 | "output_type": "stream", 922 | "text": [ 923 | "100%|██████████| 1875/1875 [00:05<00:00, 355.63it/s]\n", 924 | " 2%|▏ | 33/1875 [00:00<00:05, 327.03it/s]" 925 | ], 926 | "name": "stderr" 927 | }, 928 | { 929 | "output_type": "stream", 930 | "text": [ 931 | "======> epoch: 24/120, Loss:0.036437053233385086\n", 932 | "Entering Epoch: 25\n" 933 | ], 934 | "name": "stdout" 935 | }, 936 | { 937 | "output_type": "stream", 938 | "text": [ 939 | "100%|██████████| 1875/1875 [00:05<00:00, 352.96it/s]\n", 940 | " 2%|▏ | 35/1875 [00:00<00:05, 349.34it/s]" 941 | ], 942 | "name": "stderr" 943 | }, 944 | { 945 | "output_type": "stream", 946 | "text": [ 947 | "======> epoch: 25/120, Loss:0.03277333453297615\n", 948 | "Entering Epoch: 26\n" 949 | ], 950 | "name": "stdout" 951 | }, 952 | { 953 | "output_type": "stream", 954 | "text": [ 955 | "100%|██████████| 1875/1875 [00:05<00:00, 353.59it/s]\n", 956 | " 2%|▏ | 36/1875 [00:00<00:05, 353.20it/s]" 957 | ], 958 | "name": "stderr" 959 | }, 960 | { 961 | "output_type": "stream", 962 | "text": [ 963 | "======> epoch: 26/120, Loss:0.03898153826594353\n", 964 | "Entering Epoch: 27\n" 965 | ], 966 | "name": "stdout" 967 | }, 968 | { 969 | "output_type": "stream", 970 | "text": [ 971 | "100%|██████████| 1875/1875 [00:05<00:00, 355.07it/s]\n", 972 | " 2%|▏ | 36/1875 [00:00<00:05, 352.82it/s]" 973 | ], 974 | "name": "stderr" 975 | }, 976 | { 977 | "output_type": "stream", 978 | "text": [ 979 | "======> epoch: 27/120, Loss:0.03752512112259865\n", 980 | "Entering Epoch: 28\n" 981 | ], 982 | "name": "stdout" 983 | }, 984 | { 985 | "output_type": "stream", 986 | "text": [ 987 | "100%|██████████| 1875/1875 [00:05<00:00, 356.25it/s]\n", 988 | " 2%|▏ | 36/1875 [00:00<00:05, 353.56it/s]" 989 | ], 990 | "name": "stderr" 991 | }, 992 | { 993 | "output_type": "stream", 994 | "text": [ 995 | "======> epoch: 28/120, Loss:0.03705248236656189\n", 996 | "Entering Epoch: 29\n" 997 | ], 998 | "name": "stdout" 999 | }, 1000 | { 1001 | "output_type": "stream", 1002 | "text": [ 1003 | "100%|██████████| 1875/1875 [00:05<00:00, 355.37it/s]\n", 1004 | " 2%|▏ | 36/1875 [00:00<00:05, 353.26it/s]" 1005 | ], 1006 | "name": "stderr" 1007 | }, 1008 | { 1009 | "output_type": "stream", 1010 | "text": [ 1011 | "======> epoch: 29/120, Loss:0.032881107181310654\n", 1012 | "Entering Epoch: 30\n" 1013 | ], 1014 | "name": "stdout" 1015 | }, 1016 | { 1017 | "output_type": "stream", 1018 | "text": [ 1019 | "100%|██████████| 1875/1875 [00:05<00:00, 354.89it/s]\n", 1020 | " 2%|▏ | 33/1875 [00:00<00:05, 325.81it/s]" 1021 | ], 1022 | "name": "stderr" 1023 | }, 1024 | { 1025 | "output_type": "stream", 1026 | "text": [ 1027 | "======> epoch: 30/120, Loss:0.0395297072827816\n", 1028 | "Entering Epoch: 31\n" 1029 | ], 1030 | "name": "stdout" 1031 | }, 1032 | { 1033 | "output_type": "stream", 1034 | "text": [ 1035 | "100%|██████████| 1875/1875 [00:05<00:00, 353.13it/s]\n", 1036 | " 2%|▏ | 36/1875 [00:00<00:05, 350.38it/s]" 1037 | ], 1038 | "name": "stderr" 1039 | }, 1040 | { 1041 | "output_type": "stream", 1042 | "text": [ 1043 | "======> epoch: 31/120, Loss:0.03000573441386223\n", 1044 | "Entering Epoch: 32\n" 1045 | ], 1046 | "name": "stdout" 1047 | }, 1048 | { 1049 | "output_type": "stream", 1050 | "text": [ 1051 | "100%|██████████| 1875/1875 [00:05<00:00, 353.85it/s]\n", 1052 | " 2%|▏ | 35/1875 [00:00<00:05, 348.96it/s]" 1053 | ], 1054 | "name": "stderr" 1055 | }, 1056 | { 1057 | "output_type": "stream", 1058 | "text": [ 1059 | "======> epoch: 32/120, Loss:0.03471994772553444\n", 1060 | "Entering Epoch: 33\n" 1061 | ], 1062 | "name": "stdout" 1063 | }, 1064 | { 1065 | "output_type": "stream", 1066 | "text": [ 1067 | "100%|██████████| 1875/1875 [00:05<00:00, 323.20it/s]\n", 1068 | " 2%|▏ | 29/1875 [00:00<00:06, 281.56it/s]" 1069 | ], 1070 | "name": "stderr" 1071 | }, 1072 | { 1073 | "output_type": "stream", 1074 | "text": [ 1075 | "======> epoch: 33/120, Loss:0.03302660584449768\n", 1076 | "Entering Epoch: 34\n" 1077 | ], 1078 | "name": "stdout" 1079 | }, 1080 | { 1081 | "output_type": "stream", 1082 | "text": [ 1083 | "100%|██████████| 1875/1875 [00:06<00:00, 308.89it/s]\n", 1084 | " 2%|▏ | 35/1875 [00:00<00:05, 347.95it/s]" 1085 | ], 1086 | "name": "stderr" 1087 | }, 1088 | { 1089 | "output_type": "stream", 1090 | "text": [ 1091 | "======> epoch: 34/120, Loss:0.03391418233513832\n", 1092 | "Entering Epoch: 35\n" 1093 | ], 1094 | "name": "stdout" 1095 | }, 1096 | { 1097 | "output_type": "stream", 1098 | "text": [ 1099 | "100%|██████████| 1875/1875 [00:05<00:00, 354.01it/s]\n", 1100 | " 2%|▏ | 35/1875 [00:00<00:05, 347.52it/s]" 1101 | ], 1102 | "name": "stderr" 1103 | }, 1104 | { 1105 | "output_type": "stream", 1106 | "text": [ 1107 | "======> epoch: 35/120, Loss:0.0332057848572731\n", 1108 | "Entering Epoch: 36\n" 1109 | ], 1110 | "name": "stdout" 1111 | }, 1112 | { 1113 | "output_type": "stream", 1114 | "text": [ 1115 | "100%|██████████| 1875/1875 [00:05<00:00, 352.65it/s]\n", 1116 | " 2%|▏ | 35/1875 [00:00<00:05, 344.98it/s]" 1117 | ], 1118 | "name": "stderr" 1119 | }, 1120 | { 1121 | "output_type": "stream", 1122 | "text": [ 1123 | "======> epoch: 36/120, Loss:0.028860732913017273\n", 1124 | "Entering Epoch: 37\n" 1125 | ], 1126 | "name": "stdout" 1127 | }, 1128 | { 1129 | "output_type": "stream", 1130 | "text": [ 1131 | "100%|██████████| 1875/1875 [00:05<00:00, 340.25it/s]\n", 1132 | " 2%|▏ | 29/1875 [00:00<00:06, 288.09it/s]" 1133 | ], 1134 | "name": "stderr" 1135 | }, 1136 | { 1137 | "output_type": "stream", 1138 | "text": [ 1139 | "======> epoch: 37/120, Loss:0.03008740209043026\n", 1140 | "Entering Epoch: 38\n" 1141 | ], 1142 | "name": "stdout" 1143 | }, 1144 | { 1145 | "output_type": "stream", 1146 | "text": [ 1147 | "100%|██████████| 1875/1875 [00:06<00:00, 293.44it/s]\n", 1148 | " 2%|▏ | 30/1875 [00:00<00:06, 291.37it/s]" 1149 | ], 1150 | "name": "stderr" 1151 | }, 1152 | { 1153 | "output_type": "stream", 1154 | "text": [ 1155 | "======> epoch: 38/120, Loss:0.03580300137400627\n", 1156 | "Entering Epoch: 39\n" 1157 | ], 1158 | "name": "stdout" 1159 | }, 1160 | { 1161 | "output_type": "stream", 1162 | "text": [ 1163 | "100%|██████████| 1875/1875 [00:05<00:00, 329.16it/s]\n", 1164 | " 2%|▏ | 36/1875 [00:00<00:05, 353.25it/s]" 1165 | ], 1166 | "name": "stderr" 1167 | }, 1168 | { 1169 | "output_type": "stream", 1170 | "text": [ 1171 | "======> epoch: 39/120, Loss:0.029674720019102097\n", 1172 | "Entering Epoch: 40\n" 1173 | ], 1174 | "name": "stdout" 1175 | }, 1176 | { 1177 | "output_type": "stream", 1178 | "text": [ 1179 | "100%|██████████| 1875/1875 [00:05<00:00, 355.43it/s]\n", 1180 | " 2%|▏ | 35/1875 [00:00<00:05, 345.04it/s]" 1181 | ], 1182 | "name": "stderr" 1183 | }, 1184 | { 1185 | "output_type": "stream", 1186 | "text": [ 1187 | "======> epoch: 40/120, Loss:0.03466292470693588\n", 1188 | "Entering Epoch: 41\n" 1189 | ], 1190 | "name": "stdout" 1191 | }, 1192 | { 1193 | "output_type": "stream", 1194 | "text": [ 1195 | "100%|██████████| 1875/1875 [00:05<00:00, 354.27it/s]\n", 1196 | " 2%|▏ | 35/1875 [00:00<00:05, 347.94it/s]" 1197 | ], 1198 | "name": "stderr" 1199 | }, 1200 | { 1201 | "output_type": "stream", 1202 | "text": [ 1203 | "======> epoch: 41/120, Loss:0.029113681986927986\n", 1204 | "Entering Epoch: 42\n" 1205 | ], 1206 | "name": "stdout" 1207 | }, 1208 | { 1209 | "output_type": "stream", 1210 | "text": [ 1211 | "100%|██████████| 1875/1875 [00:05<00:00, 353.36it/s]\n", 1212 | " 2%|▏ | 33/1875 [00:00<00:05, 323.87it/s]" 1213 | ], 1214 | "name": "stderr" 1215 | }, 1216 | { 1217 | "output_type": "stream", 1218 | "text": [ 1219 | "======> epoch: 42/120, Loss:0.032162293791770935\n", 1220 | "Entering Epoch: 43\n" 1221 | ], 1222 | "name": "stdout" 1223 | }, 1224 | { 1225 | "output_type": "stream", 1226 | "text": [ 1227 | "100%|██████████| 1875/1875 [00:05<00:00, 348.15it/s]\n", 1228 | " 2%|▏ | 35/1875 [00:00<00:05, 349.81it/s]" 1229 | ], 1230 | "name": "stderr" 1231 | }, 1232 | { 1233 | "output_type": "stream", 1234 | "text": [ 1235 | "======> epoch: 43/120, Loss:0.02975574880838394\n", 1236 | "Entering Epoch: 44\n" 1237 | ], 1238 | "name": "stdout" 1239 | }, 1240 | { 1241 | "output_type": "stream", 1242 | "text": [ 1243 | "100%|██████████| 1875/1875 [00:05<00:00, 355.86it/s]\n", 1244 | " 2%|▏ | 36/1875 [00:00<00:05, 355.19it/s]" 1245 | ], 1246 | "name": "stderr" 1247 | }, 1248 | { 1249 | "output_type": "stream", 1250 | "text": [ 1251 | "======> epoch: 44/120, Loss:0.0300697460770607\n", 1252 | "Entering Epoch: 45\n" 1253 | ], 1254 | "name": "stdout" 1255 | }, 1256 | { 1257 | "output_type": "stream", 1258 | "text": [ 1259 | "100%|██████████| 1875/1875 [00:05<00:00, 355.45it/s]\n", 1260 | " 2%|▏ | 33/1875 [00:00<00:05, 321.71it/s]" 1261 | ], 1262 | "name": "stderr" 1263 | }, 1264 | { 1265 | "output_type": "stream", 1266 | "text": [ 1267 | "======> epoch: 45/120, Loss:0.035581495612859726\n", 1268 | "Entering Epoch: 46\n" 1269 | ], 1270 | "name": "stdout" 1271 | }, 1272 | { 1273 | "output_type": "stream", 1274 | "text": [ 1275 | "100%|██████████| 1875/1875 [00:05<00:00, 354.70it/s]\n", 1276 | " 2%|▏ | 36/1875 [00:00<00:05, 350.47it/s]" 1277 | ], 1278 | "name": "stderr" 1279 | }, 1280 | { 1281 | "output_type": "stream", 1282 | "text": [ 1283 | "======> epoch: 46/120, Loss:0.03387004882097244\n", 1284 | "Entering Epoch: 47\n" 1285 | ], 1286 | "name": "stdout" 1287 | }, 1288 | { 1289 | "output_type": "stream", 1290 | "text": [ 1291 | "100%|██████████| 1875/1875 [00:05<00:00, 352.23it/s]\n", 1292 | " 2%|▏ | 30/1875 [00:00<00:06, 298.18it/s]" 1293 | ], 1294 | "name": "stderr" 1295 | }, 1296 | { 1297 | "output_type": "stream", 1298 | "text": [ 1299 | "======> epoch: 47/120, Loss:0.0324636809527874\n", 1300 | "Entering Epoch: 48\n" 1301 | ], 1302 | "name": "stdout" 1303 | }, 1304 | { 1305 | "output_type": "stream", 1306 | "text": [ 1307 | "100%|██████████| 1875/1875 [00:06<00:00, 306.23it/s]\n", 1308 | " 2%|▏ | 31/1875 [00:00<00:06, 302.94it/s]" 1309 | ], 1310 | "name": "stderr" 1311 | }, 1312 | { 1313 | "output_type": "stream", 1314 | "text": [ 1315 | "======> epoch: 48/120, Loss:0.02689267508685589\n", 1316 | "Entering Epoch: 49\n" 1317 | ], 1318 | "name": "stdout" 1319 | }, 1320 | { 1321 | "output_type": "stream", 1322 | "text": [ 1323 | "100%|██████████| 1875/1875 [00:05<00:00, 323.28it/s]\n", 1324 | " 2%|▏ | 35/1875 [00:00<00:05, 348.00it/s]" 1325 | ], 1326 | "name": "stderr" 1327 | }, 1328 | { 1329 | "output_type": "stream", 1330 | "text": [ 1331 | "======> epoch: 49/120, Loss:0.033404625952243805\n", 1332 | "Entering Epoch: 50\n" 1333 | ], 1334 | "name": "stdout" 1335 | }, 1336 | { 1337 | "output_type": "stream", 1338 | "text": [ 1339 | "100%|██████████| 1875/1875 [00:05<00:00, 356.87it/s]\n", 1340 | " 2%|▏ | 36/1875 [00:00<00:05, 351.66it/s]" 1341 | ], 1342 | "name": "stderr" 1343 | }, 1344 | { 1345 | "output_type": "stream", 1346 | "text": [ 1347 | "======> epoch: 50/120, Loss:0.026478808373212814\n", 1348 | "Entering Epoch: 51\n" 1349 | ], 1350 | "name": "stdout" 1351 | }, 1352 | { 1353 | "output_type": "stream", 1354 | "text": [ 1355 | "100%|██████████| 1875/1875 [00:05<00:00, 356.83it/s]\n", 1356 | " 2%|▏ | 36/1875 [00:00<00:05, 351.06it/s]" 1357 | ], 1358 | "name": "stderr" 1359 | }, 1360 | { 1361 | "output_type": "stream", 1362 | "text": [ 1363 | "======> epoch: 51/120, Loss:0.02790663205087185\n", 1364 | "Entering Epoch: 52\n" 1365 | ], 1366 | "name": "stdout" 1367 | }, 1368 | { 1369 | "output_type": "stream", 1370 | "text": [ 1371 | "100%|██████████| 1875/1875 [00:05<00:00, 351.22it/s]\n", 1372 | " 2%|▏ | 35/1875 [00:00<00:05, 341.16it/s]" 1373 | ], 1374 | "name": "stderr" 1375 | }, 1376 | { 1377 | "output_type": "stream", 1378 | "text": [ 1379 | "======> epoch: 52/120, Loss:0.027032755315303802\n", 1380 | "Entering Epoch: 53\n" 1381 | ], 1382 | "name": "stdout" 1383 | }, 1384 | { 1385 | "output_type": "stream", 1386 | "text": [ 1387 | "100%|██████████| 1875/1875 [00:05<00:00, 355.52it/s]\n", 1388 | " 2%|▏ | 35/1875 [00:00<00:05, 348.26it/s]" 1389 | ], 1390 | "name": "stderr" 1391 | }, 1392 | { 1393 | "output_type": "stream", 1394 | "text": [ 1395 | "======> epoch: 53/120, Loss:0.027010425925254822\n", 1396 | "Entering Epoch: 54\n" 1397 | ], 1398 | "name": "stdout" 1399 | }, 1400 | { 1401 | "output_type": "stream", 1402 | "text": [ 1403 | "100%|██████████| 1875/1875 [00:05<00:00, 354.90it/s]\n", 1404 | " 2%|▏ | 34/1875 [00:00<00:05, 337.82it/s]" 1405 | ], 1406 | "name": "stderr" 1407 | }, 1408 | { 1409 | "output_type": "stream", 1410 | "text": [ 1411 | "======> epoch: 54/120, Loss:0.029131080955266953\n", 1412 | "Entering Epoch: 55\n" 1413 | ], 1414 | "name": "stdout" 1415 | }, 1416 | { 1417 | "output_type": "stream", 1418 | "text": [ 1419 | "100%|██████████| 1875/1875 [00:05<00:00, 354.42it/s]\n", 1420 | " 2%|▏ | 35/1875 [00:00<00:05, 340.86it/s]" 1421 | ], 1422 | "name": "stderr" 1423 | }, 1424 | { 1425 | "output_type": "stream", 1426 | "text": [ 1427 | "======> epoch: 55/120, Loss:0.028712039813399315\n", 1428 | "Entering Epoch: 56\n" 1429 | ], 1430 | "name": "stdout" 1431 | }, 1432 | { 1433 | "output_type": "stream", 1434 | "text": [ 1435 | "100%|██████████| 1875/1875 [00:05<00:00, 355.95it/s]\n", 1436 | " 2%|▏ | 35/1875 [00:00<00:05, 349.73it/s]" 1437 | ], 1438 | "name": "stderr" 1439 | }, 1440 | { 1441 | "output_type": "stream", 1442 | "text": [ 1443 | "======> epoch: 56/120, Loss:0.03216388821601868\n", 1444 | "Entering Epoch: 57\n" 1445 | ], 1446 | "name": "stdout" 1447 | }, 1448 | { 1449 | "output_type": "stream", 1450 | "text": [ 1451 | "100%|██████████| 1875/1875 [00:05<00:00, 354.25it/s]\n", 1452 | " 2%|▏ | 36/1875 [00:00<00:05, 354.40it/s]" 1453 | ], 1454 | "name": "stderr" 1455 | }, 1456 | { 1457 | "output_type": "stream", 1458 | "text": [ 1459 | "======> epoch: 57/120, Loss:0.027881227433681488\n", 1460 | "Entering Epoch: 58\n" 1461 | ], 1462 | "name": "stdout" 1463 | }, 1464 | { 1465 | "output_type": "stream", 1466 | "text": [ 1467 | "100%|██████████| 1875/1875 [00:05<00:00, 354.77it/s]\n", 1468 | " 2%|▏ | 32/1875 [00:00<00:05, 317.00it/s]" 1469 | ], 1470 | "name": "stderr" 1471 | }, 1472 | { 1473 | "output_type": "stream", 1474 | "text": [ 1475 | "======> epoch: 58/120, Loss:0.03054805099964142\n", 1476 | "Entering Epoch: 59\n" 1477 | ], 1478 | "name": "stdout" 1479 | }, 1480 | { 1481 | "output_type": "stream", 1482 | "text": [ 1483 | "100%|██████████| 1875/1875 [00:05<00:00, 353.09it/s]\n", 1484 | " 2%|▏ | 36/1875 [00:00<00:05, 352.31it/s]" 1485 | ], 1486 | "name": "stderr" 1487 | }, 1488 | { 1489 | "output_type": "stream", 1490 | "text": [ 1491 | "======> epoch: 59/120, Loss:0.027852550148963928\n", 1492 | "Entering Epoch: 60\n" 1493 | ], 1494 | "name": "stdout" 1495 | }, 1496 | { 1497 | "output_type": "stream", 1498 | "text": [ 1499 | "100%|██████████| 1875/1875 [00:05<00:00, 353.35it/s]\n", 1500 | " 2%|▏ | 33/1875 [00:00<00:05, 328.34it/s]" 1501 | ], 1502 | "name": "stderr" 1503 | }, 1504 | { 1505 | "output_type": "stream", 1506 | "text": [ 1507 | "======> epoch: 60/120, Loss:0.028727371245622635\n", 1508 | "Entering Epoch: 61\n" 1509 | ], 1510 | "name": "stdout" 1511 | }, 1512 | { 1513 | "output_type": "stream", 1514 | "text": [ 1515 | "100%|██████████| 1875/1875 [00:05<00:00, 355.25it/s]\n", 1516 | " 2%|▏ | 36/1875 [00:00<00:05, 351.81it/s]" 1517 | ], 1518 | "name": "stderr" 1519 | }, 1520 | { 1521 | "output_type": "stream", 1522 | "text": [ 1523 | "======> epoch: 61/120, Loss:0.03103669360280037\n", 1524 | "Entering Epoch: 62\n" 1525 | ], 1526 | "name": "stdout" 1527 | }, 1528 | { 1529 | "output_type": "stream", 1530 | "text": [ 1531 | "100%|██████████| 1875/1875 [00:05<00:00, 352.74it/s]\n", 1532 | " 2%|▏ | 30/1875 [00:00<00:06, 296.59it/s]" 1533 | ], 1534 | "name": "stderr" 1535 | }, 1536 | { 1537 | "output_type": "stream", 1538 | "text": [ 1539 | "======> epoch: 62/120, Loss:0.028559764847159386\n", 1540 | "Entering Epoch: 63\n" 1541 | ], 1542 | "name": "stdout" 1543 | }, 1544 | { 1545 | "output_type": "stream", 1546 | "text": [ 1547 | "100%|██████████| 1875/1875 [00:06<00:00, 306.96it/s]\n", 1548 | " 2%|▏ | 31/1875 [00:00<00:06, 302.23it/s]" 1549 | ], 1550 | "name": "stderr" 1551 | }, 1552 | { 1553 | "output_type": "stream", 1554 | "text": [ 1555 | "======> epoch: 63/120, Loss:0.027164896950125694\n", 1556 | "Entering Epoch: 64\n" 1557 | ], 1558 | "name": "stdout" 1559 | }, 1560 | { 1561 | "output_type": "stream", 1562 | "text": [ 1563 | "100%|██████████| 1875/1875 [00:05<00:00, 324.99it/s]\n", 1564 | " 2%|▏ | 35/1875 [00:00<00:05, 349.63it/s]" 1565 | ], 1566 | "name": "stderr" 1567 | }, 1568 | { 1569 | "output_type": "stream", 1570 | "text": [ 1571 | "======> epoch: 64/120, Loss:0.02717626839876175\n", 1572 | "Entering Epoch: 65\n" 1573 | ], 1574 | "name": "stdout" 1575 | }, 1576 | { 1577 | "output_type": "stream", 1578 | "text": [ 1579 | "100%|██████████| 1875/1875 [00:05<00:00, 355.45it/s]\n", 1580 | " 2%|▏ | 36/1875 [00:00<00:05, 355.14it/s]" 1581 | ], 1582 | "name": "stderr" 1583 | }, 1584 | { 1585 | "output_type": "stream", 1586 | "text": [ 1587 | "======> epoch: 65/120, Loss:0.025673391297459602\n", 1588 | "Entering Epoch: 66\n" 1589 | ], 1590 | "name": "stdout" 1591 | }, 1592 | { 1593 | "output_type": "stream", 1594 | "text": [ 1595 | "100%|██████████| 1875/1875 [00:05<00:00, 353.13it/s]\n", 1596 | " 2%|▏ | 36/1875 [00:00<00:05, 350.95it/s]" 1597 | ], 1598 | "name": "stderr" 1599 | }, 1600 | { 1601 | "output_type": "stream", 1602 | "text": [ 1603 | "======> epoch: 66/120, Loss:0.02766711451113224\n", 1604 | "Entering Epoch: 67\n" 1605 | ], 1606 | "name": "stdout" 1607 | }, 1608 | { 1609 | "output_type": "stream", 1610 | "text": [ 1611 | "100%|██████████| 1875/1875 [00:05<00:00, 356.51it/s]\n", 1612 | " 2%|▏ | 36/1875 [00:00<00:05, 352.20it/s]" 1613 | ], 1614 | "name": "stderr" 1615 | }, 1616 | { 1617 | "output_type": "stream", 1618 | "text": [ 1619 | "======> epoch: 67/120, Loss:0.03018694929778576\n", 1620 | "Entering Epoch: 68\n" 1621 | ], 1622 | "name": "stdout" 1623 | }, 1624 | { 1625 | "output_type": "stream", 1626 | "text": [ 1627 | "100%|██████████| 1875/1875 [00:05<00:00, 355.70it/s]\n", 1628 | " 2%|▏ | 33/1875 [00:00<00:05, 325.92it/s]" 1629 | ], 1630 | "name": "stderr" 1631 | }, 1632 | { 1633 | "output_type": "stream", 1634 | "text": [ 1635 | "======> epoch: 68/120, Loss:0.024607863277196884\n", 1636 | "Entering Epoch: 69\n" 1637 | ], 1638 | "name": "stdout" 1639 | }, 1640 | { 1641 | "output_type": "stream", 1642 | "text": [ 1643 | "100%|██████████| 1875/1875 [00:05<00:00, 354.38it/s]\n", 1644 | " 2%|▏ | 35/1875 [00:00<00:05, 346.91it/s]" 1645 | ], 1646 | "name": "stderr" 1647 | }, 1648 | { 1649 | "output_type": "stream", 1650 | "text": [ 1651 | "======> epoch: 69/120, Loss:0.02705385535955429\n", 1652 | "Entering Epoch: 70\n" 1653 | ], 1654 | "name": "stdout" 1655 | }, 1656 | { 1657 | "output_type": "stream", 1658 | "text": [ 1659 | "100%|██████████| 1875/1875 [00:05<00:00, 354.47it/s]\n", 1660 | " 2%|▏ | 36/1875 [00:00<00:05, 352.84it/s]" 1661 | ], 1662 | "name": "stderr" 1663 | }, 1664 | { 1665 | "output_type": "stream", 1666 | "text": [ 1667 | "======> epoch: 70/120, Loss:0.026117105036973953\n", 1668 | "Entering Epoch: 71\n" 1669 | ], 1670 | "name": "stdout" 1671 | }, 1672 | { 1673 | "output_type": "stream", 1674 | "text": [ 1675 | "100%|██████████| 1875/1875 [00:05<00:00, 355.24it/s]\n", 1676 | " 2%|▏ | 36/1875 [00:00<00:05, 353.61it/s]" 1677 | ], 1678 | "name": "stderr" 1679 | }, 1680 | { 1681 | "output_type": "stream", 1682 | "text": [ 1683 | "======> epoch: 71/120, Loss:0.02892029844224453\n", 1684 | "Entering Epoch: 72\n" 1685 | ], 1686 | "name": "stdout" 1687 | }, 1688 | { 1689 | "output_type": "stream", 1690 | "text": [ 1691 | "100%|██████████| 1875/1875 [00:05<00:00, 353.09it/s]\n", 1692 | " 2%|▏ | 35/1875 [00:00<00:05, 349.92it/s]" 1693 | ], 1694 | "name": "stderr" 1695 | }, 1696 | { 1697 | "output_type": "stream", 1698 | "text": [ 1699 | "======> epoch: 72/120, Loss:0.027028189972043037\n", 1700 | "Entering Epoch: 73\n" 1701 | ], 1702 | "name": "stdout" 1703 | }, 1704 | { 1705 | "output_type": "stream", 1706 | "text": [ 1707 | "100%|██████████| 1875/1875 [00:05<00:00, 355.95it/s]\n", 1708 | " 2%|▏ | 36/1875 [00:00<00:05, 351.17it/s]" 1709 | ], 1710 | "name": "stderr" 1711 | }, 1712 | { 1713 | "output_type": "stream", 1714 | "text": [ 1715 | "======> epoch: 73/120, Loss:0.028847752138972282\n", 1716 | "Entering Epoch: 74\n" 1717 | ], 1718 | "name": "stdout" 1719 | }, 1720 | { 1721 | "output_type": "stream", 1722 | "text": [ 1723 | "100%|██████████| 1875/1875 [00:05<00:00, 355.99it/s]\n", 1724 | " 2%|▏ | 34/1875 [00:00<00:05, 339.54it/s]" 1725 | ], 1726 | "name": "stderr" 1727 | }, 1728 | { 1729 | "output_type": "stream", 1730 | "text": [ 1731 | "======> epoch: 74/120, Loss:0.027272889390587807\n", 1732 | "Entering Epoch: 75\n" 1733 | ], 1734 | "name": "stdout" 1735 | }, 1736 | { 1737 | "output_type": "stream", 1738 | "text": [ 1739 | "100%|██████████| 1875/1875 [00:05<00:00, 351.76it/s]\n", 1740 | " 2%|▏ | 35/1875 [00:00<00:05, 345.00it/s]" 1741 | ], 1742 | "name": "stderr" 1743 | }, 1744 | { 1745 | "output_type": "stream", 1746 | "text": [ 1747 | "======> epoch: 75/120, Loss:0.02643396332859993\n", 1748 | "Entering Epoch: 76\n" 1749 | ], 1750 | "name": "stdout" 1751 | }, 1752 | { 1753 | "output_type": "stream", 1754 | "text": [ 1755 | "100%|██████████| 1875/1875 [00:05<00:00, 355.45it/s]\n", 1756 | " 2%|▏ | 36/1875 [00:00<00:05, 352.26it/s]" 1757 | ], 1758 | "name": "stderr" 1759 | }, 1760 | { 1761 | "output_type": "stream", 1762 | "text": [ 1763 | "======> epoch: 76/120, Loss:0.02690323442220688\n", 1764 | "Entering Epoch: 77\n" 1765 | ], 1766 | "name": "stdout" 1767 | }, 1768 | { 1769 | "output_type": "stream", 1770 | "text": [ 1771 | "100%|██████████| 1875/1875 [00:05<00:00, 349.93it/s]\n", 1772 | " 2%|▏ | 30/1875 [00:00<00:06, 296.00it/s]" 1773 | ], 1774 | "name": "stderr" 1775 | }, 1776 | { 1777 | "output_type": "stream", 1778 | "text": [ 1779 | "======> epoch: 77/120, Loss:0.026185598224401474\n", 1780 | "Entering Epoch: 78\n" 1781 | ], 1782 | "name": "stdout" 1783 | }, 1784 | { 1785 | "output_type": "stream", 1786 | "text": [ 1787 | "100%|██████████| 1875/1875 [00:06<00:00, 306.81it/s]\n", 1788 | " 2%|▏ | 31/1875 [00:00<00:06, 304.29it/s]" 1789 | ], 1790 | "name": "stderr" 1791 | }, 1792 | { 1793 | "output_type": "stream", 1794 | "text": [ 1795 | "======> epoch: 78/120, Loss:0.027222611010074615\n", 1796 | "Entering Epoch: 79\n" 1797 | ], 1798 | "name": "stdout" 1799 | }, 1800 | { 1801 | "output_type": "stream", 1802 | "text": [ 1803 | "100%|██████████| 1875/1875 [00:05<00:00, 328.84it/s]\n", 1804 | " 2%|▏ | 34/1875 [00:00<00:05, 339.66it/s]" 1805 | ], 1806 | "name": "stderr" 1807 | }, 1808 | { 1809 | "output_type": "stream", 1810 | "text": [ 1811 | "======> epoch: 79/120, Loss:0.02516557276248932\n", 1812 | "Entering Epoch: 80\n" 1813 | ], 1814 | "name": "stdout" 1815 | }, 1816 | { 1817 | "output_type": "stream", 1818 | "text": [ 1819 | "100%|██████████| 1875/1875 [00:05<00:00, 354.67it/s]\n", 1820 | " 2%|▏ | 36/1875 [00:00<00:05, 352.42it/s]" 1821 | ], 1822 | "name": "stderr" 1823 | }, 1824 | { 1825 | "output_type": "stream", 1826 | "text": [ 1827 | "======> epoch: 80/120, Loss:0.024410229176282883\n", 1828 | "Entering Epoch: 81\n" 1829 | ], 1830 | "name": "stdout" 1831 | }, 1832 | { 1833 | "output_type": "stream", 1834 | "text": [ 1835 | "100%|██████████| 1875/1875 [00:05<00:00, 353.33it/s]\n", 1836 | " 2%|▏ | 36/1875 [00:00<00:05, 352.60it/s]" 1837 | ], 1838 | "name": "stderr" 1839 | }, 1840 | { 1841 | "output_type": "stream", 1842 | "text": [ 1843 | "======> epoch: 81/120, Loss:0.03344433382153511\n", 1844 | "Entering Epoch: 82\n" 1845 | ], 1846 | "name": "stdout" 1847 | }, 1848 | { 1849 | "output_type": "stream", 1850 | "text": [ 1851 | "100%|██████████| 1875/1875 [00:05<00:00, 354.17it/s]\n", 1852 | " 2%|▏ | 35/1875 [00:00<00:05, 349.00it/s]" 1853 | ], 1854 | "name": "stderr" 1855 | }, 1856 | { 1857 | "output_type": "stream", 1858 | "text": [ 1859 | "======> epoch: 82/120, Loss:0.02569134160876274\n", 1860 | "Entering Epoch: 83\n" 1861 | ], 1862 | "name": "stdout" 1863 | }, 1864 | { 1865 | "output_type": "stream", 1866 | "text": [ 1867 | "100%|██████████| 1875/1875 [00:05<00:00, 353.09it/s]\n", 1868 | " 2%|▏ | 35/1875 [00:00<00:05, 344.56it/s]" 1869 | ], 1870 | "name": "stderr" 1871 | }, 1872 | { 1873 | "output_type": "stream", 1874 | "text": [ 1875 | "======> epoch: 83/120, Loss:0.02614513225853443\n", 1876 | "Entering Epoch: 84\n" 1877 | ], 1878 | "name": "stdout" 1879 | }, 1880 | { 1881 | "output_type": "stream", 1882 | "text": [ 1883 | "100%|██████████| 1875/1875 [00:05<00:00, 355.50it/s]\n", 1884 | " 2%|▏ | 36/1875 [00:00<00:05, 351.39it/s]" 1885 | ], 1886 | "name": "stderr" 1887 | }, 1888 | { 1889 | "output_type": "stream", 1890 | "text": [ 1891 | "======> epoch: 84/120, Loss:0.02682308480143547\n", 1892 | "Entering Epoch: 85\n" 1893 | ], 1894 | "name": "stdout" 1895 | }, 1896 | { 1897 | "output_type": "stream", 1898 | "text": [ 1899 | "100%|██████████| 1875/1875 [00:05<00:00, 355.51it/s]\n", 1900 | " 2%|▏ | 36/1875 [00:00<00:05, 353.77it/s]" 1901 | ], 1902 | "name": "stderr" 1903 | }, 1904 | { 1905 | "output_type": "stream", 1906 | "text": [ 1907 | "======> epoch: 85/120, Loss:0.027318723499774933\n", 1908 | "Entering Epoch: 86\n" 1909 | ], 1910 | "name": "stdout" 1911 | }, 1912 | { 1913 | "output_type": "stream", 1914 | "text": [ 1915 | "100%|██████████| 1875/1875 [00:05<00:00, 354.86it/s]\n", 1916 | " 2%|▏ | 36/1875 [00:00<00:05, 353.14it/s]" 1917 | ], 1918 | "name": "stderr" 1919 | }, 1920 | { 1921 | "output_type": "stream", 1922 | "text": [ 1923 | "======> epoch: 86/120, Loss:0.022243259474635124\n", 1924 | "Entering Epoch: 87\n" 1925 | ], 1926 | "name": "stdout" 1927 | }, 1928 | { 1929 | "output_type": "stream", 1930 | "text": [ 1931 | "100%|██████████| 1875/1875 [00:05<00:00, 355.02it/s]\n", 1932 | " 2%|▏ | 35/1875 [00:00<00:05, 346.17it/s]" 1933 | ], 1934 | "name": "stderr" 1935 | }, 1936 | { 1937 | "output_type": "stream", 1938 | "text": [ 1939 | "======> epoch: 87/120, Loss:0.0257416944950819\n", 1940 | "Entering Epoch: 88\n" 1941 | ], 1942 | "name": "stdout" 1943 | }, 1944 | { 1945 | "output_type": "stream", 1946 | "text": [ 1947 | "100%|██████████| 1875/1875 [00:05<00:00, 356.19it/s]\n", 1948 | " 2%|▏ | 35/1875 [00:00<00:05, 349.07it/s]" 1949 | ], 1950 | "name": "stderr" 1951 | }, 1952 | { 1953 | "output_type": "stream", 1954 | "text": [ 1955 | "======> epoch: 88/120, Loss:0.025301240384578705\n", 1956 | "Entering Epoch: 89\n" 1957 | ], 1958 | "name": "stdout" 1959 | }, 1960 | { 1961 | "output_type": "stream", 1962 | "text": [ 1963 | "100%|██████████| 1875/1875 [00:05<00:00, 354.05it/s]\n", 1964 | " 2%|▏ | 35/1875 [00:00<00:05, 349.60it/s]" 1965 | ], 1966 | "name": "stderr" 1967 | }, 1968 | { 1969 | "output_type": "stream", 1970 | "text": [ 1971 | "======> epoch: 89/120, Loss:0.02317321114242077\n", 1972 | "Entering Epoch: 90\n" 1973 | ], 1974 | "name": "stdout" 1975 | }, 1976 | { 1977 | "output_type": "stream", 1978 | "text": [ 1979 | "100%|██████████| 1875/1875 [00:05<00:00, 355.40it/s]\n", 1980 | " 2%|▏ | 35/1875 [00:00<00:05, 346.95it/s]" 1981 | ], 1982 | "name": "stderr" 1983 | }, 1984 | { 1985 | "output_type": "stream", 1986 | "text": [ 1987 | "======> epoch: 90/120, Loss:0.026089739054441452\n", 1988 | "Entering Epoch: 91\n" 1989 | ], 1990 | "name": "stdout" 1991 | }, 1992 | { 1993 | "output_type": "stream", 1994 | "text": [ 1995 | "100%|██████████| 1875/1875 [00:05<00:00, 355.64it/s]\n", 1996 | " 2%|▏ | 32/1875 [00:00<00:05, 316.74it/s]" 1997 | ], 1998 | "name": "stderr" 1999 | }, 2000 | { 2001 | "output_type": "stream", 2002 | "text": [ 2003 | "======> epoch: 91/120, Loss:0.02275414764881134\n", 2004 | "Entering Epoch: 92\n" 2005 | ], 2006 | "name": "stdout" 2007 | }, 2008 | { 2009 | "output_type": "stream", 2010 | "text": [ 2011 | "100%|██████████| 1875/1875 [00:05<00:00, 344.64it/s]\n", 2012 | " 2%|▏ | 30/1875 [00:00<00:06, 296.32it/s]" 2013 | ], 2014 | "name": "stderr" 2015 | }, 2016 | { 2017 | "output_type": "stream", 2018 | "text": [ 2019 | "======> epoch: 92/120, Loss:0.02440083585679531\n", 2020 | "Entering Epoch: 93\n" 2021 | ], 2022 | "name": "stdout" 2023 | }, 2024 | { 2025 | "output_type": "stream", 2026 | "text": [ 2027 | "100%|██████████| 1875/1875 [00:06<00:00, 307.04it/s]\n", 2028 | " 2%|▏ | 31/1875 [00:00<00:06, 301.27it/s]" 2029 | ], 2030 | "name": "stderr" 2031 | }, 2032 | { 2033 | "output_type": "stream", 2034 | "text": [ 2035 | "======> epoch: 93/120, Loss:0.02597312070429325\n", 2036 | "Entering Epoch: 94\n" 2037 | ], 2038 | "name": "stdout" 2039 | }, 2040 | { 2041 | "output_type": "stream", 2042 | "text": [ 2043 | "100%|██████████| 1875/1875 [00:05<00:00, 318.81it/s]\n", 2044 | " 1%|▏ | 27/1875 [00:00<00:06, 267.94it/s]" 2045 | ], 2046 | "name": "stderr" 2047 | }, 2048 | { 2049 | "output_type": "stream", 2050 | "text": [ 2051 | "======> epoch: 94/120, Loss:0.027220115065574646\n", 2052 | "Entering Epoch: 95\n" 2053 | ], 2054 | "name": "stdout" 2055 | }, 2056 | { 2057 | "output_type": "stream", 2058 | "text": [ 2059 | "100%|██████████| 1875/1875 [00:06<00:00, 294.39it/s]\n", 2060 | " 2%|▏ | 30/1875 [00:00<00:06, 293.62it/s]" 2061 | ], 2062 | "name": "stderr" 2063 | }, 2064 | { 2065 | "output_type": "stream", 2066 | "text": [ 2067 | "======> epoch: 95/120, Loss:0.023383814841508865\n", 2068 | "Entering Epoch: 96\n" 2069 | ], 2070 | "name": "stdout" 2071 | }, 2072 | { 2073 | "output_type": "stream", 2074 | "text": [ 2075 | "100%|██████████| 1875/1875 [00:05<00:00, 315.37it/s]\n", 2076 | " 2%|▏ | 32/1875 [00:00<00:05, 317.33it/s]" 2077 | ], 2078 | "name": "stderr" 2079 | }, 2080 | { 2081 | "output_type": "stream", 2082 | "text": [ 2083 | "======> epoch: 96/120, Loss:0.02564122900366783\n", 2084 | "Entering Epoch: 97\n" 2085 | ], 2086 | "name": "stdout" 2087 | }, 2088 | { 2089 | "output_type": "stream", 2090 | "text": [ 2091 | "100%|██████████| 1875/1875 [00:05<00:00, 351.38it/s]\n", 2092 | " 2%|▏ | 36/1875 [00:00<00:05, 350.38it/s]" 2093 | ], 2094 | "name": "stderr" 2095 | }, 2096 | { 2097 | "output_type": "stream", 2098 | "text": [ 2099 | "======> epoch: 97/120, Loss:0.027132095769047737\n", 2100 | "Entering Epoch: 98\n" 2101 | ], 2102 | "name": "stdout" 2103 | }, 2104 | { 2105 | "output_type": "stream", 2106 | "text": [ 2107 | "100%|██████████| 1875/1875 [00:05<00:00, 355.95it/s]\n", 2108 | " 2%|▏ | 35/1875 [00:00<00:05, 344.54it/s]" 2109 | ], 2110 | "name": "stderr" 2111 | }, 2112 | { 2113 | "output_type": "stream", 2114 | "text": [ 2115 | "======> epoch: 98/120, Loss:0.02385694719851017\n", 2116 | "Entering Epoch: 99\n" 2117 | ], 2118 | "name": "stdout" 2119 | }, 2120 | { 2121 | "output_type": "stream", 2122 | "text": [ 2123 | "100%|██████████| 1875/1875 [00:05<00:00, 356.42it/s]\n", 2124 | " 2%|▏ | 36/1875 [00:00<00:05, 353.86it/s]" 2125 | ], 2126 | "name": "stderr" 2127 | }, 2128 | { 2129 | "output_type": "stream", 2130 | "text": [ 2131 | "======> epoch: 99/120, Loss:0.023021945729851723\n", 2132 | "Entering Epoch: 100\n" 2133 | ], 2134 | "name": "stdout" 2135 | }, 2136 | { 2137 | "output_type": "stream", 2138 | "text": [ 2139 | "100%|██████████| 1875/1875 [00:05<00:00, 353.59it/s]\n", 2140 | " 2%|▏ | 36/1875 [00:00<00:05, 353.66it/s]" 2141 | ], 2142 | "name": "stderr" 2143 | }, 2144 | { 2145 | "output_type": "stream", 2146 | "text": [ 2147 | "======> epoch: 100/120, Loss:0.025326967239379883\n", 2148 | "Entering Epoch: 101\n" 2149 | ], 2150 | "name": "stdout" 2151 | }, 2152 | { 2153 | "output_type": "stream", 2154 | "text": [ 2155 | "100%|██████████| 1875/1875 [00:05<00:00, 355.96it/s]\n", 2156 | " 2%|▏ | 35/1875 [00:00<00:05, 347.86it/s]" 2157 | ], 2158 | "name": "stderr" 2159 | }, 2160 | { 2161 | "output_type": "stream", 2162 | "text": [ 2163 | "======> epoch: 101/120, Loss:0.022845067083835602\n", 2164 | "Entering Epoch: 102\n" 2165 | ], 2166 | "name": "stdout" 2167 | }, 2168 | { 2169 | "output_type": "stream", 2170 | "text": [ 2171 | "100%|██████████| 1875/1875 [00:05<00:00, 354.76it/s]\n", 2172 | " 2%|▏ | 33/1875 [00:00<00:05, 324.68it/s]" 2173 | ], 2174 | "name": "stderr" 2175 | }, 2176 | { 2177 | "output_type": "stream", 2178 | "text": [ 2179 | "======> epoch: 102/120, Loss:0.02455546334385872\n", 2180 | "Entering Epoch: 103\n" 2181 | ], 2182 | "name": "stdout" 2183 | }, 2184 | { 2185 | "output_type": "stream", 2186 | "text": [ 2187 | "100%|██████████| 1875/1875 [00:05<00:00, 353.96it/s]\n", 2188 | " 2%|▏ | 35/1875 [00:00<00:05, 345.44it/s]" 2189 | ], 2190 | "name": "stderr" 2191 | }, 2192 | { 2193 | "output_type": "stream", 2194 | "text": [ 2195 | "======> epoch: 103/120, Loss:0.023210963234305382\n", 2196 | "Entering Epoch: 104\n" 2197 | ], 2198 | "name": "stdout" 2199 | }, 2200 | { 2201 | "output_type": "stream", 2202 | "text": [ 2203 | "100%|██████████| 1875/1875 [00:05<00:00, 356.06it/s]\n", 2204 | " 2%|▏ | 35/1875 [00:00<00:05, 349.62it/s]" 2205 | ], 2206 | "name": "stderr" 2207 | }, 2208 | { 2209 | "output_type": "stream", 2210 | "text": [ 2211 | "======> epoch: 104/120, Loss:0.02328934520483017\n", 2212 | "Entering Epoch: 105\n" 2213 | ], 2214 | "name": "stdout" 2215 | }, 2216 | { 2217 | "output_type": "stream", 2218 | "text": [ 2219 | "100%|██████████| 1875/1875 [00:05<00:00, 355.06it/s]\n", 2220 | " 2%|▏ | 36/1875 [00:00<00:05, 352.44it/s]" 2221 | ], 2222 | "name": "stderr" 2223 | }, 2224 | { 2225 | "output_type": "stream", 2226 | "text": [ 2227 | "======> epoch: 105/120, Loss:0.02464912086725235\n", 2228 | "Entering Epoch: 106\n" 2229 | ], 2230 | "name": "stdout" 2231 | }, 2232 | { 2233 | "output_type": "stream", 2234 | "text": [ 2235 | "100%|██████████| 1875/1875 [00:05<00:00, 354.48it/s]\n", 2236 | " 2%|▏ | 36/1875 [00:00<00:05, 351.26it/s]" 2237 | ], 2238 | "name": "stderr" 2239 | }, 2240 | { 2241 | "output_type": "stream", 2242 | "text": [ 2243 | "======> epoch: 106/120, Loss:0.027664480730891228\n", 2244 | "Entering Epoch: 107\n" 2245 | ], 2246 | "name": "stdout" 2247 | }, 2248 | { 2249 | "output_type": "stream", 2250 | "text": [ 2251 | "100%|██████████| 1875/1875 [00:05<00:00, 328.02it/s]\n", 2252 | " 2%|▏ | 31/1875 [00:00<00:06, 303.27it/s]" 2253 | ], 2254 | "name": "stderr" 2255 | }, 2256 | { 2257 | "output_type": "stream", 2258 | "text": [ 2259 | "======> epoch: 107/120, Loss:0.023136386647820473\n", 2260 | "Entering Epoch: 108\n" 2261 | ], 2262 | "name": "stdout" 2263 | }, 2264 | { 2265 | "output_type": "stream", 2266 | "text": [ 2267 | "100%|██████████| 1875/1875 [00:06<00:00, 305.94it/s]\n", 2268 | " 2%|▏ | 31/1875 [00:00<00:06, 301.45it/s]" 2269 | ], 2270 | "name": "stderr" 2271 | }, 2272 | { 2273 | "output_type": "stream", 2274 | "text": [ 2275 | "======> epoch: 108/120, Loss:0.024768907576799393\n", 2276 | "Entering Epoch: 109\n" 2277 | ], 2278 | "name": "stdout" 2279 | }, 2280 | { 2281 | "output_type": "stream", 2282 | "text": [ 2283 | "100%|██████████| 1875/1875 [00:05<00:00, 349.64it/s]\n", 2284 | " 2%|▏ | 36/1875 [00:00<00:05, 352.92it/s]" 2285 | ], 2286 | "name": "stderr" 2287 | }, 2288 | { 2289 | "output_type": "stream", 2290 | "text": [ 2291 | "======> epoch: 109/120, Loss:0.02430102601647377\n", 2292 | "Entering Epoch: 110\n" 2293 | ], 2294 | "name": "stdout" 2295 | }, 2296 | { 2297 | "output_type": "stream", 2298 | "text": [ 2299 | "100%|██████████| 1875/1875 [00:05<00:00, 355.56it/s]\n", 2300 | " 2%|▏ | 36/1875 [00:00<00:05, 353.99it/s]" 2301 | ], 2302 | "name": "stderr" 2303 | }, 2304 | { 2305 | "output_type": "stream", 2306 | "text": [ 2307 | "======> epoch: 110/120, Loss:0.023662012070417404\n", 2308 | "Entering Epoch: 111\n" 2309 | ], 2310 | "name": "stdout" 2311 | }, 2312 | { 2313 | "output_type": "stream", 2314 | "text": [ 2315 | "100%|██████████| 1875/1875 [00:05<00:00, 356.75it/s]\n", 2316 | " 2%|▏ | 35/1875 [00:00<00:05, 345.46it/s]" 2317 | ], 2318 | "name": "stderr" 2319 | }, 2320 | { 2321 | "output_type": "stream", 2322 | "text": [ 2323 | "======> epoch: 111/120, Loss:0.021156126633286476\n", 2324 | "Entering Epoch: 112\n" 2325 | ], 2326 | "name": "stdout" 2327 | }, 2328 | { 2329 | "output_type": "stream", 2330 | "text": [ 2331 | "100%|██████████| 1875/1875 [00:05<00:00, 353.97it/s]\n", 2332 | " 2%|▏ | 36/1875 [00:00<00:05, 353.20it/s]" 2333 | ], 2334 | "name": "stderr" 2335 | }, 2336 | { 2337 | "output_type": "stream", 2338 | "text": [ 2339 | "======> epoch: 112/120, Loss:0.024805745109915733\n", 2340 | "Entering Epoch: 113\n" 2341 | ], 2342 | "name": "stdout" 2343 | }, 2344 | { 2345 | "output_type": "stream", 2346 | "text": [ 2347 | "100%|██████████| 1875/1875 [00:05<00:00, 355.11it/s]\n", 2348 | " 2%|▏ | 36/1875 [00:00<00:05, 351.21it/s]" 2349 | ], 2350 | "name": "stderr" 2351 | }, 2352 | { 2353 | "output_type": "stream", 2354 | "text": [ 2355 | "======> epoch: 113/120, Loss:0.022023756057024002\n", 2356 | "Entering Epoch: 114\n" 2357 | ], 2358 | "name": "stdout" 2359 | }, 2360 | { 2361 | "output_type": "stream", 2362 | "text": [ 2363 | "100%|██████████| 1875/1875 [00:05<00:00, 354.79it/s]\n", 2364 | " 2%|▏ | 35/1875 [00:00<00:05, 349.02it/s]" 2365 | ], 2366 | "name": "stderr" 2367 | }, 2368 | { 2369 | "output_type": "stream", 2370 | "text": [ 2371 | "======> epoch: 114/120, Loss:0.022249484434723854\n", 2372 | "Entering Epoch: 115\n" 2373 | ], 2374 | "name": "stdout" 2375 | }, 2376 | { 2377 | "output_type": "stream", 2378 | "text": [ 2379 | "100%|██████████| 1875/1875 [00:05<00:00, 354.98it/s]\n", 2380 | " 2%|▏ | 35/1875 [00:00<00:05, 347.03it/s]" 2381 | ], 2382 | "name": "stderr" 2383 | }, 2384 | { 2385 | "output_type": "stream", 2386 | "text": [ 2387 | "======> epoch: 115/120, Loss:0.025139397010207176\n", 2388 | "Entering Epoch: 116\n" 2389 | ], 2390 | "name": "stdout" 2391 | }, 2392 | { 2393 | "output_type": "stream", 2394 | "text": [ 2395 | "100%|██████████| 1875/1875 [00:05<00:00, 354.56it/s]\n", 2396 | " 2%|▏ | 35/1875 [00:00<00:05, 348.38it/s]" 2397 | ], 2398 | "name": "stderr" 2399 | }, 2400 | { 2401 | "output_type": "stream", 2402 | "text": [ 2403 | "======> epoch: 116/120, Loss:0.024218140169978142\n", 2404 | "Entering Epoch: 117\n" 2405 | ], 2406 | "name": "stdout" 2407 | }, 2408 | { 2409 | "output_type": "stream", 2410 | "text": [ 2411 | "100%|██████████| 1875/1875 [00:05<00:00, 355.12it/s]\n", 2412 | " 2%|▏ | 35/1875 [00:00<00:05, 347.97it/s]" 2413 | ], 2414 | "name": "stderr" 2415 | }, 2416 | { 2417 | "output_type": "stream", 2418 | "text": [ 2419 | "======> epoch: 117/120, Loss:0.02438724786043167\n", 2420 | "Entering Epoch: 118\n" 2421 | ], 2422 | "name": "stdout" 2423 | }, 2424 | { 2425 | "output_type": "stream", 2426 | "text": [ 2427 | "100%|██████████| 1875/1875 [00:05<00:00, 354.31it/s]\n", 2428 | " 2%|▏ | 36/1875 [00:00<00:05, 352.38it/s]" 2429 | ], 2430 | "name": "stderr" 2431 | }, 2432 | { 2433 | "output_type": "stream", 2434 | "text": [ 2435 | "======> epoch: 118/120, Loss:0.024126427248120308\n", 2436 | "Entering Epoch: 119\n" 2437 | ], 2438 | "name": "stdout" 2439 | }, 2440 | { 2441 | "output_type": "stream", 2442 | "text": [ 2443 | "100%|██████████| 1875/1875 [00:05<00:00, 354.11it/s]" 2444 | ], 2445 | "name": "stderr" 2446 | }, 2447 | { 2448 | "output_type": "stream", 2449 | "text": [ 2450 | "======> epoch: 119/120, Loss:0.02400180697441101\n" 2451 | ], 2452 | "name": "stdout" 2453 | }, 2454 | { 2455 | "output_type": "stream", 2456 | "text": [ 2457 | "\n" 2458 | ], 2459 | "name": "stderr" 2460 | } 2461 | ] 2462 | }, 2463 | { 2464 | "metadata": { 2465 | "id": "rT6HTaPB5IAL", 2466 | "colab_type": "code", 2467 | "outputId": "1dbaa140-6874-4ebc-99a3-8bdfd14e7ae3", 2468 | "colab": { 2469 | "base_uri": "https://localhost:8080/", 2470 | "height": 287 2471 | } 2472 | }, 2473 | "cell_type": "code", 2474 | "source": [ 2475 | "plt.plot(range(len(losslist)),losslist)" 2476 | ], 2477 | "execution_count": 20, 2478 | "outputs": [ 2479 | { 2480 | "output_type": "execute_result", 2481 | "data": { 2482 | "text/plain": [ 2483 | "[]" 2484 | ] 2485 | }, 2486 | "metadata": { 2487 | "tags": [] 2488 | }, 2489 | "execution_count": 20 2490 | }, 2491 | { 2492 | "output_type": "display_data", 2493 | "data": { 2494 | "image/png": "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\nLWKgmUjgAAAAAElFTkSuQmCC\n", 2495 | "text/plain": [ 2496 | "
" 2497 | ] 2498 | }, 2499 | "metadata": { 2500 | "tags": [] 2501 | } 2502 | } 2503 | ] 2504 | }, 2505 | { 2506 | "metadata": { 2507 | "id": "D2TAOjeZMBfp", 2508 | "colab_type": "code", 2509 | "colab": { 2510 | "base_uri": "https://localhost:8080/", 2511 | "height": 1151 2512 | }, 2513 | "outputId": "0771669b-3b4d-4311-e233-a3b432960362" 2514 | }, 2515 | "cell_type": "code", 2516 | "source": [ 2517 | "\"\"\"Here, we try to visualize some of the results.\n", 2518 | " We randomly generate 6 numbers in between 1 and 10k , run them through the model,\n", 2519 | " and show the results with comparisons\n", 2520 | " \n", 2521 | " \"\"\"\n", 2522 | "\n", 2523 | "\n", 2524 | "\n", 2525 | "\n", 2526 | "f,axes= plt.subplots(6,3,figsize=(20,20))\n", 2527 | "axes[0,0].set_title(\"Original Image\")\n", 2528 | "axes[0,1].set_title(\"Dirty Image\")\n", 2529 | "axes[0,2].set_title(\"Cleaned Image\")\n", 2530 | "\n", 2531 | "test_imgs=np.random.randint(0,10000,size=6)\n", 2532 | "for idx in range((6)):\n", 2533 | " dirty=testset[test_imgs[idx]][0]\n", 2534 | " clean=testset[test_imgs[idx]][1]\n", 2535 | " label=testset[test_imgs[idx]][2]\n", 2536 | " dirty=dirty.view(dirty.size(0),-1).type(torch.FloatTensor)\n", 2537 | " dirty=dirty.to(device)\n", 2538 | " output=model(dirty)\n", 2539 | " \n", 2540 | " output=output.view(1,28,28)\n", 2541 | " output=output.permute(1,2,0).squeeze(2)\n", 2542 | " output=output.detach().cpu().numpy()\n", 2543 | " \n", 2544 | " dirty=dirty.view(1,28,28)\n", 2545 | " dirty=dirty.permute(1,2,0).squeeze(2)\n", 2546 | " dirty=dirty.detach().cpu().numpy()\n", 2547 | " \n", 2548 | " clean=clean.permute(1,2,0).squeeze(2)\n", 2549 | " clean=clean.detach().cpu().numpy()\n", 2550 | " \n", 2551 | " axes[idx,0].imshow(clean,cmap=\"gray\")\n", 2552 | " axes[idx,1].imshow(dirty,cmap=\"gray\")\n", 2553 | " axes[idx,2].imshow(output,cmap=\"gray\")\n", 2554 | " \n", 2555 | "\n", 2556 | "\n", 2557 | " \n", 2558 | " \n", 2559 | " \n", 2560 | " " 2561 | ], 2562 | "execution_count": 67, 2563 | "outputs": [ 2564 | { 2565 | "output_type": "display_data", 2566 | "data": { 2567 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9QAAARuCAYAAAAyIn8ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XmcXWWV7//vylyZCSEhhCkCAmmU\nKQwydQCxsZVGRGmEq6j8DLcv9A9u0yDGRnBGRbEdLhqFC7YK0kyigBoRO4IyiQiBMBMwIRNkTiqV\nad0/zklb5FlP5Zxdp4az6/N+vXilsmrV3s8+FfaqVXuftc3dBQAAAAAA6tOvpxcAAAAAAEAzoqEG\nAAAAAKAAGmoAAAAAAAqgoQYAAAAAoAAaagAAAAAACqChBgAAAACgABrqOpjZdDP7fqNza9iWm9me\njdgWAKD7mNl3zOzSnl4HAKD7mNnlZvbDnl7H1ugpukafbajN7MNm9oSZrTWzhWZ2tZmN7uhr3P0L\n7v7/1bL9enI7w8x+a2Zdvh8AwBuZ2VwzazWzVWa23Mx+b2b/08z+u7a6+/909892sI2pZjavE2vo\nlT+0AUDZmdkZZvaIma02swVmdreZHdXT6yqKnqK4PtlQm9mFkr4k6SJJoyQdLmk3STPNbFDmawZ0\n3woBAE3iJHcfoUoNuULSxyVdU8sXUlcAoDmZ2b9I+rqkL0gaL2lXSf9H0sk9uS70jD7XUJvZSEmf\nlvTP7v4Ld9/g7nMlnSZpd0n/o5p3uZndbGY/NLOVkj689ZUAM/uQmb1sZq+b2aXVqxVvb/f1P6x+\nvHv1FouzzOwVM3vNzD7ZbjuHmtkfqlc4FpjZt3KN/TaObaqZzTOzi81scXVb7zGzvzezZ81sqZlN\nr3W/ZvYOM3vGzFaY2f8xs/9q/5srM/uomc0xs2Vm9ksz263eNQNAGbj7Cne/Q9I/SjrLzPaTJDO7\nzsw+V/14yzn642a2UNINku6WtFP1CsdqM9upeufU9lu2bWYHmdkSMxu4rXVUa83/MrPnqlfOP2tm\ne1Svnq80s5u2nOfNbDsz+3l128uqH+/cbluTzGxWdTu/NrNvb1UDD69ud7mZ/dnMpjbm1QSA3svM\nRkn6jKRz3f1Wd19T7Sd+5u4XZb4me740s49Uf55eZWYvmtk57T63pW5c2O5n+4+0+/xgM7uy2l8s\n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\n5ebeba9bt67s20i9bty7jtSyMwCDjnkCuZe5w4QQus3sDEn/LqlO0tIQwrP9djIAQK7RJwAAvaFP\noAj69E+2IYR7JN3TT2cBABQMfQIA0Bv6BPKuL1u+AQAAAAAYshioAQAAAADIgC0dAICaMWzYMHfZ\nlLeUzFteJkkTJkyIss2bN7u13uKv1AKr1NItb/HXuHHj3Nqenp4omzRpklu7devWKEu9rVglC7q2\nb9/u1ra3t0eZt7StUqkze/fnfT8qFUK8ANj7nvIWbQCA/sAz1AAAAAAAZMBADQAAAABABgzUAAAA\nAABkwEANAAAAAEAGDNQAAAAAAGTAlm8AQM3o6elxt1B7W7OHDfP/Tdjb/t3U1OTWtrS0lPX5kjRq\n1Cg39zZ3e5umJf/MHR0dbm13d3eUeVu7JWnbtm1u7m1HT20E964jtQm7ra2t7NutZBt7agO59/X0\nzitJY8eOjTLv6wAAQ0mqf8ycOTPKXnrppbJvN9UnUn2wiHiGGgAAAACADBioAQAAAADIgIEaAAAA\nAIAMGKgBAAAAAMiApWQDbO+993ZzbzHA8ccf79ZOnz7dzRcsWBBlBx54YNlnu//++93cO0dq4Q0A\n9Ke6ujp3WZWnvr7ezYcPj1tbaoFVakmLJ7UEzVvGlVrG4i3H8hbCSP7j7gknnODWjh8/3s2POOKI\nKNt3333d2oaGhihbvny5W+v1iUoX0HiLbLzlc5LU3t4eZallZ95is0q+RwBQa1J90Zszzj77bLf2\nqKOOcnOvZ3Z2drq1q1evjrKf/OQnbu19990XZRs3bnRrW1tb3TwveIYaAAAAAIAMGKgBAAAAAMiA\ngRoAAAAAgAwYqAEAAAAAyICBGgAAAACADKwvWy7N7FVJLZJ2SOoOIczbTX2hV2pefPHFUXbGGWe4\ntd421Up5G1L7Y2vprbfeGmWnnHJKn2+32kII8RcIQFVV2ieGDx8evE3P3uNdasuzt9G5o6PDrfU2\nd3ubuCVp1KhRbu49nqfO5m1fPe2009xa7/E81TtS1zdx4sQoS20897aKp7ag33nnnVF21llnubXd\n3d1u7p3Z+z5L/vcpdTbvdr0ttlu3blV3dzd9AhhkQ2GeqOS/2ffbb78o+853vuPWHnbYYVHW2Njo\n1qbeGcNTyeP2Cy+84NbefPPNUbZ06VK3NrXlO9WPq6mceaI/3jbrwyEEfwc6AAD0CQBA7+gTyC1+\n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\nTjnFrfU2w/74xz92a7/0pS/17WA1IoTAGnOgCvqzT9TV1YWxY8dGubedtLu7270Nr6+lto16tant\n4alN0d6G7VRvXbhwYZTdcMMNbu2YMWOiLLWt3Nu6LUlXXnlllH3yk590a5uamqLs9ttvd2vPOeec\nKPO2a0vpTeGe1Abybdu2RdmoUaPKvj/v+79p0yZ1dXXRJ4AqYJ6I1dfXu/lee+0VZR/5yEfc2q9/\n/etlfX5v1qxZE2UPPfSQW/vZz342yi699FK39uKLL46y9evXV3S2WlDOPLHbZ6hDCA9J2tQvJwIA\nFA59AgDQG/oEiqwvr6E+w8yeLv0IR/zP2gCAoY4+AQDoDX0CuZd1oL5a0r6S5kpaJ8l/rl+SmS02\ns+VmtjzjfQEA8idTn9jdy5AAAIXBPIFCyDRQhxDWhxB2hBB6JF0raX4vtUtCCPNCCPOyHhIAkC9Z\n+0TqNbQAgGJhnkBRlL8pZBdmNi2EsK704XGSVvZWP1RMnz49yvpj+djNN9/s5v/4j/8YZd4CGkm6\n9957o+zkk092ay+77LIo++Mf/9jbEQHgr2TtEyEEtbe3R7n3WJpaSuYtq9q+fXs5dy9J8paiSVJH\nR0fZeWrZzKRJk6IstVzLu43UwrQ77rjDzc8777wou+mmm9zaW2+9NcqOOOIIt3bq1KlRllqYlvo+\ntba2RlmqZ44ePTrKUovmvCVx3qIyfhoCGFxDfZ7wHqskafHixVH2+c9/3q2dNm1alHmPrZK0atUq\nN1+yZEmUPfXUU27tpz/96SibMmWKW+st4fz5z3/u1qb6R17sdqA2s1slLZQ02czWSDpf0kIzmysp\nSHpV0ukDeEYAQA2jTwAAekOfQJHtdqAOIZzkxNcNwFkAADlEnwAA9IY+gSLry5ZvAAAAAACGLAZq\nAAAAAAAyYKAGAAAAACCDTFu+4Xvf+97Xp89Pbd8788wzy76N1157zc0vuuiiKLv22mvdWm8D7IIF\nC9zarq6uss8GALtjZho5cmSUextA6+rq3NvwtoSn3o7Lq/U2SkvpDdtefWpz98EHHxxlqe2mW7du\njbLUY/y5557r5mPGjImy559/3q294ooryr7dyy+/PMo+8YlPuLVtbW1u7n3dUhvBvY3eqa+b933y\ntnzzFm0ABpO3oVvy33HhHe94h1s7YsSIKHvppZfc2tNP93e+rV69OspS/dXrz0cddZRbe9hhh0WZ\n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\n", 2568 | "text/plain": [ 2569 | "
" 2570 | ] 2571 | }, 2572 | "metadata": { 2573 | "tags": [] 2574 | } 2575 | } 2576 | ] 2577 | }, 2578 | { 2579 | "metadata": { 2580 | "id": "PhP1vseSPcZc", 2581 | "colab_type": "code", 2582 | "colab": {} 2583 | }, 2584 | "cell_type": "code", 2585 | "source": [ 2586 | "PATH=\"\"\n", 2587 | "torch.save(model.state_dict(),PATH) # We save the model state dict at PATH " 2588 | ], 2589 | "execution_count": 0, 2590 | "outputs": [] 2591 | } 2592 | ] 2593 | } -------------------------------------------------------------------------------- /Loss Curve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pranjaldatta/Denoising-Autoencoder-in-Pytorch/d73a8d14a5e47984056489b6103b6e84799d24a4/Loss Curve.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Denoising Autoencoder Pytorch 2 | A Pytorch Implementation of a denoising autoencoder. 3 | 4 | # Denoising Autoencoder 5 | An autoencoder is a neural network used for dimensionality reduction; that is, for feature selection and extraction. Autoencoders with more hidden layers than inputs run the risk of learning the identity function – where the output simply equals the input – thereby becoming useless. 6 | 7 | Denoising autoencoders are an extension of the basic autoencoder, and represent a stochastic version of it. Denoising autoencoders attempt to address identity-function risk by randomly corrupting input (i.e. introducing noise) that the autoencoder must then reconstruct, or denoise. 8 | 9 | 10 | 11 | 12 | # The Implementation 13 | 1) Two kinds of noise were introduced to the standard MNIST dataset: Gaussian and speckle, to help generalization. 14 | 2) The autoencoder architecture consists of two parts: encoder and decoder. Each part consists of 3 Linear layers with ReLU activations. The last activation layer is Sigmoid. 15 | 3) The training was done for 120 epochs. 16 | 4) Visualizations have been included in the notebook. 17 | 5) Used Google's Colaboratory with GPU enabled. 18 | 19 | -------------------------------------------------------------------------------- /download (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pranjaldatta/Denoising-Autoencoder-in-Pytorch/d73a8d14a5e47984056489b6103b6e84799d24a4/download (1).png --------------------------------------------------------------------------------