From 1c04344ad6ab8e6b631e8e10f0cd459eef534656 Mon Sep 17 00:00:00 2001 From: Tinsae Date: Sun, 3 May 2026 17:48:51 +0200 Subject: [PATCH] added two modfels --- .gitignore | 29 ++--------------------------- Tune.py | 9 +++++---- architectures/Model.py | 14 ++++++++++++-- architectures/ResNet18.py | 8 ++++---- 4 files changed, 23 insertions(+), 37 deletions(-) diff --git a/.gitignore b/.gitignore index 408a3ac..f514b74 100644 --- a/.gitignore +++ b/.gitignore @@ -1,27 +1,2 @@ - -# Python cache -__pycache__/ -*.pyc -*.pyo - -# Virtual environment -venv/ -.venv/ -bin/ -lib/ -lib64/ -include/ -share/ -pyvenv.cfg - -# Data & datasets -data/ -bin/ - -# Model weights -*.pth - -# System / logs -.DS_Store -*.log -*.tmp \ No newline at end of file +# Created by venv; see https://docs.python.org/3/library/venv.html +* diff --git a/Tune.py b/Tune.py index 845bfd4..2f2a164 100644 --- a/Tune.py +++ b/Tune.py @@ -10,7 +10,7 @@ from architectures.Model import Model, Architecture # numbre of classes CLASS_SIZE = 20 # batch -BATCH_SIZE = 8 +BATCH_SIZE = 16 # size of images per class trainset + testset # 30 works best, more than that and we dont have enough data @@ -33,7 +33,8 @@ RESOLUTION = 224 # - RESNET50 # - DENSENET121 # - INCEPTION -arch = Architecture.RESNET18 +# - GOOGLENET +arch = Architecture.EFFICIENTNET # DATA PREPARATION # load data set and prepare @@ -94,7 +95,7 @@ model.train( # save. torch.save( model.get().state_dict(), - f'{arch.name}.pth') + f'{arch.name.lower()}.pth') # done tuning print('Model saved!') @@ -118,4 +119,4 @@ print(f"Total test images for these {CLASS_SIZE} classes: {len(test_data)}") # Evaluate model.evaluate( - loader = test_loader) \ No newline at end of file + loader = test_loader) diff --git a/architectures/Model.py b/architectures/Model.py index aaf7f55..53e7aa5 100644 --- a/architectures/Model.py +++ b/architectures/Model.py @@ -1,3 +1,4 @@ + from abc import ABC, abstractmethod import torch import torch.nn as nn @@ -85,10 +86,17 @@ class Model(ABC): case Architecture.DENSENET121: from architectures.DenseNet121 import DenseNet121 return DenseNet121(device, size) + # googleNet + case Architecture.GOOGLENET: + from architectures.GoogleNet import GoogleNet + return GoogleNet(device, size) + # EfficientNet + case Architecture.EFFICIENTNET: + from architectures.EfficentNet import EfficientNet + return EfficientNet(device, size) case _: raise ValueError(f"Unknown model: {arch}") - # model architectures from enum import Enum, auto @@ -96,4 +104,6 @@ class Architecture(Enum): RESNET18 = auto() RESNET50 = auto() INCEPTION = auto() - DENSENET121 = auto() \ No newline at end of file + DENSENET121 = auto() + GOOGLENET = auto() + EFFICIENTNET = auto() \ No newline at end of file diff --git a/architectures/ResNet18.py b/architectures/ResNet18.py index 4d6cbab..e0c1d9d 100644 --- a/architectures/ResNet18.py +++ b/architectures/ResNet18.py @@ -11,12 +11,12 @@ class ResNet18(Model): m = models.resnet18(weights=models.ResNet18_Weights.DEFAULT) # freez all layers - for param in m.parameters(): - param.requires_grad = False + #for param in m.parameters(): + # param.requires_grad = False # unfreez the last two - for param in m.layer3.parameters(): param.requires_grad = True - for param in m.layer4.parameters(): param.requires_grad = True + #for param in m.layer3.parameters(): param.requires_grad = True + #for param in m.layer4.parameters(): param.requires_grad = True m.fc = nn.Linear(m.fc.in_features, self.size) return m.to(self.device) \ No newline at end of file