939 lines
171 KiB
Plaintext
939 lines
171 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "086b9495",
|
|
"metadata": {},
|
|
"source": [
|
|
"<div style=\"\n",
|
|
" border: 2px solid #4CAF50; \n",
|
|
" padding: 15px; \n",
|
|
" background-color: #f4f4f4; \n",
|
|
" border-radius: 10px; \n",
|
|
" align-items: center;\">\n",
|
|
"\n",
|
|
"<h1 style=\"margin: 0; color: #4CAF50;\">Neural Networks: Convolutional Neural Networks (2)</h1>\n",
|
|
"<h2 style=\"margin: 5px 0; color: #555;\">DSAI</h2>\n",
|
|
"<h3 style=\"margin: 5px 0; color: #555;\">Jakob Eggl</h3>\n",
|
|
"\n",
|
|
"<div style=\"flex-shrink: 0;\">\n",
|
|
" <img src=\"https://www.htl-grieskirchen.at/wp/wp-content/uploads/2022/11/logo_bildschirm-1024x503.png\" alt=\"Logo\" style=\"width: 250px; height: auto;\"/>\n",
|
|
"</div>\n",
|
|
"<p1> © 2025/26 Jakob Eggl. Nutzung oder Verbreitung nur mit ausdrücklicher Genehmigung des Autors.</p1>\n",
|
|
"</div>\n",
|
|
"<div style=\"flex: 1;\">\n",
|
|
"</div> "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "640a7aba",
|
|
"metadata": {},
|
|
"source": [
|
|
"Nachdem wir jetzt wissen, wie ein *Convolutional Neuronal Network* (**CNN**) funktioniert, wollen wir nun nochmal die Datasets **MNIST** und **Fashion-MNIST** ausprobieren."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "7f180ba7",
|
|
"metadata": {},
|
|
"source": [
|
|
"Erstelle somit ein Neuronales Netzwerk, welches auf der CNN Architektur basiert und auf den Datasets **MNIST** und **Fashion-MNIST** trainiert wird."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "2b5f313f",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Lösung"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "24949af8",
|
|
"metadata": {},
|
|
"source": [
|
|
"Nun können wir testen, wie gut ein CNN bei unseren bisherigen Aufgaben (MNIST und Fashion MNIST performt)."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "a5e14abb",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import os\n",
|
|
"import torch\n",
|
|
"import torch.nn as nn\n",
|
|
"import torch.optim as optim\n",
|
|
"from torch.utils.data import DataLoader, Dataset, random_split\n",
|
|
"from torchvision import datasets, transforms\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import numpy as np\n",
|
|
"from sklearn.metrics import confusion_matrix\n",
|
|
"import seaborn as sns"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "6035d78c",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"cpu\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"\n",
|
|
"device = torch.device('cuda') if torch.cuda.is_available() else torch.device('mps') if torch.backends.mps.is_available() else torch.device('cpu')\n",
|
|
"print(device)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "7c345703",
|
|
"metadata": {},
|
|
"source": [
|
|
"## MNIST"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "5d56b200",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"100.0%\n",
|
|
"100.0%\n",
|
|
"100.0%\n",
|
|
"100.0%\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"data_path = os.path.join(\"..\", \"..\", \"_data\", \"mnist_data\")\n",
|
|
"\n",
|
|
"train_dataset = datasets.MNIST(root=data_path, train=True, download=True, transform=transforms.ToTensor()) # ToTensor makes images [0, 1] instead of {1,2,...,255}\n",
|
|
"test_dataset = datasets.MNIST(root=data_path, train=False, download=True, transform=transforms.ToTensor())\n",
|
|
"\n",
|
|
"test_size = len(test_dataset) // 2\n",
|
|
"valid_size = len(test_dataset) - test_size\n",
|
|
"\n",
|
|
"test_dataset, valid_dataset = random_split(test_dataset, [test_size, valid_size])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "05e3dd14",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"batch_size = 64\n",
|
|
"\n",
|
|
"train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)\n",
|
|
"test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)\n",
|
|
"valid_loader = DataLoader(valid_dataset, batch_size=batch_size, shuffle=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "40660012",
|
|
"metadata": {},
|
|
"source": [
|
|
"Hier könnte man noch normalisieren und würde wahrscheinlich noch ein bisschen besser abscheiden. Man kann eigentlich direkt die `transform`-Methode vom `nn_8_example_classification_solution` übernehmen."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "536dd4f6",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"class CNNMNISTClassifier(nn.Module):\n",
|
|
" def __init__(self):\n",
|
|
" super().__init__()\n",
|
|
" self.layers = nn.Sequential(\n",
|
|
" nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1), # output: 32 x 28 x 28\n",
|
|
" nn.ReLU(),\n",
|
|
" nn.MaxPool2d(kernel_size=2, stride=2), # output: 32 x 14 x 14\n",
|
|
" nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1), # output: 64 x 14 x 14\n",
|
|
" nn.ReLU(),\n",
|
|
" nn.MaxPool2d(kernel_size=2, stride=2), # output: 64 x 7 x 7\n",
|
|
" nn.Flatten(),\n",
|
|
" nn.Linear(64*7*7, 256),\n",
|
|
" nn.ReLU(),\n",
|
|
" nn.Linear(256, 128),\n",
|
|
" nn.ReLU(),\n",
|
|
" nn.Linear(128,64),\n",
|
|
" nn.ReLU(),\n",
|
|
" nn.Linear(64, 10),\n",
|
|
" )\n",
|
|
" def forward(self, x):\n",
|
|
" return self.layers(x)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "f5d7153b",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def evaluate_model(model, data_loader, criterion):\n",
|
|
" model.eval()\n",
|
|
" loss_total = 0.0\n",
|
|
" correct = 0\n",
|
|
" total = 0\n",
|
|
" \n",
|
|
" with torch.no_grad():\n",
|
|
" for data, target in data_loader:\n",
|
|
" data, target = data.to(device), target.to(device)\n",
|
|
" output = model(data)\n",
|
|
" loss = criterion(output, target)\n",
|
|
" loss_total += loss.item() * data.size(0)\n",
|
|
" \n",
|
|
" _, predicted = torch.max(output.data, 1)\n",
|
|
" total += target.size(0)\n",
|
|
" correct += (predicted == target).sum().item()\n",
|
|
" \n",
|
|
" avg_loss = loss_total / total\n",
|
|
" accuracy = 100.0 * correct / total\n",
|
|
" return avg_loss, accuracy"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 28,
|
|
"id": "c8297d67",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def train_model(model, train_loader, valid_loader, criterion, optimizer, save_path:str=None,\n",
|
|
" epochs=20, validate_at=1, print_at=100, patience=3):\n",
|
|
" torch.set_num_threads(8)\n",
|
|
" if save_path is None:\n",
|
|
" save_path = 'best_model.pt'\n",
|
|
"\n",
|
|
" best_loss = float(\"inf\")\n",
|
|
" patience_counter = 0\n",
|
|
"\n",
|
|
" for epoch in range(1, epochs+1):\n",
|
|
" model.train()\n",
|
|
" running_loss = 0.0\n",
|
|
"\n",
|
|
" for batch_idx, (data, target) in enumerate(train_loader):\n",
|
|
" data, target = data.to(device), target.to(device)\n",
|
|
"\n",
|
|
" optimizer.zero_grad()\n",
|
|
" output = model(data)\n",
|
|
" loss = criterion(output, target)\n",
|
|
" loss.backward()\n",
|
|
" optimizer.step()\n",
|
|
" \n",
|
|
" running_loss += loss.item()\n",
|
|
" \n",
|
|
" if (batch_idx+1) % print_at == 0:\n",
|
|
" print(f\"Epoch [{epoch}/{epochs}], Step [{batch_idx+1}/{len(train_loader)}], Loss: {loss.item():.4f}\")\n",
|
|
"\n",
|
|
" if epoch % validate_at == 0:\n",
|
|
" val_loss, val_acc = evaluate_model(model, valid_loader, criterion)\n",
|
|
" print(f\"Epoch [{epoch}/{epochs}] - Validation Loss: {val_loss:.4f}, Validation Accuracy: {val_acc:.2f}%\")\n",
|
|
"\n",
|
|
" if val_loss < best_loss:\n",
|
|
" best_loss = val_loss\n",
|
|
" patience_counter = 0\n",
|
|
" torch.save(model.state_dict(), save_path)\n",
|
|
" print(f\">>> Found a better model and saved it at '{save_path}'\")\n",
|
|
" else:\n",
|
|
" patience_counter += 1\n",
|
|
" print(f\"No Improvement. Early Stopping Counter: {patience_counter}/{patience}\")\n",
|
|
" if patience_counter >= patience:\n",
|
|
" print(\"Early Stopping triggered.\")\n",
|
|
" break"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 26,
|
|
"id": "cd75f50d",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"### HYPERPARAMETER ###\n",
|
|
"\n",
|
|
"model = CNNMNISTClassifier().to(device)\n",
|
|
"criterion = nn.CrossEntropyLoss()\n",
|
|
"lr = 0.001\n",
|
|
"optimizer = optim.Adam(model.parameters(), lr=lr)\n",
|
|
"epochs = 20\n",
|
|
"validate_at = 1\n",
|
|
"print_at = 200\n",
|
|
"early_stopping_patience = 3\n",
|
|
"save_path = os.path.join(\"..\", \"models\", \"best_model_cnn_mnist.pt\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 29,
|
|
"id": "d408a930",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch [1/20], Step [200/938], Loss: 0.7541\n",
|
|
"Epoch [1/20], Step [400/938], Loss: 0.4307\n",
|
|
"Epoch [1/20], Step [600/938], Loss: 0.4306\n",
|
|
"Epoch [1/20], Step [800/938], Loss: 0.3365\n",
|
|
"Epoch [1/20] - Validation Loss: 0.3727, Validation Accuracy: 86.10%\n",
|
|
">>> Found a better model and saved it at '../models/best_model_cnn_mnist.pt'\n",
|
|
"Epoch [2/20], Step [200/938], Loss: 0.2701\n",
|
|
"Epoch [2/20], Step [400/938], Loss: 0.3223\n",
|
|
"Epoch [2/20], Step [600/938], Loss: 0.3573\n",
|
|
"Epoch [2/20], Step [800/938], Loss: 0.2421\n",
|
|
"Epoch [2/20] - Validation Loss: 0.3108, Validation Accuracy: 88.48%\n",
|
|
">>> Found a better model and saved it at '../models/best_model_cnn_mnist.pt'\n",
|
|
"Epoch [3/20], Step [200/938], Loss: 0.2437\n",
|
|
"Epoch [3/20], Step [400/938], Loss: 0.2717\n",
|
|
"Epoch [3/20], Step [600/938], Loss: 0.3106\n",
|
|
"Epoch [3/20], Step [800/938], Loss: 0.2901\n",
|
|
"Epoch [3/20] - Validation Loss: 0.3020, Validation Accuracy: 88.68%\n",
|
|
">>> Found a better model and saved it at '../models/best_model_cnn_mnist.pt'\n",
|
|
"Epoch [4/20], Step [200/938], Loss: 0.2356\n",
|
|
"Epoch [4/20], Step [400/938], Loss: 0.3265\n",
|
|
"Epoch [4/20], Step [600/938], Loss: 0.2237\n",
|
|
"Epoch [4/20], Step [800/938], Loss: 0.2049\n",
|
|
"Epoch [4/20] - Validation Loss: 0.2775, Validation Accuracy: 90.18%\n",
|
|
">>> Found a better model and saved it at '../models/best_model_cnn_mnist.pt'\n",
|
|
"Epoch [5/20], Step [200/938], Loss: 0.1586\n",
|
|
"Epoch [5/20], Step [400/938], Loss: 0.1646\n",
|
|
"Epoch [5/20], Step [600/938], Loss: 0.1840\n",
|
|
"Epoch [5/20], Step [800/938], Loss: 0.2783\n",
|
|
"Epoch [5/20] - Validation Loss: 0.2549, Validation Accuracy: 91.10%\n",
|
|
">>> Found a better model and saved it at '../models/best_model_cnn_mnist.pt'\n",
|
|
"Epoch [6/20], Step [200/938], Loss: 0.2141\n",
|
|
"Epoch [6/20], Step [400/938], Loss: 0.1137\n",
|
|
"Epoch [6/20], Step [600/938], Loss: 0.1712\n",
|
|
"Epoch [6/20], Step [800/938], Loss: 0.2002\n",
|
|
"Epoch [6/20] - Validation Loss: 0.2805, Validation Accuracy: 90.74%\n",
|
|
"No Improvement. Early Stopping Counter: 1/3\n",
|
|
"Epoch [7/20], Step [200/938], Loss: 0.1157\n",
|
|
"Epoch [7/20], Step [400/938], Loss: 0.1438\n",
|
|
"Epoch [7/20], Step [600/938], Loss: 0.1271\n",
|
|
"Epoch [7/20], Step [800/938], Loss: 0.1231\n",
|
|
"Epoch [7/20] - Validation Loss: 0.2463, Validation Accuracy: 91.92%\n",
|
|
">>> Found a better model and saved it at '../models/best_model_cnn_mnist.pt'\n",
|
|
"Epoch [8/20], Step [200/938], Loss: 0.2126\n",
|
|
"Epoch [8/20], Step [400/938], Loss: 0.2189\n",
|
|
"Epoch [8/20], Step [600/938], Loss: 0.1637\n",
|
|
"Epoch [8/20], Step [800/938], Loss: 0.0895\n",
|
|
"Epoch [8/20] - Validation Loss: 0.2650, Validation Accuracy: 91.30%\n",
|
|
"No Improvement. Early Stopping Counter: 1/3\n",
|
|
"Epoch [9/20], Step [200/938], Loss: 0.1041\n",
|
|
"Epoch [9/20], Step [400/938], Loss: 0.1339\n",
|
|
"Epoch [9/20], Step [600/938], Loss: 0.1669\n",
|
|
"Epoch [9/20], Step [800/938], Loss: 0.1946\n",
|
|
"Epoch [9/20] - Validation Loss: 0.2602, Validation Accuracy: 91.64%\n",
|
|
"No Improvement. Early Stopping Counter: 2/3\n",
|
|
"Epoch [10/20], Step [200/938], Loss: 0.0308\n",
|
|
"Epoch [10/20], Step [400/938], Loss: 0.1354\n",
|
|
"Epoch [10/20], Step [600/938], Loss: 0.1513\n",
|
|
"Epoch [10/20], Step [800/938], Loss: 0.0820\n",
|
|
"Epoch [10/20] - Validation Loss: 0.2590, Validation Accuracy: 91.76%\n",
|
|
"No Improvement. Early Stopping Counter: 3/3\n",
|
|
"Early Stopping triggered.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"train_model(model, train_loader, valid_loader, criterion, optimizer, epochs=epochs, validate_at=validate_at, print_at=print_at, patience=early_stopping_patience, save_path=save_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"id": "4f97b366",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Finaler Test Loss: 0.0260\n",
|
|
"Finale Test Accuracy: 98.88%\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"model.load_state_dict(torch.load(save_path))\n",
|
|
"test_loss, test_acc = evaluate_model(model, test_loader, criterion)\n",
|
|
"print(f\"Finaler Test Loss: {test_loss:.4f}\")\n",
|
|
"print(f\"Finale Test Accuracy: {test_acc:.2f}%\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "7dde66a7",
|
|
"metadata": {},
|
|
"source": [
|
|
"Also funktioniert auch dieses Modell sehr gut.\n",
|
|
"\n",
|
|
"Probieren wir nun auch das Fashion-MNIST Dataset."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "c34d701e",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Fashion MNIST"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"id": "d617df78",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"torch.cuda.empty_cache() # Clears GPU memory (otherwise it could run out of memory)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "a9c9a4e8",
|
|
"metadata": {},
|
|
"source": [
|
|
"Nun testen wir das gleiche Modell (nur anders genannt) für Fashion MNIST."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"id": "c9a9e4ea",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"100.0%\n",
|
|
"100.0%\n",
|
|
"100.0%\n",
|
|
"100.0%\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"data_path = os.path.join(\"..\", \"..\", \"_data\", \"fashion_mnist_data\")\n",
|
|
"\n",
|
|
"train_dataset = datasets.FashionMNIST(root=data_path, train=True, download=True, transform=transforms.ToTensor()) # ToTensor makes images [0, 1] instead of {1,2,...,255}\n",
|
|
"test_dataset = datasets.FashionMNIST(root=data_path, train=False, download=True, transform=transforms.ToTensor())\n",
|
|
"\n",
|
|
"test_size = len(test_dataset) // 2\n",
|
|
"valid_size = len(test_dataset) - test_size\n",
|
|
"\n",
|
|
"test_dataset, valid_dataset = random_split(test_dataset, [test_size, valid_size])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"id": "1b96937b",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"batch_size = 64\n",
|
|
"\n",
|
|
"train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)\n",
|
|
"test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)\n",
|
|
"valid_loader = DataLoader(valid_dataset, batch_size=batch_size, shuffle=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "4135a271",
|
|
"metadata": {},
|
|
"source": [
|
|
"Erneut das gleiche Modell, jedoch anderer Name."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"id": "14eefada",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"class CNNFashionMNISTClassifier(nn.Module):\n",
|
|
" def __init__(self):\n",
|
|
" super().__init__()\n",
|
|
" self.layers = nn.Sequential(\n",
|
|
" nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1), # output: 32 x 28 x 28\n",
|
|
" nn.ReLU(),\n",
|
|
" nn.MaxPool2d(kernel_size=2, stride=2), # output: 32 x 14 x 14\n",
|
|
" nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1), # output: 64 x 14 x 14\n",
|
|
" nn.ReLU(),\n",
|
|
" nn.MaxPool2d(kernel_size=2, stride=2), # output: 64 x 7 x 7\n",
|
|
" nn.Flatten(),\n",
|
|
" nn.Linear(64*7*7, 256),\n",
|
|
" nn.ReLU(),\n",
|
|
" nn.Linear(256, 128),\n",
|
|
" nn.ReLU(),\n",
|
|
" nn.Linear(128,64),\n",
|
|
" nn.ReLU(),\n",
|
|
" nn.Linear(64, 10),\n",
|
|
" )\n",
|
|
" def forward(self, x):\n",
|
|
" return self.layers(x)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"id": "d8af8854",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"### HYPERPARAMETER ###\n",
|
|
"\n",
|
|
"model = CNNFashionMNISTClassifier().to(device)\n",
|
|
"criterion = nn.CrossEntropyLoss()\n",
|
|
"lr = 0.001\n",
|
|
"optimizer = optim.Adam(model.parameters(), lr=lr)\n",
|
|
"epochs = 20\n",
|
|
"validate_at = 1\n",
|
|
"print_at = 200\n",
|
|
"early_stopping_patience = 3\n",
|
|
"save_path = os.path.join(\"..\", \"models\", \"best_model_cnn_fashion_mnist.pt\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"id": "23f69a13",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch [1/20], Step [200/938], Loss: 0.4498\n",
|
|
"Epoch [1/20], Step [400/938], Loss: 0.3739\n",
|
|
"Epoch [1/20], Step [600/938], Loss: 0.2920\n",
|
|
"Epoch [1/20], Step [800/938], Loss: 0.3433\n",
|
|
"Epoch [1/20] - Validation Loss: 0.3789, Validation Accuracy: 85.44%\n",
|
|
">>> Found a better model and saved it at '../models/best_model_cnn_fashion_mnist.pt'\n",
|
|
"Epoch [2/20], Step [200/938], Loss: 0.3348\n",
|
|
"Epoch [2/20], Step [400/938], Loss: 0.3218\n",
|
|
"Epoch [2/20], Step [600/938], Loss: 0.2406\n",
|
|
"Epoch [2/20], Step [800/938], Loss: 0.2876\n",
|
|
"Epoch [2/20] - Validation Loss: 0.2920, Validation Accuracy: 88.96%\n",
|
|
">>> Found a better model and saved it at '../models/best_model_cnn_fashion_mnist.pt'\n",
|
|
"Epoch [3/20], Step [200/938], Loss: 0.2267\n",
|
|
"Epoch [3/20], Step [400/938], Loss: 0.1655\n",
|
|
"Epoch [3/20], Step [600/938], Loss: 0.2643\n",
|
|
"Epoch [3/20], Step [800/938], Loss: 0.1533\n",
|
|
"Epoch [3/20] - Validation Loss: 0.2866, Validation Accuracy: 89.46%\n",
|
|
">>> Found a better model and saved it at '../models/best_model_cnn_fashion_mnist.pt'\n",
|
|
"Epoch [4/20], Step [200/938], Loss: 0.1869\n",
|
|
"Epoch [4/20], Step [400/938], Loss: 0.2363\n",
|
|
"Epoch [4/20], Step [600/938], Loss: 0.2081\n",
|
|
"Epoch [4/20], Step [800/938], Loss: 0.1707\n",
|
|
"Epoch [4/20] - Validation Loss: 0.2570, Validation Accuracy: 90.92%\n",
|
|
">>> Found a better model and saved it at '../models/best_model_cnn_fashion_mnist.pt'\n",
|
|
"Epoch [5/20], Step [200/938], Loss: 0.0748\n",
|
|
"Epoch [5/20], Step [400/938], Loss: 0.0544\n",
|
|
"Epoch [5/20], Step [600/938], Loss: 0.2605\n",
|
|
"Epoch [5/20], Step [800/938], Loss: 0.2111\n",
|
|
"Epoch [5/20] - Validation Loss: 0.2585, Validation Accuracy: 90.78%\n",
|
|
"No Improvement. Early Stopping Counter: 1/3\n",
|
|
"Epoch [6/20], Step [200/938], Loss: 0.2887\n",
|
|
"Epoch [6/20], Step [400/938], Loss: 0.0977\n",
|
|
"Epoch [6/20], Step [600/938], Loss: 0.1891\n",
|
|
"Epoch [6/20], Step [800/938], Loss: 0.0624\n",
|
|
"Epoch [6/20] - Validation Loss: 0.3020, Validation Accuracy: 89.72%\n",
|
|
"No Improvement. Early Stopping Counter: 2/3\n",
|
|
"Epoch [7/20], Step [200/938], Loss: 0.1913\n",
|
|
"Epoch [7/20], Step [400/938], Loss: 0.1165\n",
|
|
"Epoch [7/20], Step [600/938], Loss: 0.0614\n",
|
|
"Epoch [7/20], Step [800/938], Loss: 0.1338\n",
|
|
"Epoch [7/20] - Validation Loss: 0.2592, Validation Accuracy: 91.74%\n",
|
|
"No Improvement. Early Stopping Counter: 3/3\n",
|
|
"Early Stopping triggered.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"train_model(model, train_loader, valid_loader, criterion, optimizer, epochs=epochs, validate_at=validate_at, print_at=print_at, patience=early_stopping_patience, save_path=save_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"id": "a364d68d",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Finaler Test Loss: 0.2448\n",
|
|
"Finale Test Accuracy: 90.96%\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"model.load_state_dict(torch.load(save_path))\n",
|
|
"test_loss, test_acc = evaluate_model(model, test_loader, criterion)\n",
|
|
"print(f\"Finaler Test Loss: {test_loss:.4f}\")\n",
|
|
"print(f\"Finale Test Accuracy: {test_acc:.2f}%\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"id": "dc164da3",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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dm01oP7jjz+06np6eqobNmyoVQaoBw0apFX25vLmu95cCr17965arVard+7cqQbUFy9efG/sgHrSpEma3zt16qQ2NzdXP3jwQKte48aN1VZWVuoXL16o1ep/L482adJEq96bS6CnTp1673HfvnT7Zl9Xr15Vq9VqdaVKldS9evVSq9UfniqQmJiojo+PV0+dOlXt6Oioddk1pW3fHK9WrVoprjt69KhW+ezZs9WAes+ePeqePXuqLS0t1ZcvX35vG9/e39uXkRMTE9UuLi7q0qVLa11+fvXqlTp37txqb29vTdmb/p44ceIHj/X28ZJbbt++rVM/ISFBHR8fr65Xr566devWmvLBgwerHRwc3nusN3347vvez89PDaiDgoI0ZbVr19bqi+XLl6sB9fbt27W2ffM6Hzp0SFMGqPPkyaN++fKlpiw4OFhtZGSk9vX11YknPe+pt8+18ePHq42MjNSXLl3S2e8b704zUKvV6j///FNdoEABzetta2urbtasmXrDhg3JTgdQq9M+zeD06dNqQD1mzJhU1VerPzzN4M17oE+fPury5ctryufOnasGNOd8cpo1a6YuV67ce4//7meTWp3866dW675PNmzYoAbUq1ateu8x3vbmM2HDhg1qY2NjdWhoqGbd+6YZ6OuzUIjUksysyFRHjx4F0LnRqHLlypQoUYLDhw9rlTs7O1O5cmWtsjJlyqT50ub7lCtXDjMzMz777DPWr1+fbAYrOUeOHKFevXo6GelevXoRFRWlk8l4e6oFvG4HkKa21K5dGzc3N9auXcuVK1c4c+bMey8HHzlyhPr162Nvb4+xsTGmpqZMnDiRkJAQnj59murjtm3bNtV1v/rqK5o2bUrnzp1Zv3493377LaVLl0719m+7efMmjx8/pnv37lqXn21sbGjbti2nT5/WmgqS1lgBZs+ezZkzZ7SWN326fPlyvLy8sLCwwMTEBFNTUw4fPsz169c121euXJkXL17QuXNnvv/+e52rC29Lz3vgyJEjWFtb6zxh4c059O45U6dOHa0bt/LkyUPu3LlTPEZa31NvGzVqFDlz5tRk4lOrUqVK/PXXXwQEBDBu3DiqVavG4cOH6dGjBy1atMiUTG167dixg+rVq2NjY6N5D6xZs0brPVCpUiUAOnTowPbt2/nnn3909lO5cmUuXbrEwIED+emnn3j58mWG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",
|
|
"text/plain": [
|
|
"<Figure size 800x600 with 2 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Confusion Matrix of FashionMNIST model\n",
|
|
"\n",
|
|
"label_dict = {\n",
|
|
" 0: \"T-Shirt\",\n",
|
|
" 1: \"Trouser\",\n",
|
|
" 2: \"Pullover\",\n",
|
|
" 3: \"Dress\",\n",
|
|
" 4: \"Coat\",\n",
|
|
" 5: \"Sandal\",\n",
|
|
" 6: \"Shirt\",\n",
|
|
" 7: \"Sneaker\",\n",
|
|
" 8: \"Bag\",\n",
|
|
" 9: \"Ankle Boot\"\n",
|
|
"}\n",
|
|
"\n",
|
|
"test_data = test_loader.dataset.dataset.data[test_loader.dataset.indices]\n",
|
|
"test_targets = test_loader.dataset.dataset.targets[test_loader.dataset.indices]\n",
|
|
"\n",
|
|
"pred = model(test_data.unsqueeze(1).float().to(device))\n",
|
|
"cm = confusion_matrix(test_targets.cpu(), pred.argmax(dim=1).cpu())\n",
|
|
"\n",
|
|
"plt.figure(figsize=(8, 6))\n",
|
|
"sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=label_dict.values(), yticklabels=label_dict.values())\n",
|
|
"plt.title(\"Confusion Matrix for FashionMNIST Classification\")\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "f6023126",
|
|
"metadata": {},
|
|
"source": [
|
|
"Wir wollen das noch weiter verbessern und verwenden ein noch größeres Modell."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"id": "1e023b36",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import torch\n",
|
|
"import torch.nn as nn\n",
|
|
"import torch.nn.functional as F\n",
|
|
"\n",
|
|
"class SigmaCNNFashionMNISTClassifier(nn.Module):\n",
|
|
" def __init__(self):\n",
|
|
" super().__init__()\n",
|
|
" self.conv_layers = nn.Sequential(\n",
|
|
" nn.Conv2d(1, 32, kernel_size=3, padding=1), # -> 32x28x28\n",
|
|
" nn.BatchNorm2d(32),\n",
|
|
" nn.ReLU(),\n",
|
|
" \n",
|
|
" nn.Conv2d(32, 64, kernel_size=3, padding=1), # -> 64x28x28\n",
|
|
" nn.BatchNorm2d(64),\n",
|
|
" nn.ReLU(),\n",
|
|
" nn.MaxPool2d(2,2), # -> 64x14x14\n",
|
|
" nn.Dropout(0.25),\n",
|
|
" \n",
|
|
" nn.Conv2d(64, 128, kernel_size=3, padding=1), # -> 128x14x14\n",
|
|
" nn.BatchNorm2d(128),\n",
|
|
" nn.ReLU(),\n",
|
|
" \n",
|
|
" nn.Conv2d(128, 128, kernel_size=3, padding=1), # -> 128x14x14\n",
|
|
" nn.BatchNorm2d(128),\n",
|
|
" nn.ReLU(),\n",
|
|
" nn.MaxPool2d(2,2), # -> 128x7x7\n",
|
|
" nn.Dropout(0.25),\n",
|
|
" )\n",
|
|
" \n",
|
|
" self.fc_layers = nn.Sequential(\n",
|
|
" nn.Flatten(),\n",
|
|
" nn.Linear(128*7*7, 512),\n",
|
|
" nn.ReLU(),\n",
|
|
" nn.Dropout(0.5),\n",
|
|
" nn.Linear(512, 10)\n",
|
|
" )\n",
|
|
" \n",
|
|
" def forward(self, x):\n",
|
|
" x = self.conv_layers(x)\n",
|
|
" x = self.fc_layers(x)\n",
|
|
" return x\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "3befeeae",
|
|
"metadata": {},
|
|
"source": [
|
|
"**Hinweis:** Wie bereits vorher einmal angekündigt, verwenden wir hier auch \"neue\" Layers, welche wir jetzt nicht im Detail besprechen, bei Interesse sind diese aber leicht selber zu lernen."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 20,
|
|
"id": "7804ef2d",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"### HYPERPARAMETER ###\n",
|
|
"\n",
|
|
"model = SigmaCNNFashionMNISTClassifier().to(device)\n",
|
|
"criterion = nn.CrossEntropyLoss()\n",
|
|
"lr = 0.001\n",
|
|
"optimizer = optim.Adam(model.parameters(), lr=lr, weight_decay = 1e-4)\n",
|
|
"epochs = 20\n",
|
|
"validate_at = 1\n",
|
|
"print_at = 200\n",
|
|
"early_stopping_patience = 3\n",
|
|
"save_path = os.path.join(\"..\", \"models\", \"best_model_sophisticated_cnn_fashion_mnist.pt\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"id": "3f762a6d",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch [1/20], Step [200/938], Loss: 0.6775\n",
|
|
"Epoch [1/20], Step [400/938], Loss: 0.3635\n",
|
|
"Epoch [1/20], Step [600/938], Loss: 0.4439\n",
|
|
"Epoch [1/20], Step [800/938], Loss: 0.5197\n",
|
|
"Epoch [1/20] - Validation Loss: 0.3771, Validation Accuracy: 86.14%\n",
|
|
">>> Found a better model and saved it at '../models/best_model_sophisticated_cnn_fashion_mnist.pt'\n",
|
|
"Epoch [2/20], Step [200/938], Loss: 0.2703\n",
|
|
"Epoch [2/20], Step [400/938], Loss: 0.2146\n",
|
|
"Epoch [2/20], Step [600/938], Loss: 0.5231\n",
|
|
"Epoch [2/20], Step [800/938], Loss: 0.3303\n",
|
|
"Epoch [2/20] - Validation Loss: 0.2523, Validation Accuracy: 90.44%\n",
|
|
">>> Found a better model and saved it at '../models/best_model_sophisticated_cnn_fashion_mnist.pt'\n",
|
|
"Epoch [3/20], Step [200/938], Loss: 0.3770\n",
|
|
"Epoch [3/20], Step [400/938], Loss: 0.1671\n",
|
|
"Epoch [3/20], Step [600/938], Loss: 0.3214\n",
|
|
"Epoch [3/20], Step [800/938], Loss: 0.3550\n",
|
|
"Epoch [3/20] - Validation Loss: 0.2688, Validation Accuracy: 89.86%\n",
|
|
"No Improvement. Early Stopping Counter: 1/3\n",
|
|
"Epoch [4/20], Step [200/938], Loss: 0.2788\n",
|
|
"Epoch [4/20], Step [400/938], Loss: 0.2245\n",
|
|
"Epoch [4/20], Step [600/938], Loss: 0.2170\n",
|
|
"Epoch [4/20], Step [800/938], Loss: 0.2386\n",
|
|
"Epoch [4/20] - Validation Loss: 0.2620, Validation Accuracy: 90.18%\n",
|
|
"No Improvement. Early Stopping Counter: 2/3\n",
|
|
"Epoch [5/20], Step [200/938], Loss: 0.3376\n",
|
|
"Epoch [5/20], Step [400/938], Loss: 0.1734\n",
|
|
"Epoch [5/20], Step [600/938], Loss: 0.1676\n",
|
|
"Epoch [5/20], Step [800/938], Loss: 0.3558\n",
|
|
"Epoch [5/20] - Validation Loss: 0.2116, Validation Accuracy: 92.12%\n",
|
|
">>> Found a better model and saved it at '../models/best_model_sophisticated_cnn_fashion_mnist.pt'\n",
|
|
"Epoch [6/20], Step [200/938], Loss: 0.1225\n",
|
|
"Epoch [6/20], Step [400/938], Loss: 0.1172\n",
|
|
"Epoch [6/20], Step [600/938], Loss: 0.2205\n",
|
|
"Epoch [6/20], Step [800/938], Loss: 0.2128\n",
|
|
"Epoch [6/20] - Validation Loss: 0.2128, Validation Accuracy: 92.24%\n",
|
|
"No Improvement. Early Stopping Counter: 1/3\n",
|
|
"Epoch [7/20], Step [200/938], Loss: 0.1310\n",
|
|
"Epoch [7/20], Step [400/938], Loss: 0.1170\n",
|
|
"Epoch [7/20], Step [600/938], Loss: 0.2907\n",
|
|
"Epoch [7/20], Step [800/938], Loss: 0.3590\n",
|
|
"Epoch [7/20] - Validation Loss: 0.2218, Validation Accuracy: 91.98%\n",
|
|
"No Improvement. Early Stopping Counter: 2/3\n",
|
|
"Epoch [8/20], Step [200/938], Loss: 0.2786\n",
|
|
"Epoch [8/20], Step [400/938], Loss: 0.3544\n",
|
|
"Epoch [8/20], Step [600/938], Loss: 0.0602\n",
|
|
"Epoch [8/20], Step [800/938], Loss: 0.1725\n",
|
|
"Epoch [8/20] - Validation Loss: 0.2126, Validation Accuracy: 92.56%\n",
|
|
"No Improvement. Early Stopping Counter: 3/3\n",
|
|
"Early Stopping triggered.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"train_model(model, train_loader, valid_loader, criterion, optimizer, epochs=epochs, validate_at=validate_at, print_at=print_at, patience=early_stopping_patience, save_path=save_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"id": "a5258817",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Finaler Test Loss: 0.2012\n",
|
|
"Finale Test Accuracy: 92.88%\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"model.load_state_dict(torch.load(save_path))\n",
|
|
"test_loss, test_acc = evaluate_model(model, test_loader, criterion)\n",
|
|
"print(f\"Finaler Test Loss: {test_loss:.4f}\")\n",
|
|
"print(f\"Finale Test Accuracy: {test_acc:.2f}%\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 23,
|
|
"id": "d11f050c",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"torch.cuda.empty_cache()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 24,
|
|
"id": "bc3edbfa",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 800x600 with 2 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Confusion Matrix of FashionMNIST model\n",
|
|
"\n",
|
|
"# load best model\n",
|
|
"\n",
|
|
"model.load_state_dict(torch.load(save_path))\n",
|
|
"model.eval()\n",
|
|
"\n",
|
|
"label_dict = {\n",
|
|
" 0: \"T-Shirt\",\n",
|
|
" 1: \"Trouser\",\n",
|
|
" 2: \"Pullover\",\n",
|
|
" 3: \"Dress\",\n",
|
|
" 4: \"Coat\",\n",
|
|
" 5: \"Sandal\",\n",
|
|
" 6: \"Shirt\",\n",
|
|
" 7: \"Sneaker\",\n",
|
|
" 8: \"Bag\",\n",
|
|
" 9: \"Ankle Boot\"\n",
|
|
"}\n",
|
|
"\n",
|
|
"all_labels = []\n",
|
|
"predictions = []\n",
|
|
"\n",
|
|
"for data, labels in test_loader:\n",
|
|
" data = data.to(device)\n",
|
|
" with torch.no_grad():\n",
|
|
" outputs = model(data)\n",
|
|
" predictions.append(outputs.argmax(dim=1).cpu().numpy())\n",
|
|
" all_labels.append(labels.numpy())\n",
|
|
"\n",
|
|
"cm = confusion_matrix(np.concatenate(all_labels), np.concatenate(predictions))\n",
|
|
"\n",
|
|
"plt.figure(figsize=(8, 6))\n",
|
|
"sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=label_dict.values(), yticklabels=label_dict.values())\n",
|
|
"plt.title(\"Confusion Matrix for CNN FashionMNIST Classification\")\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "701c4bfe",
|
|
"metadata": {},
|
|
"source": [
|
|
"Wie können wir das eventuell noch weiter verbessern?"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "cdd6e01b",
|
|
"metadata": {},
|
|
"source": [
|
|
"Wir verwenden ein Pretrained Model und finetunen es auf unseren Daten."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "9aee01d0",
|
|
"metadata": {},
|
|
"source": [
|
|
"> **Übung:** Lade dir ein Pretrained Model herunter (zBsp *ResNet18*) und trainiere es nochmal mit unserer Trainingsmethode für weitere 20 Epochen."
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "dsai",
|
|
"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.9.23"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|