예제 #1
0
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
예제 #2
0
######################################################
# 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):