beautified for submission
This commit is contained in:
parent
c4a93e9fae
commit
ffe355e47c
|
|
@ -51,7 +51,6 @@ class AsyncDataLoader(torch.utils.data.DataLoader):
|
||||||
|
|
||||||
self.__dataset_access.acquire()
|
self.__dataset_access.acquire()
|
||||||
|
|
||||||
|
|
||||||
self.__dataset_access.release()
|
self.__dataset_access.release()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
15
cnn_train.py
15
cnn_train.py
|
|
@ -4,7 +4,7 @@ import numpy.random
|
||||||
import torch.utils.data
|
import torch.utils.data
|
||||||
import torch.cuda
|
import torch.cuda
|
||||||
|
|
||||||
from architecture import MyCNN
|
from architecture import model
|
||||||
from dataset import ImagesDataset
|
from dataset import ImagesDataset
|
||||||
|
|
||||||
from AImageDataset import AImagesDataset
|
from AImageDataset import AImagesDataset
|
||||||
|
|
@ -49,10 +49,7 @@ def train_model(accuracies,
|
||||||
|
|
||||||
dataset = ImagesDataset("training_data")
|
dataset = ImagesDataset("training_data")
|
||||||
|
|
||||||
# dataset = torch.utils.data.Subset(dataset, range(0, 32))
|
|
||||||
|
|
||||||
train_data, eval_data = split_data(dataset)
|
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)
|
augmented_train_data = AImagesDataset(train_data, augment_data)
|
||||||
train_loader = AsyncDataLoader(augmented_train_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))
|
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("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:
|
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:
|
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()};'
|
file.write(f'{epoch};{len(augmented_train_data)};{len(eval_data)};{train_loss.item()};{eval_loss.item()};'
|
||||||
f'{train_positives};{eval_positives}\n')
|
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'
|
device = 'cuda'
|
||||||
|
|
||||||
model = MyCNN(input_channels=1,
|
model.to(device)
|
||||||
input_size=(100, 100)).to(device)
|
|
||||||
|
|
||||||
num_epochs = 1000000
|
num_epochs = 1000000
|
||||||
|
|
||||||
batch_size = 64
|
batch_size = 64
|
||||||
optimizer = torch.optim.Adam(model.parameters(),
|
optimizer = torch.optim.Adam(model.parameters(),
|
||||||
lr=0.0001,
|
lr=0.0001,
|
||||||
# weight_decay=0.1,
|
|
||||||
fused=True)
|
fused=True)
|
||||||
loss_function = torch.nn.CrossEntropyLoss()
|
loss_function = torch.nn.CrossEntropyLoss()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)}%")
|
||||||
Loading…
Reference in New Issue