diff --git a/acc_train.txt b/acc_train.txt new file mode 100644 index 0000000000000000000000000000000000000000..89d6617f03914a67f9b3350dbf6e529982206c30 --- /dev/null +++ b/acc_train.txt @@ -0,0 +1 @@ +58.35839080810547,38.974273681640625,41.86991882324219,53.82002258300781,62.150569915771484,67.65229797363281,72.93128204345703,75.7545394897461,78.23253631591797,79.93094635009766,81.49014282226562,83.03820037841797,84.1463394165039,84.70319366455078,85.55518341064453,86.44615173339844,86.72457885742188,87.13665008544922,87.7658920288086,88.30047607421875,88.75152587890625,89.07450103759766,89.0967788696289,89.78170776367188,89.88751220703125,90.31072235107422,90.65597534179688,90.85643768310547,91.14600372314453,91.496826171875,92.03140258789062,91.70842742919922,92.05924987792969,92.39892578125,92.2708511352539,92.84441375732422,92.6495132446289,92.68849182128906,92.93907928466797,93.03931427001953,93.4625244140625,93.39012908935547,93.22864532470703,93.70196533203125,93.60173797607422,93.77436065673828,93.90800476074219,94.21427154541016,94.21427154541016,94.44815063476562,94.32564544677734,94.4815673828125,94.50383758544922,94.45928955078125,94.96045684814453,94.78783416748047,94.85466003417969,95.01614379882812,94.98273468017578,95.07183074951172,95.07740020751953,95.45049285888672,95.47833251953125,95.59527587890625,95.45049285888672,95.46720123291016,95.79574584960938,95.46720123291016,95.90154266357422,95.77346801757812,95.94609069824219,95.97950744628906,96.0853042602539,96.01848602294922,95.83472442626953,96.20781707763672,96.30248260498047,96.25236511230469,96.43612670898438,96.21895599365234,96.32475280761719,96.54749298095703,96.60874938964844,96.23565673828125,96.30248260498047,96.2579345703125,96.52522277832031,96.50851440429688,96.72012329101562,96.78694152832031,96.87603759765625,96.66443634033203,96.56977081298828,97.10435485839844,96.98741149902344,97.2212905883789,97.09321594238281,97.43846130371094,96.93172454833984,97.3382339477539, \ No newline at end of file diff --git a/acc_valid.txt b/acc_valid.txt new file mode 100644 index 0000000000000000000000000000000000000000..44da34cab4f17b528aeace58a9217f2bbb65e90c --- /dev/null +++ b/acc_valid.txt @@ -0,0 +1 @@ +41.695804595947266,42.07459259033203,50.786712646484375,53.93356704711914,67.04545593261719,72.29021453857422,75.96154022216797,76.34032440185547,80.97319793701172,82.54662322998047,84.76107788085938,82.28438568115234,84.00350189208984,84.09091186523438,80.50699615478516,85.05245208740234,85.81002807617188,86.74242401123047,87.6748275756836,88.37413024902344,89.53962707519531,87.47086334228516,85.13986206054688,89.7144546508789,89.07342529296875,89.8892822265625,90.3846206665039,88.60723114013672,89.18997955322266,90.3846206665039,87.41259002685547,90.06410217285156,91.84149169921875,90.26806640625,90.00582885742188,90.96736907958984,92.80303192138672,92.4825210571289,91.92890930175781,92.51165771484375,92.51165771484375,91.8123550415039,91.9871826171875,92.68648529052734,90.73426818847656,91.84149169921875,91.60839080810547,91.08391571044922,90.15151977539062,92.33683013916016,93.0361328125,92.8613052368164,91.14219665527344,93.0361328125,92.22028350830078,93.50233459472656,91.84149169921875,92.42424774169922,93.12354278564453,91.8123550415039,91.89977264404297,93.38578033447266,92.91958618164062,92.97785949707031,92.97785949707031,92.89044189453125,92.77389526367188,93.26923370361328,92.27855682373047,93.67715454101562,90.64685821533203,93.35664367675781,92.83216857910156,90.55944061279297,93.09440612792969,93.76457214355469,93.2109603881836,93.82284545898438,94.2016372680664,94.2599105834961,93.15267944335938,94.05594635009766,93.12354278564453,92.71562194824219,93.24009704589844,93.09440612792969,93.706298828125,93.09440612792969,93.5314712524414,93.0361328125,93.0361328125,91.84149169921875,93.26923370361328,93.64801788330078,93.5897445678711,93.24009704589844,93.4149169921875,92.365966796875,93.32750701904297,93.26923370361328, \ No newline at end of file diff --git a/accuracy graph.png b/accuracy graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f294f5bfb3abe4aa0a3b0bad1edc0c84a2ca7c92 Binary files /dev/null and b/accuracy graph.png differ diff --git a/loss_graph.png b/loss_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..0724b14c24211d183649a100975317bcccb354f7 Binary files /dev/null and b/loss_graph.png differ diff --git a/loss_train.txt b/loss_train.txt new file mode 100644 index 0000000000000000000000000000000000000000..fbbf8489e69604443a9066bbbec038109c457694 --- /dev/null +++ b/loss_train.txt @@ -0,0 +1 @@ +0.914432241905508,1.0890498682110008,1.0662257934540371,0.9452635404780139,0.8404942769644336,0.7515576027219265,0.6553787542587929,0.5984709460211143,0.5494870943830422,0.507801607659282,0.475695323052212,0.4427371546775401,0.4208838353275695,0.4047454656782991,0.3814310352134462,0.36165558965099043,0.3499462316397505,0.3417469370132219,0.32446076793741724,0.3128658552220466,0.30718623231860026,0.29598417520863995,0.29296387868150126,0.28096779631407226,0.27288863636458727,0.26251778235931494,0.2528367002196635,0.2493721120098062,0.23771963591246295,0.23299069632589445,0.21981321552266916,0.2242309237099654,0.2155117008803349,0.21132812228112288,0.21102125828578053,0.19736276233756048,0.20021629007828703,0.19472804411209288,0.19126591536402454,0.1892140577309289,0.1849187507919977,0.18017891168973235,0.17833757304114276,0.17453937580822684,0.17488584187559586,0.1726669366043758,0.16568992694280854,0.15917962465835606,0.15688422384408085,0.15529663549882652,0.15443131572264573,0.152165321827323,0.15489908727430274,0.15120611710011345,0.14257824354656987,0.14376684254857805,0.1416665404072979,0.14132470331956062,0.13774039280139228,0.1365385185085144,0.1339924920826395,0.12671960176213046,0.1272511701059914,0.12427176386052612,0.1256792281649759,0.12305945707299219,0.12008903637128238,0.1256913678270252,0.1153034656942771,0.11705282526459351,0.11615417962122407,0.11272501567678504,0.10964956702529571,0.11056176645729632,0.11442205218720572,0.10801927556841974,0.10369276028072548,0.10404491375993895,0.10127940310245813,0.10357804772454646,0.10030484552251853,0.09790428215490048,0.09364842431968232,0.10315570906621563,0.10619501250726575,0.10173944924043836,0.09475720067962554,0.0937476508884171,0.09153650025377333,0.09177952346612209,0.08767617185204449,0.09118074719615739,0.0934940773506567,0.08378215233652878,0.08626696844556661,0.07630516203438335,0.08121319106953721,0.07288453491202773,0.08167959343807132,0.07379477550745815, \ No newline at end of file diff --git a/loss_valid.txt b/loss_valid.txt new file mode 100644 index 0000000000000000000000000000000000000000..47406c8cf55ec4cdbabaf3902e0682efde776a3a --- /dev/null +++ b/loss_valid.txt @@ -0,0 +1 @@ +5.409840382896103,1.095459109836525,1.0233849641326425,0.9735279810595345,0.7909036162016275,0.6617921316227713,0.600804440729268,0.6025271806996185,0.5079557338169405,0.470249051397497,0.4123567695618718,0.4919014720676037,0.4265763459245225,0.4179441516215985,0.5162362984896123,0.40533430202883647,0.39853324747230806,0.35603674894550463,0.3297091824608249,0.3081557689677481,0.2822078019266596,0.3331428560529269,0.42421120914493826,0.27224766077486784,0.2927218007519711,0.2565011253248301,0.2649005456987143,0.31809036474401403,0.2842411591990532,0.25794894697300935,0.3671372201606319,0.2617451622382041,0.2166683126104201,0.2458611200286818,0.2739809727706536,0.24537122051452998,0.19146192192191167,0.21164633981863987,0.21948707287307256,0.19899258399919534,0.19786197571792163,0.20933886382963274,0.21087480854801507,0.198691404610221,0.2510351604974171,0.21986821062302778,0.24698349234560127,0.2374941237699045,0.2746820056499992,0.2164135592748652,0.19292548215309796,0.18469755996468026,0.24901559958364683,0.19339173547459532,0.2274237628619128,0.1880218390535345,0.2215084930811846,0.19347836490284157,0.17894948498179836,0.26113796456500404,0.22216347089302693,0.1883458425563604,0.20709543079186649,0.1905532755385889,0.18847293753854252,0.19960758069015622,0.1988617337125246,0.16786505198684176,0.21208965312119676,0.20881903899379295,0.2535806185243508,0.1982893103600758,0.20687334963822268,0.30711406602449326,0.2169607431286705,0.1882967368903744,0.19063742153016425,0.18182275275548374,0.1773022400500506,0.19315277243751897,0.19040795559876833,0.161329732964408,0.1806079926772346,0.21166090780284608,0.2039699403058666,0.2143698412387907,0.19312768667411032,0.22016905881529608,0.21557865292363038,0.23296234081051528,0.20201801803570332,0.2518969925864961,0.20770283206752696,0.2195557528395473,0.19878985075316907,0.22536614060933519,0.19445914231837888,0.27327212523161215,0.22818992230595478,0.21039123502321838, diff --git a/resnet18.ipynb b/resnet18.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..4db966925e92dfa7f2ea146484a0c13da7dd4a82 --- /dev/null +++ b/resnet18.ipynb @@ -0,0 +1,2187 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "17767f9b", + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "import torchvision\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import torch.optim as optim\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d01df462", + "metadata": {}, + "outputs": [], + "source": [ + "import torchvision.models as models\n", + "net = models.resnet18()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "754cb9a3", + "metadata": {}, + "outputs": [], + "source": [ + "net.conv1 = nn.Conv2d(1, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0d2b4c59", + "metadata": {}, + "outputs": [], + "source": [ + "net.conv1 = nn.Conv2d(1, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", + "net.fc = nn.Linear(in_features=512, out_features=3, bias=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "fd36529f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ResNet(\n", + " (conv1): Conv2d(1, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", + " (layer1): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer2): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(64, 128, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer3): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(128, 256, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer4): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (avgpool): AdaptiveAvgPool2d(output_size=(1, 1))\n", + " (fc): Linear(in_features=512, out_features=3, bias=True)\n", + ")" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "net" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "35ed82d4", + "metadata": {}, + "outputs": [], + "source": [ + "if torch.cuda.is_available():\n", + " net = net.cuda()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9039d0ba", + "metadata": {}, + "outputs": [], + "source": [ + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "82f5a0c9", + "metadata": {}, + "outputs": [], + "source": [ + "from torchvision import datasets, transforms\n", + "from torch.utils.data import DataLoader, random_split" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "25136ecd", + "metadata": {}, + "outputs": [], + "source": [ + "def UploadData(path, train):\n", + " #set up transforms for train and test datasets\n", + " train_transforms = transforms.Compose([transforms.Grayscale(num_output_channels=1), transforms.Resize(512), transforms.CenterCrop(511), transforms.RandomRotation(30),transforms.RandomHorizontalFlip(), transforms.transforms.ToTensor()]) \n", + " valid_transforms = transforms.Compose([transforms.Grayscale(num_output_channels=1), transforms.Resize(512), transforms.CenterCrop(511), transforms.transforms.ToTensor()]) \n", + " #test_transforms = transforms.Compose([transforms.Grayscale(num_output_channels=1), transforms.Resize(512), transforms.CenterCrop(511), transforms.ToTensor()])\n", + " \n", + " #set up datasets from Image Folders\n", + " train_dataset = datasets.ImageFolder(path + '/train', transform=train_transforms)\n", + " valid_dataset = datasets.ImageFolder(path + '/validation', transform=valid_transforms)\n", + " #test_dataset = datasets.ImageFolder(path + '/test', transform=test_transforms)\n", + "\n", + " #set up dataloaders with batch size of 32\n", + " trainloader = torch.utils.data.DataLoader(train_dataset, batch_size=12, shuffle=True)\n", + " validloader = torch.utils.data.DataLoader(valid_dataset, batch_size=12, shuffle=True)\n", + " #testloader = torch.utils.data.DataLoader(test_dataset, batch_size=32, shuffle=True)\n", + " \n", + " return trainloader, validloader #, testloader" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "36c1e09d", + "metadata": {}, + "outputs": [], + "source": [ + "trainloader, validloader = UploadData(\"/home/user/research/CXR_Covid-19_Challenge\", True) #, testloader" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "291f8643", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'covid': 0, 'normal': 1, 'pneumonia': 2}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trainloader.dataset.class_to_idx" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "b1234549", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "playsound is relying on another python subprocess. Please use `pip install pygobject` if you want playsound to run more efficiently.\n" + ] + } + ], + "source": [ + "import time\n", + "from tqdm import tqdm\n", + "from playsound import playsound\n", + "def convert(seconds):\n", + " return time.strftime(\"%H:%M:%S\", time.gmtime(seconds))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "dbc639ac", + "metadata": {}, + "outputs": [], + "source": [ + "min_valid_loss = np.inf" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "4de4f21c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 0%| | 0/1497 [00:00<?, ?it/s]/home/user/anaconda3/lib/python3.8/site-packages/torch/nn/functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at /pytorch/c10/core/TensorImpl.h:1156.)\n", + " return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)\n", + "100%|██████████| 1497/1497 [13:52<00:00, 1.80it/s]\n", + "100%|██████████| 286/286 [01:23<00:00, 3.42it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1 \tTraining Loss: 0.914432241905508 \tValidation Loss: 5.409840382896103 \t time: 00:15:15\n", + "Train Accuracy : 58.35839080810547 \tValidation Accuracy : 41.695804595947266\n", + "Validation Loss Decreased( inf ---> 1547.2143495082855 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:32<00:00, 2.92it/s]\n", + "100%|██████████| 286/286 [00:56<00:00, 5.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 2 \tTraining Loss: 1.0890498682110008 \tValidation Loss: 1.095459109836525 \t time: 00:09:29\n", + "Train Accuracy : 38.974273681640625 \tValidation Accuracy : 42.07459259033203\n", + "Validation Loss Decreased( 1547.2143495082855 ---> 313.30130541324615 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:54<00:00, 2.80it/s]\n", + "100%|██████████| 286/286 [01:00<00:00, 4.70it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 3 \tTraining Loss: 1.0662257934540371 \tValidation Loss: 1.0233849641326425 \t time: 00:09:55\n", + "Train Accuracy : 41.86991882324219 \tValidation Accuracy : 50.786712646484375\n", + "Validation Loss Decreased( 313.30130541324615 ---> 292.68809974193573 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [09:51<00:00, 2.53it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 4 \tTraining Loss: 0.9452635404780139 \tValidation Loss: 0.9735279810595345 \t time: 00:10:57\n", + "Train Accuracy : 53.82002258300781 \tValidation Accuracy : 53.93356704711914\n", + "Validation Loss Decreased( 292.68809974193573 ---> 278.4290025830269 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [09:51<00:00, 2.53it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.58it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 5 \tTraining Loss: 0.8404942769644336 \tValidation Loss: 0.7909036162016275 \t time: 00:10:54\n", + "Train Accuracy : 62.150569915771484 \tValidation Accuracy : 67.04545593261719\n", + "Validation Loss Decreased( 278.4290025830269 ---> 226.19843423366547 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [09:58<00:00, 2.50it/s]\n", + "100%|██████████| 286/286 [00:59<00:00, 4.78it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 6 \tTraining Loss: 0.7515576027219265 \tValidation Loss: 0.6617921316227713 \t time: 00:10:57\n", + "Train Accuracy : 67.65229797363281 \tValidation Accuracy : 72.29021453857422\n", + "Validation Loss Decreased( 226.19843423366547 ---> 189.2725496441126 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:04<00:00, 2.48it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.53it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 7 \tTraining Loss: 0.6553787542587929 \tValidation Loss: 0.600804440729268 \t time: 00:11:07\n", + "Train Accuracy : 72.93128204345703 \tValidation Accuracy : 75.96154022216797\n", + "Validation Loss Decreased( 189.2725496441126 ---> 171.83007004857063 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:06<00:00, 2.47it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.39it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 8 \tTraining Loss: 0.5984709460211143 \tValidation Loss: 0.6025271806996185 \t time: 00:11:12\n", + "Train Accuracy : 75.7545394897461 \tValidation Accuracy : 76.34032440185547\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:05<00:00, 2.47it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.46it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 9 \tTraining Loss: 0.5494870943830422 \tValidation Loss: 0.5079557338169405 \t time: 00:11:09\n", + "Train Accuracy : 78.23253631591797 \tValidation Accuracy : 80.97319793701172\n", + "Validation Loss Decreased( 171.83007004857063 ---> 145.27533987164497 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:05<00:00, 2.47it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.33it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 10 \tTraining Loss: 0.507801607659282 \tValidation Loss: 0.470249051397497 \t time: 00:11:11\n", + "Train Accuracy : 79.93094635009766 \tValidation Accuracy : 82.54662322998047\n", + "Validation Loss Decreased( 145.27533987164497 ---> 134.49122869968414 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:15<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 11 \tTraining Loss: 0.475695323052212 \tValidation Loss: 0.4123567695618718 \t time: 00:11:21\n", + "Train Accuracy : 81.49014282226562 \tValidation Accuracy : 84.76107788085938\n", + "Validation Loss Decreased( 134.49122869968414 ---> 117.93403609469533 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:16<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.30it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 12 \tTraining Loss: 0.4427371546775401 \tValidation Loss: 0.4919014720676037 \t time: 00:11:23\n", + "Train Accuracy : 83.03820037841797 \tValidation Accuracy : 82.28438568115234\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:16<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.54it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 13 \tTraining Loss: 0.4208838353275695 \tValidation Loss: 0.4265763459245225 \t time: 00:11:19\n", + "Train Accuracy : 84.1463394165039 \tValidation Accuracy : 84.00350189208984\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:56<00:00, 2.79it/s]\n", + "100%|██████████| 286/286 [00:57<00:00, 4.95it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 14 \tTraining Loss: 0.4047454656782991 \tValidation Loss: 0.4179441516215985 \t time: 00:09:54\n", + "Train Accuracy : 84.70319366455078 \tValidation Accuracy : 84.09091186523438\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:35<00:00, 2.90it/s]\n", + "100%|██████████| 286/286 [00:53<00:00, 5.33it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 15 \tTraining Loss: 0.3814310352134462 \tValidation Loss: 0.5162362984896123 \t time: 00:09:29\n", + "Train Accuracy : 85.55518341064453 \tValidation Accuracy : 80.50699615478516\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:42<00:00, 2.87it/s]\n", + "100%|██████████| 286/286 [00:55<00:00, 5.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 16 \tTraining Loss: 0.36165558965099043 \tValidation Loss: 0.40533430202883647 \t time: 00:09:37\n", + "Train Accuracy : 86.44615173339844 \tValidation Accuracy : 85.05245208740234\n", + "Validation Loss Decreased( 117.93403609469533 ---> 115.92561038024724 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:39<00:00, 2.88it/s]\n", + "100%|██████████| 286/286 [00:57<00:00, 5.00it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 17 \tTraining Loss: 0.3499462316397505 \tValidation Loss: 0.39853324747230806 \t time: 00:09:37\n", + "Train Accuracy : 86.72457885742188 \tValidation Accuracy : 85.81002807617188\n", + "Validation Loss Decreased( 115.92561038024724 ---> 113.9805087770801 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [09:11<00:00, 2.72it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.57it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 18 \tTraining Loss: 0.3417469370132219 \tValidation Loss: 0.35603674894550463 \t time: 00:10:13\n", + "Train Accuracy : 87.13665008544922 \tValidation Accuracy : 86.74242401123047\n", + "Validation Loss Decreased( 113.9805087770801 ---> 101.82651019841433 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:14<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.17it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 19 \tTraining Loss: 0.32446076793741724 \tValidation Loss: 0.3297091824608249 \t time: 00:11:22\n", + "Train Accuracy : 87.7658920288086 \tValidation Accuracy : 87.6748275756836\n", + "Validation Loss Decreased( 101.82651019841433 ---> 94.29682618379593 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:45<00:00, 2.32it/s]\n", + "100%|██████████| 286/286 [01:10<00:00, 4.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 20 \tTraining Loss: 0.3128658552220466 \tValidation Loss: 0.3081557689677481 \t time: 00:11:55\n", + "Train Accuracy : 88.30047607421875 \tValidation Accuracy : 88.37413024902344\n", + "Validation Loss Decreased( 94.29682618379593 ---> 88.13254992477596 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:05<00:00, 2.25it/s]\n", + "100%|██████████| 286/286 [01:11<00:00, 3.99it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 21 \tTraining Loss: 0.30718623231860026 \tValidation Loss: 0.2822078019266596 \t time: 00:12:16\n", + "Train Accuracy : 88.75152587890625 \tValidation Accuracy : 89.53962707519531\n", + "Validation Loss Decreased( 88.13254992477596 ---> 80.71143135102466 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:17<00:00, 2.21it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.15it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 22 \tTraining Loss: 0.29598417520863995 \tValidation Loss: 0.3331428560529269 \t time: 00:12:26\n", + "Train Accuracy : 89.07450103759766 \tValidation Accuracy : 87.47086334228516\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:44<00:00, 2.12it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.24it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 23 \tTraining Loss: 0.29296387868150126 \tValidation Loss: 0.42421120914493826 \t time: 00:12:52\n", + "Train Accuracy : 89.0967788696289 \tValidation Accuracy : 85.13986206054688\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:45<00:00, 2.12it/s]\n", + "100%|██████████| 286/286 [01:11<00:00, 4.01it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 24 \tTraining Loss: 0.28096779631407226 \tValidation Loss: 0.27224766077486784 \t time: 00:12:56\n", + "Train Accuracy : 89.78170776367188 \tValidation Accuracy : 89.7144546508789\n", + "Validation Loss Decreased( 80.71143135102466 ---> 77.8628309816122 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:28<00:00, 2.18it/s]\n", + "100%|██████████| 286/286 [00:59<00:00, 4.83it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 25 \tTraining Loss: 0.27288863636458727 \tValidation Loss: 0.2927218007519711 \t time: 00:12:27\n", + "Train Accuracy : 89.88751220703125 \tValidation Accuracy : 89.07342529296875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:59<00:00, 2.77it/s]\n", + "100%|██████████| 286/286 [00:57<00:00, 4.98it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 26 \tTraining Loss: 0.26251778235931494 \tValidation Loss: 0.2565011253248301 \t time: 00:09:57\n", + "Train Accuracy : 90.31072235107422 \tValidation Accuracy : 89.8892822265625\n", + "Validation Loss Decreased( 77.8628309816122 ---> 73.35932184290141 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:36<00:00, 2.90it/s]\n", + "100%|██████████| 286/286 [00:53<00:00, 5.33it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 27 \tTraining Loss: 0.2528367002196635 \tValidation Loss: 0.2649005456987143 \t time: 00:09:30\n", + "Train Accuracy : 90.65597534179688 \tValidation Accuracy : 90.3846206665039\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [08:36<00:00, 2.90it/s]\n", + "100%|██████████| 286/286 [00:53<00:00, 5.33it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 28 \tTraining Loss: 0.2493721120098062 \tValidation Loss: 0.31809036474401403 \t time: 00:09:30\n", + "Train Accuracy : 90.85643768310547 \tValidation Accuracy : 88.60723114013672\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [09:27<00:00, 2.64it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.34it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 29 \tTraining Loss: 0.23771963591246295 \tValidation Loss: 0.2842411591990532 \t time: 00:10:33\n", + "Train Accuracy : 91.14600372314453 \tValidation Accuracy : 89.18997955322266\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:15<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.44it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 30 \tTraining Loss: 0.23299069632589445 \tValidation Loss: 0.25794894697300935 \t time: 00:11:19\n", + "Train Accuracy : 91.496826171875 \tValidation Accuracy : 90.3846206665039\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:48<00:00, 2.31it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.36it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 31 \tTraining Loss: 0.21981321552266916 \tValidation Loss: 0.3671372201606319 \t time: 00:11:53\n", + "Train Accuracy : 92.03140258789062 \tValidation Accuracy : 87.41259002685547\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:12<00:00, 2.23it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.30it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 32 \tTraining Loss: 0.2242309237099654 \tValidation Loss: 0.2617451622382041 \t time: 00:12:18\n", + "Train Accuracy : 91.70842742919922 \tValidation Accuracy : 90.06410217285156\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:27<00:00, 2.18it/s]\n", + "100%|██████████| 286/286 [01:09<00:00, 4.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 33 \tTraining Loss: 0.2155117008803349 \tValidation Loss: 0.2166683126104201 \t time: 00:12:37\n", + "Train Accuracy : 92.05924987792969 \tValidation Accuracy : 91.84149169921875\n", + "Validation Loss Decreased( 73.35932184290141 ---> 61.96713740658015 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:19<00:00, 2.20it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.27it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 34 \tTraining Loss: 0.21132812228112288 \tValidation Loss: 0.2458611200286818 \t time: 00:12:26\n", + "Train Accuracy : 92.39892578125 \tValidation Accuracy : 90.26806640625\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:08<00:00, 2.46it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.57it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 35 \tTraining Loss: 0.21102125828578053 \tValidation Loss: 0.2739809727706536 \t time: 00:11:10\n", + "Train Accuracy : 92.2708511352539 \tValidation Accuracy : 90.00582885742188\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:23<00:00, 2.40it/s]\n", + "100%|██████████| 286/286 [01:01<00:00, 4.64it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 36 \tTraining Loss: 0.19736276233756048 \tValidation Loss: 0.24537122051452998 \t time: 00:11:25\n", + "Train Accuracy : 92.84441375732422 \tValidation Accuracy : 90.96736907958984\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:28<00:00, 2.38it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.38it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 37 \tTraining Loss: 0.20021629007828703 \tValidation Loss: 0.19146192192191167 \t time: 00:11:33\n", + "Train Accuracy : 92.6495132446289 \tValidation Accuracy : 92.80303192138672\n", + "Validation Loss Decreased( 61.96713740658015 ---> 54.75810966966674 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:32<00:00, 2.37it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.27it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 38 \tTraining Loss: 0.19472804411209288 \tValidation Loss: 0.21164633981863987 \t time: 00:11:39\n", + "Train Accuracy : 92.68849182128906 \tValidation Accuracy : 92.4825210571289\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:27<00:00, 2.39it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.27it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 39 \tTraining Loss: 0.19126591536402454 \tValidation Loss: 0.21948707287307256 \t time: 00:11:33\n", + "Train Accuracy : 92.93907928466797 \tValidation Accuracy : 91.92890930175781\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:32<00:00, 2.37it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.31it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 40 \tTraining Loss: 0.1892140577309289 \tValidation Loss: 0.19899258399919534 \t time: 00:11:38\n", + "Train Accuracy : 93.03931427001953 \tValidation Accuracy : 92.51165771484375\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:29<00:00, 2.38it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.18it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 41 \tTraining Loss: 0.1849187507919977 \tValidation Loss: 0.19786197571792163 \t time: 00:11:38\n", + "Train Accuracy : 93.4625244140625 \tValidation Accuracy : 92.51165771484375\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:28<00:00, 2.38it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.38it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 42 \tTraining Loss: 0.18017891168973235 \tValidation Loss: 0.20933886382963274 \t time: 00:11:33\n", + "Train Accuracy : 93.39012908935547 \tValidation Accuracy : 91.8123550415039\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:34<00:00, 2.36it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.22it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 43 \tTraining Loss: 0.17833757304114276 \tValidation Loss: 0.21087480854801507 \t time: 00:11:42\n", + "Train Accuracy : 93.22864532470703 \tValidation Accuracy : 91.9871826171875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:32<00:00, 2.37it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.27it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 44 \tTraining Loss: 0.17453937580822684 \tValidation Loss: 0.198691404610221 \t time: 00:11:39\n", + "Train Accuracy : 93.70196533203125 \tValidation Accuracy : 92.68648529052734\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:34<00:00, 2.36it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.44it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 45 \tTraining Loss: 0.17488584187559586 \tValidation Loss: 0.2510351604974171 \t time: 00:11:38\n", + "Train Accuracy : 93.60173797607422 \tValidation Accuracy : 90.73426818847656\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:32<00:00, 2.37it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.28it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 46 \tTraining Loss: 0.1726669366043758 \tValidation Loss: 0.21986821062302778 \t time: 00:11:39\n", + "Train Accuracy : 93.77436065673828 \tValidation Accuracy : 91.84149169921875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:30<00:00, 2.38it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.25it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 47 \tTraining Loss: 0.16568992694280854 \tValidation Loss: 0.24698349234560127 \t time: 00:11:37\n", + "Train Accuracy : 93.90800476074219 \tValidation Accuracy : 91.60839080810547\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:30<00:00, 2.37it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.24it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 48 \tTraining Loss: 0.15917962465835606 \tValidation Loss: 0.2374941237699045 \t time: 00:11:38\n", + "Train Accuracy : 94.21427154541016 \tValidation Accuracy : 91.08391571044922\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:20<00:00, 2.41it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.44it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 49 \tTraining Loss: 0.15688422384408085 \tValidation Loss: 0.2746820056499992 \t time: 00:11:24\n", + "Train Accuracy : 94.21427154541016 \tValidation Accuracy : 90.15151977539062\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:35<00:00, 2.35it/s]\n", + "100%|██████████| 286/286 [01:09<00:00, 4.11it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 50 \tTraining Loss: 0.15529663549882652 \tValidation Loss: 0.2164135592748652 \t time: 00:11:45\n", + "Train Accuracy : 94.44815063476562 \tValidation Accuracy : 92.33683013916016\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:24<00:00, 2.19it/s]\n", + "100%|██████████| 286/286 [01:11<00:00, 4.01it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 51 \tTraining Loss: 0.15443131572264573 \tValidation Loss: 0.19292548215309796 \t time: 00:12:35\n", + "Train Accuracy : 94.32564544677734 \tValidation Accuracy : 93.0361328125\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:26<00:00, 2.18it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.16it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 52 \tTraining Loss: 0.152165321827323 \tValidation Loss: 0.18469755996468026 \t time: 00:12:35\n", + "Train Accuracy : 94.4815673828125 \tValidation Accuracy : 92.8613052368164\n", + "Validation Loss Decreased( 54.75810966966674 ---> 52.82350214989856 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:33<00:00, 2.16it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.17it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 53 \tTraining Loss: 0.15489908727430274 \tValidation Loss: 0.24901559958364683 \t time: 00:12:41\n", + "Train Accuracy : 94.50383758544922 \tValidation Accuracy : 91.14219665527344\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [11:03<00:00, 2.26it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.52it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 54 \tTraining Loss: 0.15120611710011345 \tValidation Loss: 0.19339173547459532 \t time: 00:12:07\n", + "Train Accuracy : 94.45928955078125 \tValidation Accuracy : 93.0361328125\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:20<00:00, 2.41it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.54it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 55 \tTraining Loss: 0.14257824354656987 \tValidation Loss: 0.2274237628619128 \t time: 00:11:23\n", + "Train Accuracy : 94.96045684814453 \tValidation Accuracy : 92.22028350830078\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:12<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.56it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 56 \tTraining Loss: 0.14376684254857805 \tValidation Loss: 0.1880218390535345 \t time: 00:11:15\n", + "Train Accuracy : 94.78783416748047 \tValidation Accuracy : 93.50233459472656\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:12<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.40it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 57 \tTraining Loss: 0.1416665404072979 \tValidation Loss: 0.2215084930811846 \t time: 00:11:17\n", + "Train Accuracy : 94.85466003417969 \tValidation Accuracy : 91.84149169921875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:08<00:00, 2.46it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.50it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 58 \tTraining Loss: 0.14132470331956062 \tValidation Loss: 0.19347836490284157 \t time: 00:11:12\n", + "Train Accuracy : 95.01614379882812 \tValidation Accuracy : 92.42424774169922\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:06<00:00, 2.47it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 59 \tTraining Loss: 0.13774039280139228 \tValidation Loss: 0.17894948498179836 \t time: 00:11:10\n", + "Train Accuracy : 94.98273468017578 \tValidation Accuracy : 93.12354278564453\n", + "Validation Loss Decreased( 52.82350214989856 ---> 51.17955270479433 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:14<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.49it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 60 \tTraining Loss: 0.1365385185085144 \tValidation Loss: 0.26113796456500404 \t time: 00:11:18\n", + "Train Accuracy : 95.07183074951172 \tValidation Accuracy : 91.8123550415039\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:11<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.30it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 61 \tTraining Loss: 0.1339924920826395 \tValidation Loss: 0.22216347089302693 \t time: 00:11:17\n", + "Train Accuracy : 95.07740020751953 \tValidation Accuracy : 91.89977264404297\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:18<00:00, 2.42it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.34it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 62 \tTraining Loss: 0.12671960176213046 \tValidation Loss: 0.1883458425563604 \t time: 00:11:24\n", + "Train Accuracy : 95.45049285888672 \tValidation Accuracy : 93.38578033447266\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:12<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:01<00:00, 4.66it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 63 \tTraining Loss: 0.1272511701059914 \tValidation Loss: 0.20709543079186649 \t time: 00:11:13\n", + "Train Accuracy : 95.47833251953125 \tValidation Accuracy : 92.91958618164062\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:11<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.61it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 64 \tTraining Loss: 0.12427176386052612 \tValidation Loss: 0.1905532755385889 \t time: 00:11:13\n", + "Train Accuracy : 95.59527587890625 \tValidation Accuracy : 92.97785949707031\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:14<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.46it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 65 \tTraining Loss: 0.1256792281649759 \tValidation Loss: 0.18847293753854252 \t time: 00:11:18\n", + "Train Accuracy : 95.45049285888672 \tValidation Accuracy : 92.97785949707031\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:15<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.36it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 66 \tTraining Loss: 0.12305945707299219 \tValidation Loss: 0.19960758069015622 \t time: 00:11:20\n", + "Train Accuracy : 95.46720123291016 \tValidation Accuracy : 92.89044189453125\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:22<00:00, 2.40it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.49it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 67 \tTraining Loss: 0.12008903637128238 \tValidation Loss: 0.1988617337125246 \t time: 00:11:26\n", + "Train Accuracy : 95.79574584960938 \tValidation Accuracy : 92.77389526367188\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:18<00:00, 2.42it/s]\n", + "100%|██████████| 286/286 [01:01<00:00, 4.62it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 68 \tTraining Loss: 0.1256913678270252 \tValidation Loss: 0.16786505198684176 \t time: 00:11:20\n", + "Train Accuracy : 95.46720123291016 \tValidation Accuracy : 93.26923370361328\n", + "Validation Loss Decreased( 51.17955270479433 ---> 48.00940486823674 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:13<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.57it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 69 \tTraining Loss: 0.1153034656942771 \tValidation Loss: 0.21208965312119676 \t time: 00:11:15\n", + "Train Accuracy : 95.90154266357422 \tValidation Accuracy : 92.27855682373047\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:22<00:00, 2.41it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.46it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 70 \tTraining Loss: 0.11705282526459351 \tValidation Loss: 0.20881903899379295 \t time: 00:11:26\n", + "Train Accuracy : 95.77346801757812 \tValidation Accuracy : 93.67715454101562\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:14<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.40it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 71 \tTraining Loss: 0.11615417962122407 \tValidation Loss: 0.2535806185243508 \t time: 00:11:19\n", + "Train Accuracy : 95.94609069824219 \tValidation Accuracy : 90.64685821533203\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:16<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.21it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 72 \tTraining Loss: 0.11272501567678504 \tValidation Loss: 0.1982893103600758 \t time: 00:11:24\n", + "Train Accuracy : 95.97950744628906 \tValidation Accuracy : 93.35664367675781\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:16<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.43it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 73 \tTraining Loss: 0.10964956702529571 \tValidation Loss: 0.20687334963822268 \t time: 00:11:20\n", + "Train Accuracy : 96.0853042602539 \tValidation Accuracy : 92.83216857910156\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:17<00:00, 2.42it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.59it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 74 \tTraining Loss: 0.11056176645729632 \tValidation Loss: 0.30711406602449326 \t time: 00:11:20\n", + "Train Accuracy : 96.01848602294922 \tValidation Accuracy : 90.55944061279297\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:16<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:00<00:00, 4.69it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 75 \tTraining Loss: 0.11442205218720572 \tValidation Loss: 0.2169607431286705 \t time: 00:11:17\n", + "Train Accuracy : 95.83472442626953 \tValidation Accuracy : 93.09440612792969\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:17<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.60it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 76 \tTraining Loss: 0.10801927556841974 \tValidation Loss: 0.1882967368903744 \t time: 00:11:19\n", + "Train Accuracy : 96.20781707763672 \tValidation Accuracy : 93.76457214355469\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:16<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.24it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 77 \tTraining Loss: 0.10369276028072548 \tValidation Loss: 0.19063742153016425 \t time: 00:11:24\n", + "Train Accuracy : 96.30248260498047 \tValidation Accuracy : 93.2109603881836\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:05<00:00, 2.47it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.31it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 78 \tTraining Loss: 0.10404491375993895 \tValidation Loss: 0.18182275275548374 \t time: 00:11:11\n", + "Train Accuracy : 96.25236511230469 \tValidation Accuracy : 93.82284545898438\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:09<00:00, 2.46it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.39it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 79 \tTraining Loss: 0.10127940310245813 \tValidation Loss: 0.1773022400500506 \t time: 00:11:14\n", + "Train Accuracy : 96.43612670898438 \tValidation Accuracy : 94.2016372680664\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:06<00:00, 2.47it/s]\n", + "100%|██████████| 286/286 [01:00<00:00, 4.75it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 80 \tTraining Loss: 0.10357804772454646 \tValidation Loss: 0.19315277243751897 \t time: 00:11:06\n", + "Train Accuracy : 96.21895599365234 \tValidation Accuracy : 94.2599105834961\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:11<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.31it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 81 \tTraining Loss: 0.10030484552251853 \tValidation Loss: 0.19040795559876833 \t time: 00:11:17\n", + "Train Accuracy : 96.32475280761719 \tValidation Accuracy : 93.15267944335938\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:07<00:00, 2.46it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.37it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 82 \tTraining Loss: 0.09790428215490048 \tValidation Loss: 0.161329732964408 \t time: 00:11:12\n", + "Train Accuracy : 96.54749298095703 \tValidation Accuracy : 94.05594635009766\n", + "Validation Loss Decreased( 48.00940486823674 ---> 46.140303627820686 ) \t Saving The Model\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:08<00:00, 2.46it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.26it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 83 \tTraining Loss: 0.09364842431968232 \tValidation Loss: 0.1806079926772346 \t time: 00:11:15\n", + "Train Accuracy : 96.60874938964844 \tValidation Accuracy : 93.12354278564453\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:10<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.58it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 84 \tTraining Loss: 0.10315570906621563 \tValidation Loss: 0.21166090780284608 \t time: 00:11:13\n", + "Train Accuracy : 96.23565673828125 \tValidation Accuracy : 92.71562194824219\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:18<00:00, 2.42it/s]\n", + "100%|██████████| 286/286 [01:04<00:00, 4.43it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 85 \tTraining Loss: 0.10619501250726575 \tValidation Loss: 0.2039699403058666 \t time: 00:11:22\n", + "Train Accuracy : 96.30248260498047 \tValidation Accuracy : 93.24009704589844\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:15<00:00, 2.43it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.53it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 86 \tTraining Loss: 0.10173944924043836 \tValidation Loss: 0.2143698412387907 \t time: 00:11:18\n", + "Train Accuracy : 96.2579345703125 \tValidation Accuracy : 93.09440612792969\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:14<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.17it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 87 \tTraining Loss: 0.09475720067962554 \tValidation Loss: 0.19312768667411032 \t time: 00:11:23\n", + "Train Accuracy : 96.52522277832031 \tValidation Accuracy : 93.706298828125\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:13<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.36it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 88 \tTraining Loss: 0.0937476508884171 \tValidation Loss: 0.22016905881529608 \t time: 00:11:19\n", + "Train Accuracy : 96.50851440429688 \tValidation Accuracy : 93.09440612792969\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:13<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [00:59<00:00, 4.78it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 89 \tTraining Loss: 0.09153650025377333 \tValidation Loss: 0.21557865292363038 \t time: 00:11:13\n", + "Train Accuracy : 96.72012329101562 \tValidation Accuracy : 93.5314712524414\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:11<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:02<00:00, 4.60it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 90 \tTraining Loss: 0.09177952346612209 \tValidation Loss: 0.23296234081051528 \t time: 00:11:13\n", + "Train Accuracy : 96.78694152832031 \tValidation Accuracy : 93.0361328125\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:10<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.37it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 91 \tTraining Loss: 0.08767617185204449 \tValidation Loss: 0.20201801803570332 \t time: 00:11:15\n", + "Train Accuracy : 96.87603759765625 \tValidation Accuracy : 93.0361328125\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:10<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:05<00:00, 4.36it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 92 \tTraining Loss: 0.09118074719615739 \tValidation Loss: 0.2518969925864961 \t time: 00:11:15\n", + "Train Accuracy : 96.66443634033203 \tValidation Accuracy : 91.84149169921875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:10<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.49it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 93 \tTraining Loss: 0.0934940773506567 \tValidation Loss: 0.20770283206752696 \t time: 00:11:14\n", + "Train Accuracy : 96.56977081298828 \tValidation Accuracy : 93.26923370361328\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:07<00:00, 2.46it/s]\n", + "100%|██████████| 286/286 [01:01<00:00, 4.62it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 94 \tTraining Loss: 0.08378215233652878 \tValidation Loss: 0.2195557528395473 \t time: 00:11:09\n", + "Train Accuracy : 97.10435485839844 \tValidation Accuracy : 93.64801788330078\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:10<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:08<00:00, 4.15it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 95 \tTraining Loss: 0.08626696844556661 \tValidation Loss: 0.19878985075316907 \t time: 00:11:19\n", + "Train Accuracy : 96.98741149902344 \tValidation Accuracy : 93.5897445678711\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:12<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:07<00:00, 4.23it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 96 \tTraining Loss: 0.07630516203438335 \tValidation Loss: 0.22536614060933519 \t time: 00:11:20\n", + "Train Accuracy : 97.2212905883789 \tValidation Accuracy : 93.24009704589844\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:10<00:00, 2.45it/s]\n", + "100%|██████████| 286/286 [01:01<00:00, 4.66it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 97 \tTraining Loss: 0.08121319106953721 \tValidation Loss: 0.19445914231837888 \t time: 00:11:11\n", + "Train Accuracy : 97.09321594238281 \tValidation Accuracy : 93.4149169921875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:13<00:00, 2.44it/s]\n", + "100%|██████████| 286/286 [01:00<00:00, 4.71it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 98 \tTraining Loss: 0.07288453491202773 \tValidation Loss: 0.27327212523161215 \t time: 00:11:14\n", + "Train Accuracy : 97.43846130371094 \tValidation Accuracy : 92.365966796875\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:03<00:00, 2.48it/s]\n", + "100%|██████████| 286/286 [01:06<00:00, 4.33it/s]\n", + " 0%| | 0/1497 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 99 \tTraining Loss: 0.08167959343807132 \tValidation Loss: 0.22818992230595478 \t time: 00:11:10\n", + "Train Accuracy : 96.93172454833984 \tValidation Accuracy : 93.32750701904297\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1497/1497 [10:02<00:00, 2.48it/s]\n", + "100%|██████████| 286/286 [01:03<00:00, 4.52it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 100 \tTraining Loss: 0.07379477550745815 \tValidation Loss: 0.21039123502321838 \t time: 00:11:05\n", + "Train Accuracy : 97.3382339477539 \tValidation Accuracy : 93.26923370361328\n", + "total time : 18:56:01\n" + ] + } + ], + "source": [ + "loss_train_list = []\n", + "loss_valid_list = []\n", + "acc_train_list = []\n", + "acc_valid_list = []\n", + "epochs = 100\n", + "total_time = time.time()\n", + "for e in range(epochs):\n", + " start_time=time.time()\n", + " train_loss = 0.0\n", + " right_train = 0\n", + " total_train = 0\n", + " for data, labels in tqdm(trainloader):\n", + " # Transfer Data to GPU if available\n", + " if torch.cuda.is_available():\n", + " data, labels = data.cuda(), labels.cuda()\n", + " \n", + " # Clear the gradients\n", + " optimizer.zero_grad()\n", + " # Forward Pass\n", + " target = net(data)\n", + " _, predicted = torch.max(target, 1)\n", + " # Find the Loss\n", + " loss = criterion(target,labels)\n", + " # Calculate gradients\n", + " loss.backward()\n", + " # Update Weights\n", + " optimizer.step()\n", + " # Calculate Loss\n", + " train_loss += loss.item()\n", + " correct = (predicted == labels).float().sum()\n", + " right_train+=correct.float()\n", + " total_train+=len(predicted)\n", + " \n", + " valid_loss = 0.0\n", + " right_valid = 0\n", + " total_valid = 0\n", + " net.eval() # Optional when not using Model Specific layer\n", + " for data, labels in tqdm(validloader):\n", + " # Transfer Data to GPU if available\n", + " if torch.cuda.is_available():\n", + " data, labels = data.cuda(), labels.cuda()\n", + " \n", + " # Forward Pass\n", + " target = net(data)\n", + " _, predicted = torch.max(target, 1)\n", + " # Find the Loss\n", + " loss = criterion(target,labels)\n", + " # Calculate Loss\n", + " valid_loss += loss.item()\n", + " correct = (predicted == labels).float().sum()\n", + " right_valid+=correct.float()\n", + " total_valid+=len(predicted)\n", + " ftloss = train_loss / len(trainloader)\n", + " fvloss = valid_loss / len(validloader)\n", + " ftacc = float(right_train*100/total_train)\n", + " fvacc = float(right_valid*100/total_valid)\n", + " loss_train_list.append(ftloss)\n", + " loss_valid_list.append(fvloss)\n", + " acc_train_list.append(ftacc)\n", + " acc_valid_list.append(fvacc)\n", + " print('Epoch',e+1, '\\tTraining Loss:',ftloss,'\\tValidation Loss:',fvloss,\"\\t time:\",convert(time.time()-start_time))\n", + " print(\"Train Accuracy :\",ftacc,\"\\tValidation Accuracy :\",fvacc)\n", + " if min_valid_loss > valid_loss:\n", + " print(\"Validation Loss Decreased(\",min_valid_loss,\"--->\",valid_loss,\") \\t Saving The Model\")\n", + " min_valid_loss = valid_loss\n", + " \n", + " # Saving State Dict\n", + " torch.save(net.state_dict(), '/home/user/research/resnet18/resent_model.pth')\n", + "print(\"total time : \",convert(time.time()-total_time))\n", + "playsound('/home/user/research/audio')" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "16de198f", + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(net.state_dict(), '/home/user/research/resnet18/resent_model_100_e.pth')" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "166cc6e2", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "y_v = min(loss_valid_list)\n", + "x_v = loss_valid_list.index(y_v)+1\n", + "plt.plot(loss_train_list)\n", + "plt.plot(loss_valid_list)\n", + "plt.annotate(\"min validation loss\",(x_v,y_v))\n", + "plt.title('Training and Validation Loss during Model Training')\n", + "plt.ylabel('loss')\n", + "plt.xlabel('epoch')\n", + "plt.legend(['train', 'valid','minimum'], loc='upper left')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "76657782", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "y_a = max(acc_valid_list)\n", + "x_a = acc_valid_list.index(y_a)+1\n", + "plt.plot(acc_train_list)\n", + "plt.plot(acc_valid_list)\n", + "plt.annotate(\"max validation accuracy\",(x_a,y_a))\n", + "plt.title('Training and Validation Loss during Model Training')\n", + "plt.ylabel('loss')\n", + "plt.xlabel('epoch')\n", + "plt.legend(['train', 'valid'], loc='upper left')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "4c24a522", + "metadata": {}, + "outputs": [], + "source": [ + "f1 = open(\"/home/user/research/resnet18/loss_train.txt\",\"w\")\n", + "f2 = open(\"/home/user/research/resnet18/loss_valid.txt\",\"w\")\n", + "f3 = open(\"/home/user/research/resnet18/acc_train.txt\",\"w\")\n", + "f4 = open(\"/home/user/research/resnet18/acc_valid.txt\",\"w\")\n", + "for i in range(len(loss_train_list)):\n", + " f1.write(str(loss_train_list[i]))\n", + " f1.write(\",\")\n", + " f2.write(str(loss_valid_list[i]))\n", + " f2.write(\",\")\n", + " f3.write(str(acc_train_list[i]))\n", + " f3.write(\",\")\n", + " f4.write(str(acc_valid_list[i]))\n", + " f4.write(\",\")\n", + "f1.close()\n", + "f2.close()\n", + "f3.close()\n", + "f4.close()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}