def test_fit_swa_cuda(self): for model_name in supported_tv_models: model = cnn.create_cnn(model_name, 10, pretrained=None) opt = torch.optim.Adam(model.parameters(), lr=1e-3) loss = nn.CrossEntropyLoss() scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(opt, T_max=300) swa_scheduler = SWALR(opt, anneal_strategy="linear", anneal_epochs=20, swa_lr=0.05) swa_start = 2 history = cnn.fit(model, 3, train_loader, val_loader, loss, device="cpu", optimizer=opt, scheduler=scheduler, num_batches=10, swa_start=swa_start, swa_scheduler=swa_scheduler) self.assertIsInstance(history, Dict) exp_keys = ("train", "val") for exp_k in exp_keys: self.assertTrue(exp_k in history.keys()) exp_keys2 = ("top1_acc", "top5_acc", "loss") for exp_k2 in exp_keys2: self.assertTrue(exp_k2 in history["train"].keys()) self.assertTrue(exp_k2 in history["val"].keys())
def test_fit_cuda(self): for model_name in supported_tv_models: model = cnn.create_cnn(model_name, 10, pretrained=None) opt = torch.optim.Adam(model.parameters(), lr=1e-3) loss = nn.CrossEntropyLoss() # scheduler = torch.optim.lr_scheduler.CyclicLR(optimizer=opt, base_lr=1e-4, max_lr=1e-3, mode="min") history = cnn.fit(model, 1, train_loader, val_loader, loss, device="cuda", optimizer=opt, num_batches=10, fp16=True) self.assertIsInstance(history, Dict) exp_keys = ("train", "val") for exp_k in exp_keys: self.assertTrue(exp_k in history.keys()) exp_keys2 = ("top1_acc", "top5_acc", "loss") for exp_k2 in exp_keys2: self.assertTrue(exp_k2 in history["train"].keys()) self.assertTrue(exp_k2 in history["val"].keys())
def test_val_sanity_fit(self): for model_name in supported_tv_models: model = cnn.create_cnn(model_name, 10, pretrained=None) model = model.cpu() loss = nn.CrossEntropyLoss() res = cnn.val_sanity_fit(model, val_loader, loss, "cpu", num_batches=10) self.assertTrue(res)
def test_infer(self): # Infer over an image image = Image.open("tests/assets/grace_hopper_517x606.jpg") tensor = im2tensor(image) self.assertEqual(tensor.ndim, 4) for model_name in supported_tv_models: model = cnn.create_cnn(model_name, 10, pretrained=None) model = model.cpu() model = model.eval() out = model(tensor) self.assertEqual(out.shape[1], 10) self.assertEqual(out.ndim, 2)
def test_train(self): # Read Image using PIL Here # Do forward over image image = Image.open("tests/assets/grace_hopper_517x606.jpg") tensor = im2tensor(image) self.assertEqual(tensor.ndim, 4) for model_name in supported_tv_models: model = cnn.create_cnn(model_name, 10, pretrained=None) model = model.cpu() out = model(tensor) self.assertEqual(out.shape[1], 10) self.assertEqual(out.ndim, 2)
def test_sanity_fit_cuda(self): for model_name in supported_tv_models: model = cnn.create_cnn(model_name, 10, pretrained=None) loss = nn.CrossEntropyLoss() res = cnn.sanity_fit(model, train_loader, val_loader, loss, "cuda", num_batches=10, fp16=True) self.assertTrue(res)
def test_train_sanity_fit_cuda(self): for model_name in supported_tv_models: model = cnn.create_cnn(model_name, 10, pretrained=None) opt = torch.optim.Adam(model.parameters(), lr=1e-3) loss = nn.CrossEntropyLoss() res = cnn.train_sanity_fit(model, train_loader, loss, "cuda", num_batches=10, fp16=True) self.assertTrue(res)
def test_val_step(self): for model_name in supported_tv_models: model = cnn.create_cnn(model_name, 10, pretrained=None) model = model.cpu() loss = nn.CrossEntropyLoss() val_metrics = cnn.val_step(model, val_loader, loss, "cpu", num_batches=10) self.assertIsInstance(val_metrics, Dict) exp_keys = ("loss", "top1", "top5") for exp_k in exp_keys: self.assertTrue(exp_k in val_metrics.keys())
def test_csv_single_label_dataset(self): complete_dataset = CSVSingleLabelDataset(df, data_dir, "Image", "Label", tfms, "png") self.assertTrue(complete_dataset[0]) train_loader = torch.utils.data.DataLoader(complete_dataset, num_workers=1) model = cnn.create_cnn("resnet18", 2, pretrained=None) opt = torch.optim.Adam(model.parameters(), lr=1e-3) loss = nn.CrossEntropyLoss() res = cnn.train_sanity_fit(model, train_loader, loss, "cpu", num_batches=1) self.assertTrue(res)
def test_train_step_cuda(self): for model_name in supported_tv_models: model = cnn.create_cnn(model_name, 10, pretrained=None) opt = torch.optim.Adam(model.parameters(), lr=1e-3) loss = nn.CrossEntropyLoss() # scheduler = torch.optim.lr_scheduler.CyclicLR(optimizer=opt, base_lr=1e-4, max_lr=1e-3, mode="min") scaler = amp.GradScaler() train_metrics = cnn.train_step(model, train_loader, loss, "cuda", opt, num_batches=10, scaler=scaler) self.assertIsInstance(train_metrics, Dict) exp_keys = ("loss", "top1", "top5") for exp_k in exp_keys: self.assertTrue(exp_k in train_metrics.keys())
def test_create_cnn(self): for model_name in supported_tv_models: model = cnn.create_cnn(model_name, 10, pretrained=None) self.assertTrue(isinstance(model, nn.Module))