HandWrittenDigits / train.py
HamzaNaser's picture
Upload 8 files
278639e verified
import torch
import argparse
from pathlib import Path
from model_builder import FullyDensed
from engine import test_step, train_step
from data_setup import data_loaders
from utils import save_model
def model_training(
P,
EPOCHS,
BATCH_SIZE,
HIDDEN_UNITS,
IMAGES_SIZE,
MODEL_NAME,
ROOT_PATH
):
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
device = torch.device('cpu')
train_data, test_data, class_names = data_loaders(ROOT_PATH=ROOT_PATH,BATCH_SIZE=BATCH_SIZE,IMAGES_SIZE=IMAGES_SIZE,P=P)
model = FullyDensed(HIDDEN_UNITS)
model = model.to(device)
loss_fn = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters())
for epoch in range(EPOCHS):
train_step(
epoch,
model,
loss_fn,
optimizer,
train_data,
device
)
acc = test_step(
epoch,
model,
loss_fn,
test_data,
device
)
save_model(model,path = ROOT_PATH ,MODEL_NAME = MODEL_NAME + f'{int(HIDDEN_UNITS)}-units {int(acc*100//1)}%')
if __name__=='__main__':
parser = argparse.ArgumentParser(description='Train a model with specified parameters.')
parser.add_argument('--P', type=int, default=15)
parser.add_argument('--epochs', type=int, default=3)
parser.add_argument('--batch_size', type=int, default=32)
parser.add_argument('--hidden_units', type=int, default=30)
parser.add_argument('--images_size', type=int, nargs=2, default=[300,300])
parser.add_argument('--model_name', type=str, default='Eff NetB0')
parser.add_argument('--root_path', type=str, default='/home/hamza/Desktop/Study-Notes/Machine Learning/Pytourch/Modular')
args = parser.parse_args()
P = args.P
EPOCHS = args.epochs
BATCH_SIZE = args.batch_size
HIDDEN_UNITS = args.hidden_units
IMAGES_SIZE = args.images_size
MODEL_NAME = args.model_name
ROOT_PATH = Path(args.root_path)
model_training(
P,
EPOCHS,
BATCH_SIZE,
HIDDEN_UNITS,
IMAGES_SIZE,
MODEL_NAME,
ROOT_PATH
)