|
@@ -28,10 +28,11 @@ from datetime import datetime
|
|
import torch.optim as optim
|
|
import torch.optim as optim
|
|
import utils.models as models
|
|
import utils.models as models
|
|
import utils.layers as ly
|
|
import utils.layers as ly
|
|
|
|
+from tqdm import tqdm
|
|
|
|
|
|
-#FOR TESTING
|
|
|
|
-import torchsummary
|
|
|
|
-
|
|
|
|
|
|
+#Set Default GPU
|
|
|
|
+cuda_device = torch.device('cuda:1')
|
|
|
|
+torch.set_default_device(cuda_device)
|
|
|
|
|
|
print("--- RUNNING ---")
|
|
print("--- RUNNING ---")
|
|
print("Pytorch Version: " + torch. __version__)
|
|
print("Pytorch Version: " + torch. __version__)
|
|
@@ -39,29 +40,33 @@ print("Pytorch Version: " + torch. __version__)
|
|
# data & training properties:
|
|
# data & training properties:
|
|
val_split = 0.2 # % of val and test, rest will be train
|
|
val_split = 0.2 # % of val and test, rest will be train
|
|
runs = 1
|
|
runs = 1
|
|
-epochs = 100
|
|
|
|
|
|
+epochs = 10
|
|
time_stamp = timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
|
|
time_stamp = timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
|
|
seeds = [np.random.randint(0, 1000) for _ in range(runs)]
|
|
seeds = [np.random.randint(0, 1000) for _ in range(runs)]
|
|
|
|
|
|
|
|
+#Data Path
|
|
|
|
+mri_datapath = '/data/data_wnx1/_Data/AlzheimersDL/CNN+RNN-2class-1cnn+data/PET_volumes_customtemplate_float32/'
|
|
|
|
|
|
|
|
+#Local Path
|
|
|
|
+local_path = '/export/home/nschense/alzheimers/Pytorch_CNN-RNN'
|
|
|
|
|
|
-mri_datapath = './ADNI_volumes_customtemplate_float32/'
|
|
|
|
-xls_file = './Lp_ADNIMERGE.csv'
|
|
|
|
|
|
+xls_path = local_path + '/LP_ADNIMERGE.csv'
|
|
|
|
+saved_model_path = local_path + 'saved_models/'
|
|
|
|
|
|
|
|
|
|
# TODO: Datasets include multiple labels, such as medical info
|
|
# TODO: Datasets include multiple labels, such as medical info
|
|
|
|
|
|
|
|
|
|
def evaluate_model(seed):
|
|
def evaluate_model(seed):
|
|
- training_data, val_data, test_data = prepare_datasets(mri_datapath, xls_file, val_split, seed)
|
|
|
|
|
|
+ training_data, val_data, test_data = prepare_datasets(mri_datapath, xls_path, val_split, seed)
|
|
|
|
|
|
|
|
|
|
batch_size = 64
|
|
batch_size = 64
|
|
|
|
|
|
# Create data loaders
|
|
# Create data loaders
|
|
- train_dataloader = DataLoader(training_data, batch_size=batch_size, shuffle=True)
|
|
|
|
- test_dataloader = DataLoader(test_data, batch_size=batch_size, shuffle=True)
|
|
|
|
- val_dataloader = DataLoader(val_data, batch_size=batch_size, shuffle=True)
|
|
|
|
|
|
+ train_dataloader = DataLoader(training_data, batch_size=batch_size, shuffle=True, generator=torch.Generator(device=cuda_device))
|
|
|
|
+ test_dataloader = DataLoader(test_data, batch_size=batch_size, shuffle=True, generator=torch.Generator(device=cuda_device))
|
|
|
|
+ val_dataloader = DataLoader(val_data, batch_size=batch_size, shuffle=True, generator=torch.Generator(device=cuda_device))
|
|
|
|
|
|
#Print Shape of Image Data
|
|
#Print Shape of Image Data
|
|
print("Shape of MRI Data: ", training_data[0][0].shape)
|
|
print("Shape of MRI Data: ", training_data[0][0].shape)
|
|
@@ -71,24 +76,25 @@ def evaluate_model(seed):
|
|
print("Length of Training Data: ", len(train_dataloader))
|
|
print("Length of Training Data: ", len(train_dataloader))
|
|
|
|
|
|
|
|
|
|
- print("Initializing Model...")
|
|
|
|
- model_CNN = models.CNN_Net(1, 2, 0.5).cuda()
|
|
|
|
|
|
+ print("--- INITIALIZING MODEL ---")
|
|
|
|
+ model_CNN = models.CNN_Net(1, 2, 0.5).to(cuda_device)
|
|
criterion = nn.BCELoss()
|
|
criterion = nn.BCELoss()
|
|
optimizer = optim.Adam(model_CNN.parameters(), lr=0.001)
|
|
optimizer = optim.Adam(model_CNN.parameters(), lr=0.001)
|
|
print("Seed: ", seed)
|
|
print("Seed: ", seed)
|
|
epoch_number = 0
|
|
epoch_number = 0
|
|
|
|
|
|
- print("Training Model...")
|
|
|
|
|
|
+ print("--- TRAINING MODEL ---")
|
|
for epoch in range(epochs):
|
|
for epoch in range(epochs):
|
|
running_loss = 0.0
|
|
running_loss = 0.0
|
|
- for i, data in enumerate(train_dataloader, 0):
|
|
|
|
|
|
+ length = len(train_dataloader)
|
|
|
|
+ for i, data in tqdm(enumerate(train_dataloader, 0), total=length, desc="Epoch " + str(epoch), unit="batch"):
|
|
mri, xls, label = data
|
|
mri, xls, label = data
|
|
|
|
|
|
optimizer.zero_grad()
|
|
optimizer.zero_grad()
|
|
|
|
|
|
- mri = mri.cuda().float()
|
|
|
|
- xls = xls.cuda().float()
|
|
|
|
- label = label.cuda().float()
|
|
|
|
|
|
+ mri = mri.to(cuda_device).float()
|
|
|
|
+ xls = xls.to(cuda_device).float()
|
|
|
|
+ label = label.to(cuda_device).float()
|
|
|
|
|
|
|
|
|
|
outputs = model_CNN((mri, xls))
|
|
outputs = model_CNN((mri, xls))
|