diff --git a/AsyncDataLoader.py b/AsyncDataLoader.py index 3bdb07f..ce484f3 100644 --- a/AsyncDataLoader.py +++ b/AsyncDataLoader.py @@ -51,7 +51,6 @@ class AsyncDataLoader(torch.utils.data.DataLoader): self.__dataset_access.acquire() - self.__dataset_access.release() diff --git a/cnn_train.py b/cnn_train.py index 8b02705..326bef2 100644 --- a/cnn_train.py +++ b/cnn_train.py @@ -4,7 +4,7 @@ import numpy.random import torch.utils.data import torch.cuda -from architecture import MyCNN +from architecture import model from dataset import ImagesDataset from AImageDataset import AImagesDataset @@ -49,10 +49,7 @@ def train_model(accuracies, dataset = ImagesDataset("training_data") - # dataset = torch.utils.data.Subset(dataset, range(0, 32)) - train_data, eval_data = split_data(dataset) - # train_data, eval_data = torch.utils.data.random_split(dataset, [0.5, 0.5]) augmented_train_data = AImagesDataset(train_data, augment_data) train_loader = AsyncDataLoader(augmented_train_data, @@ -123,12 +120,8 @@ def train_model(accuracies, losses.append('eval_loss', eval_loss.item() / len(eval_data)) print("Eval: ", eval_positives.item(), "/ ", len(eval_data), " = ", eval_positives.item() / len(eval_data)) - # print epoch summary - - # print(f"Epoch: {epoch} --- Train loss: {train_loss:7.4f} --- Eval loss: {eval_loss:7.4f}") - if eval_positives.item() / len(eval_data) > 0.5: - torch.save(model.state_dict(), f'models/model-{start_time.strftime("%Y%m%d-%H%M%S")}-epoch-{epoch}.pt') + torch.save(model.state_dict(), f'models/model-{start_time.strftime("%Y%m%d-%H%M%S")}-epoch-{epoch}.pth') with open(f'models/model-{start_time.strftime("%Y%m%d-%H%M%S")}.csv', 'a') as file: file.write(f'{epoch};{len(augmented_train_data)};{len(eval_data)};{train_loss.item()};{eval_loss.item()};' f'{train_positives};{eval_positives}\n') @@ -140,15 +133,13 @@ def train_worker(p_epoch, p_train, p_eval, plotter_accuracies, plotter_loss, sta device = 'cuda' - model = MyCNN(input_channels=1, - input_size=(100, 100)).to(device) + model.to(device) num_epochs = 1000000 batch_size = 64 optimizer = torch.optim.Adam(model.parameters(), lr=0.0001, - # weight_decay=0.1, fused=True) loss_function = torch.nn.CrossEntropyLoss() diff --git a/verify.py b/verify.py new file mode 100644 index 0000000..ebb2784 --- /dev/null +++ b/verify.py @@ -0,0 +1,26 @@ +import torch +import torch.utils.data + +from architecture import model +from dataset import ImagesDataset + +if __name__ == "__main__": + model_params = torch.load("submit_attempts/Nr1/model-20240713-164545-epoch-30.pth") + + model.load_state_dict(model_params) + model.eval() + + dataset = ImagesDataset("training_data") + + correct = 0 + + print("evaluating...") + + for (image_t, class_id, _, _) in torch.utils.data.DataLoader(dataset): + out = model(image_t) + + if out.argmax() == class_id: + correct += 1 + + print(f"Identified {correct} images out of {len(dataset)} correctly") + print(f"Accuracy: {100 * correct / len(dataset)}%")