File size: 59,269 Bytes
9a7f8f1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "gpuType": "T4"
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "rYCIWtBRjPv_",
        "outputId": "21a0bcbe-4cf1-44f7-cefd-9d1532301d5f"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
            "Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (2.0.1+cu118)\n",
            "Requirement already satisfied: torchvision in /usr/local/lib/python3.10/dist-packages (0.15.2+cu118)\n",
            "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch) (3.12.0)\n",
            "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from torch) (4.5.0)\n",
            "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch) (1.11.1)\n",
            "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch) (3.1)\n",
            "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch) (3.1.2)\n",
            "Requirement already satisfied: triton==2.0.0 in /usr/local/lib/python3.10/dist-packages (from torch) (2.0.0)\n",
            "Requirement already satisfied: cmake in /usr/local/lib/python3.10/dist-packages (from triton==2.0.0->torch) (3.25.2)\n",
            "Requirement already satisfied: lit in /usr/local/lib/python3.10/dist-packages (from triton==2.0.0->torch) (16.0.5)\n",
            "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from torchvision) (1.22.4)\n",
            "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from torchvision) (2.27.1)\n",
            "Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /usr/local/lib/python3.10/dist-packages (from torchvision) (8.4.0)\n",
            "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch) (2.1.2)\n",
            "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->torchvision) (1.26.15)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->torchvision) (2022.12.7)\n",
            "Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.10/dist-packages (from requests->torchvision) (2.0.12)\n",
            "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->torchvision) (3.4)\n",
            "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch) (1.3.0)\n"
          ]
        }
      ],
      "source": [
        "!pip install torch torchvision"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "import torch\n",
        "import torchvision\n",
        "import torchvision.transforms as transforms\n",
        "import matplotlib.pyplot as plt\n",
        "import numpy as np\n",
        "\n",
        "# Define the transformations to apply to the dataset\n",
        "transform = transforms.Compose([\n",
        "    transforms.RandomRotation(180),  # Randomly rotate images upside down\n",
        "    transforms.ToTensor(),\n",
        "    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n",
        "])\n",
        "\n",
        "# Load the CIFAR-10 training dataset\n",
        "trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)\n",
        "trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True, num_workers=2)\n",
        "\n",
        "# Load the CIFAR-10 test dataset\n",
        "testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)\n",
        "testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False, num_workers=2)\n",
        "\n",
        "# Define the class labels\n",
        "classes = ('airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')\n",
        "\n",
        "# Function to show an image\n",
        "def imshow(img):\n",
        "    img = img / 2 + 0.5  # Unnormalize\n",
        "    npimg = img.numpy()\n",
        "    plt.imshow(np.transpose(npimg, (1, 2, 0)))\n",
        "    plt.axis('off')\n",
        "    plt.show()\n",
        "\n",
        "# Load a batch of training images\n",
        "dataiter = iter(trainloader)\n",
        "images, labels = next(dataiter)\n",
        "\n",
        "# Show a few randomly selected images\n",
        "imshow(torchvision.utils.make_grid(images))\n",
        "\n",
        "# Check the corresponding labels (orientation)\n",
        "for label in labels:\n",
        "    print(classes[label.item()])\n",
        "\n",
        "# Perform orientation analysis or further steps as desired\n",
        "# ...\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "2abpWCUvjSHs",
        "outputId": "505f3422-979a-405e-f494-7d178b35a7e5"
      },
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Files already downloaded and verified\n",
            "Files already downloaded and verified\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Loading, Rotating and Splitting the dataset "
      ],
      "metadata": {
        "id": "QpCHUmeHmW0j"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "import torch\n",
        "import torchvision\n",
        "import torchvision.transforms as transforms\n",
        "import numpy as np\n",
        "\n",
        "# Define the transformations to apply to the dataset\n",
        "transform_train = transforms.Compose([\n",
        "    transforms.RandomRotation(180),  # Randomly rotate images upside down\n",
        "    transforms.ToTensor(),\n",
        "    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n",
        "])\n",
        "\n",
        "transform_test = transforms.Compose([\n",
        "    transforms.ToTensor(),\n",
        "    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n",
        "])\n",
        "\n",
        "# Load the CIFAR-10 training dataset with upside-down images\n",
        "trainset_upside_down = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform_train)\n",
        "\n",
        "# Load the CIFAR-10 test dataset\n",
        "testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform_test)\n",
        "\n",
        "# Combine the original training dataset and the upside-down training dataset\n",
        "trainset_combined = torch.utils.data.ConcatDataset([trainset, trainset_upside_down])\n",
        "\n",
        "# Create data loaders for training and test sets\n",
        "trainloader = torch.utils.data.DataLoader(trainset_combined, batch_size=64, shuffle=True, num_workers=2)\n",
        "testloader = torch.utils.data.DataLoader(testset, batch_size=64, shuffle=False, num_workers=2)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "6-vQLca5jSK3",
        "outputId": "d757eace-9248-4b68-962c-d87e123d93d4"
      },
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Files already downloaded and verified\n",
            "Files already downloaded and verified\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Define the class labels\n",
        "classes = ('airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')\n"
      ],
      "metadata": {
        "id": "O2yOf_H0m6TI"
      },
      "execution_count": 9,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Showing some random training dataset images"
      ],
      "metadata": {
        "id": "E8GRLpUqmlGk"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "import matplotlib.pyplot as plt\n",
        "import numpy as np\n",
        "\n",
        "# Function to show an image\n",
        "def imshow(img):\n",
        "    img = img / 2 + 0.5  # Unnormalize\n",
        "    npimg = img.numpy()\n",
        "    plt.imshow(np.transpose(npimg, (1, 2, 0)))\n",
        "    plt.axis('off')\n",
        "    plt.show()\n",
        "\n",
        "# Load a batch of training images\n",
        "dataiter = iter(trainloader)\n",
        "images, labels = next(dataiter)\n",
        "\n",
        "# Show a subset of the images and labels\n",
        "num_images = 4  # Number of images to display\n",
        "random_indices = np.random.choice(range(len(images)), size=num_images, replace=False)\n",
        "subset_images = images[random_indices]\n",
        "subset_labels = labels[random_indices]\n",
        "\n",
        "# Display the subset of images and labels\n",
        "imshow(torchvision.utils.make_grid(subset_images))\n",
        "print(' '.join('%5s' % classes[subset_labels[j]] for j in range(len(subset_labels))))\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 183
        },
        "id": "jZjslIzRjSM9",
        "outputId": "831f7888-6803-4dd3-9484-2085ec2073f7"
      },
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "  dog horse truck   dog\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Building Neural Network"
      ],
      "metadata": {
        "id": "DusYvf05nqO3"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "import torch\n",
        "import torch.nn as nn\n",
        "import torch.optim as optim\n",
        "\n",
        "# Define the neural network architecture\n",
        "class Net(nn.Module):\n",
        "    def __init__(self):\n",
        "        super(Net, self).__init__()\n",
        "        self.conv1 = nn.Conv2d(3, 32, kernel_size=3, padding=1)\n",
        "        self.relu1 = nn.ReLU()\n",
        "        self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)\n",
        "        self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)\n",
        "        self.relu2 = nn.ReLU()\n",
        "        self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)\n",
        "        self.fc1 = nn.Linear(64 * 8 * 8, 64)\n",
        "        self.relu3 = nn.ReLU()\n",
        "        self.fc2 = nn.Linear(64, 10)\n",
        "\n",
        "    def forward(self, x):\n",
        "        x = self.pool1(self.relu1(self.conv1(x)))\n",
        "        x = self.pool2(self.relu2(self.conv2(x)))\n",
        "        x = x.view(-1, 64 * 8 * 8)\n",
        "        x = self.relu3(self.fc1(x))\n",
        "        x = self.fc2(x)\n",
        "        return x\n",
        "\n",
        "# Create an instance of the neural network\n",
        "net = Net()\n",
        "\n",
        "# Define the loss function and optimizer\n",
        "criterion = nn.CrossEntropyLoss()\n",
        "optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)\n"
      ],
      "metadata": {
        "id": "IV9gkb64mnjY"
      },
      "execution_count": 13,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Training the Neural Network"
      ],
      "metadata": {
        "id": "kMkiAc81n1-_"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Set the number of training epochs\n",
        "num_epochs = 10\n",
        "\n",
        "# Move the network to the GPU if available\n",
        "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
        "net.to(device)\n",
        "print(\"Device:\", device)\n",
        "\n",
        "# Define the optimizer\n",
        "optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)\n",
        "\n",
        "# Training loop\n",
        "for epoch in range(num_epochs):\n",
        "    running_loss = 0.0\n",
        "    correct_predictions = 0\n",
        "    total_predictions = 0\n",
        "\n",
        "    # Iterate over the training dataset\n",
        "    for i, data in enumerate(trainloader, 0):\n",
        "        # Get the inputs and labels\n",
        "        inputs, labels = data[0].to(device), data[1].to(device)\n",
        "\n",
        "        # Zero the parameter gradients\n",
        "        optimizer.zero_grad()\n",
        "\n",
        "        # Forward pass\n",
        "        outputs = net(inputs)\n",
        "        loss = criterion(outputs, labels)\n",
        "\n",
        "        # Backward pass and optimization\n",
        "        loss.backward()\n",
        "        optimizer.step()\n",
        "\n",
        "        # Update statistics\n",
        "        running_loss += loss.item()\n",
        "        _, predicted = torch.max(outputs.data, 1)\n",
        "        total_predictions += labels.size(0)\n",
        "        correct_predictions += (predicted == labels).sum().item()\n",
        "\n",
        "    # Print statistics for the epoch\n",
        "    epoch_loss = running_loss / len(trainloader)\n",
        "    epoch_accuracy = 100 * correct_predictions / total_predictions\n",
        "    print(f\"Epoch: {epoch+1}, Loss: {epoch_loss:.4f}, Accuracy: {epoch_accuracy:.2f}%\")\n",
        "\n",
        "print(\"Training finished!\")\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "sIpNCpdvntAS",
        "outputId": "9b3faf4f-8e5c-47ab-bc22-28bbd218a125"
      },
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Device: cuda\n",
            "Epoch: 1, Loss: 1.3774, Accuracy: 50.76%\n",
            "Epoch: 2, Loss: 1.3574, Accuracy: 51.54%\n",
            "Epoch: 3, Loss: 1.3353, Accuracy: 52.32%\n",
            "Epoch: 4, Loss: 1.3178, Accuracy: 53.00%\n",
            "Epoch: 5, Loss: 1.3020, Accuracy: 53.61%\n",
            "Epoch: 6, Loss: 1.2825, Accuracy: 54.36%\n",
            "Epoch: 7, Loss: 1.2692, Accuracy: 54.92%\n",
            "Epoch: 8, Loss: 1.2560, Accuracy: 55.41%\n",
            "Epoch: 9, Loss: 1.2433, Accuracy: 55.96%\n",
            "Epoch: 10, Loss: 1.2302, Accuracy: 56.46%\n",
            "Training finished!\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Save the trained model\n",
        "PATH = \"/content/model.pth\"\n",
        "torch.save(net.state_dict(), PATH)\n",
        "print(f\"Model saved at: {PATH}\")\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "E4onZu3joZJ-",
        "outputId": "16de7d1a-8d70-48ee-9ad7-2c22be246fbd"
      },
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model saved at: /content/model.pth\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "ZUV6tnR1ui_v"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Evaluation"
      ],
      "metadata": {
        "id": "H2ua050oxCAO"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "import matplotlib.pyplot as plt\n",
        "import numpy as np\n",
        "\n",
        "# Function to display an image\n",
        "def imshow(img):\n",
        "    img = img / 2 + 0.5     # Unnormalize the image\n",
        "    npimg = img.numpy()\n",
        "    plt.imshow(np.transpose(npimg, (1, 2, 0)))  # Convert from Tensor to numpy array and transpose axes\n",
        "    plt.axis('off')  # Hide the axes\n",
        "    plt.show()\n",
        "\n",
        "# Get a batch of random test images\n",
        "dataiter = iter(testloader)\n",
        "images, labels = next(dataiter)\n",
        "\n",
        "# Make predictions on the test images\n",
        "outputs = net(images.to(device))\n",
        "_, predicted = torch.max(outputs, 1)\n",
        "\n",
        "# Display a subset of test images along with their predicted and true labels\n",
        "num_images = 4  # Number of images to display\n",
        "random_indices = np.random.choice(range(len(images)), size=num_images, replace=False)\n",
        "subset_images = images[random_indices]\n",
        "subset_labels = predicted[random_indices]\n",
        "true_labels = labels[random_indices]\n",
        "\n",
        "# Display the subset of images with predicted and true labels\n",
        "imshow(torchvision.utils.make_grid(subset_images))\n",
        "print('Predicted labels:', ' '.join('%5s' % classes[subset_labels[j]] for j in range(len(subset_labels))))\n",
        "print('True labels:     ', ' '.join('%5s' % classes[true_labels[j]] for j in range(len(true_labels))))\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 201
        },
        "id": "MMU06HGZw9nI",
        "outputId": "fb2313d8-804f-4e60-8e71-9685a519bdb3"
      },
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Predicted labels:   cat   dog   cat  frog\n",
            "True labels:        cat   dog horse  frog\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# To improve model's performance\n",
        "\n",
        "Error Analyzing\n",
        "\n",
        "Data preprocessing\n",
        "\n",
        "Model Architecture\n",
        "\n",
        "Hyperparameter Tuning\n",
        "\n",
        "Iterative Training and Evaluation"
      ],
      "metadata": {
        "id": "0-Upz713zGsS"
      }
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "CStfE5yGxLx6"
      },
      "execution_count": null,
      "outputs": []
    }
  ]
}