|
import torch
|
|
import utils
|
|
import model_builder as mb
|
|
import engine
|
|
|
|
|
|
def run_experiment(train_dataloaders: dict, test_dataloader: torch.utils.data.DataLoader, num_epochs: int, models: list[str], class_names: list[str], device: torch.device = None):
|
|
|
|
utils.set_seeds(seed=42)
|
|
|
|
|
|
experiment_number = 0
|
|
for dataloader_name, train_dataloader in train_dataloaders.items():
|
|
|
|
for epochs in num_epochs:
|
|
|
|
for model_name in models:
|
|
|
|
experiment_number += 1
|
|
print(f"[INFO] experiment number: {experiment_number}")
|
|
print(f"[INFO] model: {model_name}")
|
|
print(f"[INFO] dataloader: {dataloader_name}")
|
|
print(f"[INFO] number of epochs: {epochs}")
|
|
|
|
|
|
if model_name == "effnetb0":
|
|
model = mb.create_model_baseline_effnetb0(out_feats=len(class_names), device=device)
|
|
else:
|
|
model = mb.create_model_baseline_effnetb2(out_feats=len(class_names), device=device)
|
|
|
|
|
|
loss_fn = torch.nn.CrossEntropyLoss()
|
|
optimizer = torch.optim.Adam(params=model.parameters(), lr=0.001)
|
|
|
|
|
|
engine.train(model=model, train_dataloader=train_dataloader, test_dataloader=test_dataloader, optimizer=optimizer, loss_fn=loss_fn, epochs=epochs, device=device, writer=utils.create_writer(experiment_name=dataloader_name, model_name=model_name, extra=f"{epochs}_epochs"))
|
|
|
|
|
|
save_filepath = f"{model_name}_{dataloader_name}_{epochs}_epochs.pt"
|
|
utils.save_model(model=model, target_dir="models", model_name=save_filepath)
|
|
print("-"*50+"\n") |