def train(trainloader): """ Performs training and evaluation of CNN model. NOTE: You should the model on the whole test set each eval_freq iterations. """ # YOUR TRAINING CODE GOES HERE n_channels = 3 n_classes = 5 cnn = CNN(n_channels, n_classes) device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") cnn.to(device) # Loss and Optimizer criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(cnn.parameters(), lr=LEARNING_RATE_DEFAULT) losses = [] accuracies = [] for epoch in range(MAX_EPOCHS_DEFAULT): timestart = time.time() running_loss = 0.0 for step, (batch_x, batch_y) in enumerate(trainloader): # zero the parameter gradients optimizer.zero_grad() # Forward + Backward + Optimize batch_x, batch_y = batch_x.to(device), batch_y.to(device) outputs = cnn(batch_x) loss = criterion(outputs, batch_y) loss.backward() optimizer.step() running_loss += loss.item() if step % EVAL_FREQ_DEFAULT == EVAL_FREQ_DEFAULT - 1: print('[epoch: %d, step: %5d] loss: %.4f' % (epoch, step, running_loss / EVAL_FREQ_DEFAULT)) losses.append(running_loss / EVAL_FREQ_DEFAULT) running_loss = 0.0 accu = accuracy(outputs, batch_y) accuracies.append(accu) print('Accuracy on the %d train images: %.3f %%' % (batch_y.size(0), accu)) break print('epoch %d cost %3f sec' % (epoch, time.time() - timestart)) print('---Finished Training---') return cnn, losses, accuracies
###################################################### # LOAD DATA ###################################################### train_loader = get_train_loader( '/scratch/ehd255/ssl_data_96/supervised/train/', batch_size=32) # unsup_loader = get_unsup_loader('/scratch/ehd255/ssl_data_96/unsupervised/', batch_size=32) test_loader = get_test_loader('/scratch/ehd255/ssl_data_96/supervised/val/', batch_size=32) ###################################################### # BUILD MODEL ###################################################### model = CNN() model.to(device) ###################################################### # TRAIN MODEL ###################################################### def train(num_epochs=10): model.train() optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5) for epoch in range(num_epochs): for batch_idx, (data, target) in enumerate(train_loader):