├── 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 | "
"
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, ?it/s]"
529 | ],
530 | "name": "stderr"
531 | },
532 | {
533 | "output_type": "stream",
534 | "text": [
535 | "Entering Epoch: 0\n"
536 | ],
537 | "name": "stdout"
538 | },
539 | {
540 | "output_type": "stream",
541 | "text": [
542 | "100%|██████████| 1875/1875 [00:11<00:00, 168.37it/s]\n",
543 | " 1%| | 19/1875 [00:00<00:10, 181.55it/s]"
544 | ],
545 | "name": "stderr"
546 | },
547 | {
548 | "output_type": "stream",
549 | "text": [
550 | "======> 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 | 
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 |  
25 |
26 | * The below given image describes another type of noise called the speckle noise.
27 | 
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 | 
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
--------------------------------------------------------------------------------